【发布时间】:2017-04-06 14:32:38
【问题描述】:
我在 FDF 中导出了一个带有表单域的 PDF,并编写了一个子程序以逐字输出另一个 FDF,其中包含表单域值的单元格值。如果我在文本编辑器中编辑 FDF 并更改值,Acrobat 可以正常读取文件,但使用 VBA 输出的文件会引发错误:
Adobe 无法打开 whatever.fdf,因为它不是受支持的文件类型或文件已损坏
我尝试了两种不同类型的换行符,我尝试了一个类似的带有 xfdf 格式的 sub,但结果略有不同。
Sub something()
Dim sht As Worksheet
Set sht = Sheets("owssvr")
Dim lastrow As Integer
lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim Fileout As Object
Dim x As Integer
For x = 2 To lastrow
Set Fileout = fso.CreateTextFile("C:\Users\blabla\" & x & ".fdf", True, True)
Fileout.Write "%FDF-1.2" & vbCrLf & _
"%âãÏÓ" & vbCrLf & _
"1 0 obj" & vbCrLf & _
"<</FDF<</F(MyDocument.pdf)/Fields[<</T(Adobe Form Field)/V(" & sht.Range("U" & x) & ")>>]/ID[<4ED54800AC4A3D41ABE4F4C7B12A3D23><609E705B7532334B8F914CFF4C09F2A0>]/UF(MyDocument.pdf)>>/Type/Catalog>>" & vbCrLf & _
"endobj" & vbCrLf & _
"trailer" & vbCrLf & _
"<</Root 1 0 R>>" & vbCrLf & _
"%%EOF" & vbCrLf
Fileout.Close
Next x
End Sub
【问题讨论】:
-
我怀疑存在编码问题。考虑使用
StrConv函数来确保正确编码 (vbUnicode?) -
很好的标注,但使用 vbunicode 无效
-
"%âãÏÓ"是 ANSI 编码的字符串文字 - 如果它是 unicode,vbUnicode-encoding"%âãÏÓ"可能不会神奇地将其转换为 unicode 等价物;您可能需要将它与ChrW结合使用以发出实际 unicode 字符。 -
恐怕我从来没有使用过 Chr 或 Chrw,你能举个例子吗?
-
Debug.Print Chr(65)打印 ASCII 65,大写A。ChrW(1024)输出位置 1024 处的任何 unicode 字符;请注意,VBE 使用的是 ANSI 编码,因此您不能使用Debug.Print输出 unicode(所有内容都将显示为?)。 MSDN 有 VB.NET 等效函数的文档(VBA 函数的文档在 Google 上很难找到)。