gpt4 book ai didi

java - 使用 evince 保存后,可编辑的 .pdf 字段消失(但在字段焦点上可见)

转载 作者:搜寻专家 更新时间:2023-11-01 02:29:18 25 4
gpt4 key购买 nike

首先,让我感谢 SO 社区过去多次帮助我;你们是一个了不起的资源!

在我的工作中,我开发了一个 Web 应用程序,该应用程序使用在 Scribus 中创建的 PDF 模板和 iText Java 库来使用我们数据库中的数据填充模板。有时,用户提供的字段是必需的,但 iText 不会触及。下载 .pdf 后,编辑一个字段,并使用 Evince 保存一个副本,结果文件在重新打开时不会显示编辑后的文本。但是,在编辑字段的焦点上,它将显示保存的文本。散焦,文字消失。剪切文本,粘贴回字段;它保持可见 - 直到您保存并重新打开文档。保存并重新打开原始问题 list 后。我发现了很多关于这个问题的非常相似的帖子,但没有一个解决方案似乎对我有用。

另外,这个问题很古怪。如果我用 Evince 打开 Scribus 模板(iText 未修改的 .pdf 文件),然后编辑字段并保存,它们将在重新打开时正确显示。然而,一旦库接触到模板,问题就出现了。同样,我可以使用在搜索此问题原因时找到的 PDF 文件重现该问题;像这样:

http://www.quask.com/samples/pdfforms/pcpurchase.pdf

这让我相信行为不当的文件可能以某种方式损坏,iText 可能是我的问题的原因,但 iText 不是我可以重现问题的唯一途径,所以我不是确定要怎么想。在我见过的众多解决方案中,我似乎找不到可行的解决方案。是否有人对这个问题足够熟悉,可以告诉我在哪里可以深入了解这个问题,或者提供一些关于我正在使用的工具的见解?如果您使用谷歌搜索我已经看到的问题,那么很有可能......

我使用的是 Ubuntu 12.04(精确)、Evince 3.4.0、iText 2.1.5,并且可以根据要求尝试为您提供任何其他相关详细信息。我很担心发布任何代码,因为我不确定它是否符合 Kosher 标准,并且它可以很好地构建表单,除了这个特定问题;更不用说我可以在不使用我们的 webapp 的情况下重现问题了。

这是我在这里的第一篇文章,我是一名新手程序员(还在上学!)所以如果我违反了任何约定或可以以任何方式改进我 future 的查询,请告诉我。

感谢您提供的任何帮助!

最佳答案

检查 jbowman 在对他的问题的评论中提供的文件---特别注意密码字段(这是由 evince 最终填写的字段之一)---显示:

模板.pdf

  • 是由Scribus PDF Library 1.4.1.svn生成的原始表格;
  • 包含一个带有 9 个字段的 AcroForm,并且 NeedAppearances 标志设置为 true;
  • 有一个密码字段(名为 passwordField),其中包含一个空值和一个正常外观流,用空文本绘制一个矩形。

after_itext.pdf

  • 是 iText 2.1.5 编辑的原始表单,不幸的是不是在附加模式下,这会使分析更容易;
  • 包含一个带有 8 个字段的 Acroform(成员(member)编号字段已填写并展平),没有 NeedAppearances 标志;
  • 密码字段(名为 passwordField:u4woYY1FK9)的值和外观保持不变。

after_itext_edited.pdf

  • 以前由 iText 编辑的表单现在由其他软件(evince)以附加模式编辑;
  • 包含一个 Acroform,它有 8 个字段,没有 NeedAppearances 标志;对字段 passwordField:u4woYY1FK9 和 memberPrefix:u4woYY1FK9 进行了唯一更改:
  • 密码字段(名为 passwordField:u4woYY1FK9)具有新的关联值asdf,但其外观保持不变;
  • 成员前缀字段(名为 memberPrefix:u4woYY1FK9)具有新的关联值 asdf 但其外观保持不变。

因此,观察到的默认值未显示的行为是可以预期的:

最终的 Acroform 没有 NeedAppearances 标志。此标志在规范中定义 ISO 32000-1:2008作为:

A flag specifying whether to construct appearance streams and appearance dictionaries for all widget annotations in the document (see 12.7.3.3, “Variable Text”). Default value: false.

因此,您的最终形式的 PDF 文档说:不需要生成小部件的外观(例如 AcroForm 字段可视化),从文档中获取外观。

文档中密码字段的外观是原始的,带有空文本的矩形。

所以你看到这个空的矩形。

当您单击该字段时,PDF 查看器会准备编辑其内容,因此会显示它认为合适的值。

如果使用 evince 编辑 PDF 文件旨在获得可见结果,则在更改字段值时 evince 必须还添加更新的外观流或确保设置了 AcroForm NeddAppearances 标志。因此,这就是 evince 失败的地方。

关于java - 使用 evince 保存后,可编辑的 .pdf 字段消失(但在字段焦点上可见),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com