【问题标题】:QLPreviewController and UIWebView do not display filled PDFsQLPreviewController 和 UIWebView 不显示填充的 PDF
【发布时间】:2015-05-11 18:45:35
【问题描述】:

我有一个包含文本框的 PDF。我的程序使用 Xfinium PDF 软件来填充文本框。当我查看填写的 PDF 时,文档显示字段中没有数据。我尝试过使用 QLPreviewController 和 UIWebView ,但它们都不显示填写的字段;但是,如果我将文档通过电子邮件发送给自己并在 iPad 上的 Adob​​e DC 中打开它,所有数据都会正确显示。需要注意的是,即使是邮件应用程序也没有显示正确填写的 PDF。 这是在 iPad 上的 Adob​​e 中打开的 PDF 这是在我的应用程序的 UIWebView 中打开的 PDF(在 QLPreviewController 中也显示相同的方式

【问题讨论】:

    标签: c# ios pdf uiwebview xamarin


    【解决方案1】:

    PDF 表单可能会带来外观,也可能依赖查看器来为字段值创建外观。

    相当完整的 PDF 查看器(如 Adob​​e Reader 或 Foxit)可以很好地处理这两种变体。但是,与许多所谓的预览器一样,不完整的查看器需要现有的外观,并为不带外观的表单显示空文档。

    因此,如果您希望表单在不完整的查看器中也可见,请提供外观。

    【讨论】:

    • 感谢您的回复……但这意味着什么。 QLPreviewController 有外观吗?
    • PDF 有(或没有)外观。如果需要,预览器可能会或可能不会创建外观。由于您没有提供示例 PDF,我不得不假设缺少外观是问题所在。
    • 好的,看到其他答案 QLPreviewController 似乎比我预期的还要有限。因此,我的回答在许多情况下都是正确的,但在这种情况下并不正确。 QLPreviewController 根本不应该用于查看通用 pdf,而只能用于查看非常原始的 pdf。
    • 我不知道外观,需要设置一个布尔值NeedAppearances,我还根据@Mihai 的回答将字段展平
    【解决方案2】:

    QLPreviewController 使用 CGPDF* API 来显示 PDF 文件。 CGPDF* API 有一些限制,它只显示页面内容,不显示注释,无论它们是否有外观。表单字段使用小部件注释来显示字段内容,因此它们也不会显示。

    这里的解决方案是展平表单域。此操作会将表单字段转换为页面内容,QLPreviewController 将正确显示最终文件。此操作的缺点是表单字段不再可编辑。

    【讨论】:

      【解决方案3】:

      XFINIUM.PDF 库为字段值创建外观对象。该问题与不显示注释和表单字段的 iOS PDF 渲染引擎有关。如果您想使用 QLPreviewController 查看文件,解决方案是展平表单字段。
      使用这行代码将表单字段展平:

      pdfDocumentObject.Form.FlattenFormFields();
      

      免责声明:我为开发 XFINIUM.PDF 库的公司工作。

      【讨论】:

        【解决方案4】:

        QuickLook 和 UIWebView/WKWebView 都使用 Apple 内部且未记录的 CorePDF 框架,该框架没有可呈现 PDF AcroForms 的代码(无论是否由外观流支持都无关紧要)

        你可以

        1) 在服务器上或使用客户端库将文档展平。

        2) 从头开始​​重新实现所有内容并添加对 PDF 表单的支持。 (见Adobe's PDF Specifications中的第431ff页-“交互式表单字典”)

        我们在商业上可用的PSPDFKit SDK 中做了 (2)。它不使用 Apple 的渲染引擎,因为您无法在此处渲染 PDF 表单小部件的外观流,因此即使使用大量代码,您也无法获得文档中编码的表示形式。为此,您要么必须使用私有 API,要么自己重新实现所有内容。我们还支持 (1) 使用 PSPDFProcessor 类。

        【讨论】:

          【解决方案5】:

          谢谢, 它对我有用。

          pdfDocumentObject.Form.FlattenFormFields();

          巴拉。

          【讨论】:

          • 这不是问题的新答案,请删除。
          猜你喜欢
          • 2013-03-01
          • 2015-12-13
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2023-03-20
          相关资源
          最近更新 更多