我习惯使用 PDFTK 从 PHP 填写 PDF 表单。最近,有人要求我在 PDF 中插入 code-128 条形码。为此,我创建了一个 PDF,其中包含几个用于人类可读条目的文本字段以及一个特殊文本字段,其中的文本使用表示 code-128 符号的特殊字体呈现。此字体可在此处找到:http://www.jtbarton.com/Barcodes/Code128.aspx。人读字段和条形码字段之间的唯一区别是用于显示字符的字体。
到这一步为止,一切都运行正常。使用 Adobe Reader,我可以将准备好的条形码复制粘贴到我的特殊字段中,它可以很好地呈现,条形码阅读器可以扫描此代码。一个示例是Ñ000002HÓ
(Ñ
是启动器,然后是我的数据000002
,然后是校验H
和,最后是停止器Ó
)。
然后,当我尝试使用 PDFTK 填写表单时,我遇到了麻烦。如果我尝试用Ñ000002HÓ
它填充我的特殊字段,它只会呈现 ASCII 表中的字符(即000002H
),并显示某种方块,而不是预期的Ñ
和的条形码符号Ó
。更令人惊讶的是,尝试用完全相同的Ñ000002HÓ
短语填充人类可读的字段非常有效。
我验证了两种字段都接收完全相同的字符序列(包括 utf-8 编码),我检查了字体是否嵌入良好以防止显示问题,我确保 XFDF 文件格式正确,等等。
这里有一个 XFDF 示例,用于填充 PDF 表单,其中包含名为“human”和“barcode”的字段
<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="human"><value>Ñ000002HÓ</value></field>
<field name="barcode"><value>Ñ000002HÓ</value></field>
</fields>
</xfdf>
恐怕我没有更多的想法来解决这个问题。如果您能提供建议,我将不胜感激。
答案1
最后,我找到了一个解决方案。更确切地说,是一种解决方法。
似乎 PDFTK 无法正确处理嵌入 Identity-H 字体应用于表单字段的 UTF-8 字符。为了正确呈现 PDF 文件,替换具有内容的字段,只需将此内容设置为默认值此字段。这将使 Acrobat 处理表单字段的渲染过程,而不是将其委托给 PDFTK。
为此,只需添加need_appearances
到 PDFTK 命令行。
笔记- 表单字段保留在 PDFTK 创建的 PDF 中,这意味着用户可以在 Adobe Reader 中修改其内容。