【问题标题】:Font issue with PDFtkPDFtk 的字体问题
【发布时间】:2014-07-19 20:41:48
【问题描述】:

我在使用 pdftk 和带有 True Type 字体的文本字段填写表单时遇到了困难。

  • 字体文件 (.ttf) 已添加到 /Library/Fonts (OSX Mavericks)
  • 表单是使用 Adob​​e Acrobat Pro 创建的
  • 表单包括使用这些字体的普通(非表单)文本
  • 表单文本字段也使用这些字体
  • 可以使用 Adob​​e Acrobat Pro 甚至 Preview 成功填写和打印表单

但是,pdftk 在尝试使用以下命令填充它时会引发错误:

pdftk ./my_form.pdf fill_form my_data.fdf output ./the_output.pdf

输出是:

Unhandled Java Exception in create_output():
java.lang.ArrayIndexOutOfBoundsException: 0
   at pdftk.com.lowagie.text.pdf.DocumentFont.fillEncoding(pdftk)
   at pdftk.com.lowagie.text.pdf.DocumentFont.doType1TT(pdftk)
   at pdftk.com.lowagie.text.pdf.DocumentFont.<init>(pdftk)
   at pdftk.com.lowagie.text.pdf.AcroFields.getAppearance(pdftk)
   at pdftk.com.lowagie.text.pdf.AcroFields.setField(pdftk)
   at pdftk.com.lowagie.text.pdf.AcroFields.setFields(pdftk)

如果我将文本输入的字体更改为 Helvetica、Times Roman 或 Courier,pdftk 将成功创建 PDF。不过奇怪的是,Arial 和 Georgia 也抛出了同样的错误。

我尝试使用 Ghostscript 将字体嵌入到 PDF 中,正如这个问题 How to repair a PDF file and embed missing fonts 中所建议的那样,但无济于事。 gs 可能已嵌入字体,但它会删除表单字段,因此生成的 PDF 无法反馈到 pdftk

非常感谢一个可行的解决方案。

【问题讨论】:

  • PdfTk 使用过时版本的 iText 来填写表格。你会认出包裹中对我名字的引用。您是否尝试过使用最新版本的 iText 填写表格?如果问题仍然存在,我们(iText Software 公司)可以看看。我们不打算看 pdftk。我们不对 pdftk 负责,也不认可它。顺便说一句:我很高兴看到我的名字出现在关于过去 5 年未升级的软件的报告中,但我对此无能为力。
  • @BrunoLowagie 我非常感谢您为 iText 所做的所有工作,但恕我直言:pdftk 是 Java 世界以外的许多人的唯一途径。因此,对于我们中的许多人来说,您使用 iText 的建议根本不可行。但是,如何为 iText 提供一个漂亮而干净的命令行工具以使其可供更广泛的受众使用呢?

标签: pdf fonts truetype pdftk


【解决方案1】:

我在使用 pdftk 填写 Adob​​e Acrobat 生成的 PDF 上的表单时遇到了相同的 java.lang.ArrayIndexOutOfBoundsException: 0 错误。这个问题太老了,但我在 stackoverflow 或其他地方找不到一致的答案,所以我想我会发布我的修复。

最终对我有用:

  1. 在 OS X 应用预览中打开 PDF
  2. 单击表单域,添加文本然后删除该文本(因此实际上没有任何更改)
  3. 保存

  4. 再次通过pdftk 运行PDF

我一般对编码或 PDF 不太熟悉,但使用预览保存 PDF 似乎可以修复编码,或者至少将其放到 pdftk 可以使用它的地方。祝你好运。

【讨论】:

  • 如果对我来说也是如此。已将文档保存在 Adob​​e Acrobat DC 中,然后在预览中打开并编辑了所有表单字段,然后保存,错误消失了。
  • 也为我工作,但紧迫的问题仍然是:这实际上是做什么的?在将其提交到存储库之前必须考虑这一点吗?我的意思是,文件有什么变化?
  • 我没有 ArrayIndexOutOfBoundsException 但我遇到了字体看起来很奇怪的问题,但这个解决方案也解决了这个问题:-)
  • 提示:只有在编辑每个输入字段然后保存之后,我才能让它工作。如果我只编辑第一个输入并保存,我会遇到同样的错误。
  • 我花了一天时间试图解决这个问题;您的回答对我有帮助,谢谢!
【解决方案2】:

这让我头疼了 2 天。原来我把注意力集中在问题的错误一端。

一个很好的替代方法是在源 PDF 表单的字段中输入一些文本,而不是手动,只需完成一次,在您的情况下是 ./my_form.pdf。我不知道为什么会这样,但确实如此。这样,如果你想随时创建一个新文件,你就不必经历这个麻烦:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2013-01-06
    • 2015-08-10
    • 2013-11-25
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多