QLPreviewController 和 UIWebView 不显示填充的 PDF
QLPreviewController and UIWebView do not display filled PDFs
我有一个 PDF,里面有文本框。我的程序使用 Xfinium PDF 软件来填充文本框。当我查看填写的 PDF 时,文档显示的字段中没有任何数据。我试过使用 QLPreviewController 和 UIWebView,它们都不显示填写的字段;但是,如果我将文档通过电子邮件发送给自己并在 iPad 上的 Adobe DC 中打开它,所有数据都会正确显示。可能需要注意的是,即使是邮件应用程序也不会显示正确填写的 PDF。
这是 iPad 在 Adobe 中打开的 PDF
这是在我的应用程序的 UIWebView 中打开的 PDF(在 QLPreviewController 中也显示相同的方式
PDF 表单可能会带来外观,或者可能依赖查看器为字段值创建外观。
相当完整的 PDF 查看器(如 Adobe Reader 或 Foxit)可以与这两种变体相处得很好。但是,不完整的查看器与许多所谓的预览器一样,需要现有的外观并为不带外观的表单显示空文档。
因此,如果您希望您的表单也对不完整的查看者可见,请提供外观。
QLPreviewController 使用 CGPDF* API 来显示 PDF 文件。 CGPDF* API 有一些限制,它只显示页面内容,不显示注释,无论它们是否有外观。表单字段使用小部件注释来显示字段内容,因此它们也不会显示。
此处的解决方案是展平表单域。此操作会将表单字段转换为页面内容,QLPreviewController 将正确显示最终文件。此操作的缺点是表单字段不再可编辑。
XFINIUM.PDF 库为字段值创建外观对象。该问题与 iOS 不显示注释和表单字段的 PDF 呈现引擎有关。如果您想使用 QLPreviewController 查看文件,解决方案是展平表单字段。
表单字段用这行代码展平:
pdfDocumentObject.Form.FlattenFormFields();
免责声明:我在开发 XFINIUM.PDF 库的公司工作。
QuickLook 和 UIWebView
/WKWebView
都使用 Apple 的内部和未记录的 CorePDF
框架,它没有可以呈现 PDF AcroForms 的代码(如果有外观流支持则无关紧要或不)
您可以
1) 在服务器上或使用客户端库展开文档。
2) 从头开始重新实现所有内容并添加对 PDF 表单的支持。 (参见 Adobe's PDF Specifications - "Interactive Form Dictionary" 中的第 431ff 页)
我们在商用 PSPDFKit SDK 中做了 (2)。它不使用 Apple 的呈现引擎,因为您无法在此处呈现 PDF 表单小部件的外观流,因此即使使用大量代码,您也无法获得文档中编码的表示形式。为此,您要么必须将结果设为 private API,要么自己重新实现所有内容。我们也支持 (1) 使用 PSPDFProcessor
class.
谢谢,
它对我有用。
pdfDocumentObject.Form.FlattenFormFields();
巴拉.
我有一个 PDF,里面有文本框。我的程序使用 Xfinium PDF 软件来填充文本框。当我查看填写的 PDF 时,文档显示的字段中没有任何数据。我试过使用 QLPreviewController 和 UIWebView,它们都不显示填写的字段;但是,如果我将文档通过电子邮件发送给自己并在 iPad 上的 Adobe DC 中打开它,所有数据都会正确显示。可能需要注意的是,即使是邮件应用程序也不会显示正确填写的 PDF。
这是 iPad 在 Adobe 中打开的 PDF
PDF 表单可能会带来外观,或者可能依赖查看器为字段值创建外观。
相当完整的 PDF 查看器(如 Adobe Reader 或 Foxit)可以与这两种变体相处得很好。但是,不完整的查看器与许多所谓的预览器一样,需要现有的外观并为不带外观的表单显示空文档。
因此,如果您希望您的表单也对不完整的查看者可见,请提供外观。
QLPreviewController 使用 CGPDF* API 来显示 PDF 文件。 CGPDF* API 有一些限制,它只显示页面内容,不显示注释,无论它们是否有外观。表单字段使用小部件注释来显示字段内容,因此它们也不会显示。
此处的解决方案是展平表单域。此操作会将表单字段转换为页面内容,QLPreviewController 将正确显示最终文件。此操作的缺点是表单字段不再可编辑。
XFINIUM.PDF 库为字段值创建外观对象。该问题与 iOS 不显示注释和表单字段的 PDF 呈现引擎有关。如果您想使用 QLPreviewController 查看文件,解决方案是展平表单字段。
表单字段用这行代码展平:
pdfDocumentObject.Form.FlattenFormFields();
免责声明:我在开发 XFINIUM.PDF 库的公司工作。
QuickLook 和 UIWebView
/WKWebView
都使用 Apple 的内部和未记录的 CorePDF
框架,它没有可以呈现 PDF AcroForms 的代码(如果有外观流支持则无关紧要或不)
您可以
1) 在服务器上或使用客户端库展开文档。
2) 从头开始重新实现所有内容并添加对 PDF 表单的支持。 (参见 Adobe's PDF Specifications - "Interactive Form Dictionary" 中的第 431ff 页)
我们在商用 PSPDFKit SDK 中做了 (2)。它不使用 Apple 的呈现引擎,因为您无法在此处呈现 PDF 表单小部件的外观流,因此即使使用大量代码,您也无法获得文档中编码的表示形式。为此,您要么必须将结果设为 private API,要么自己重新实现所有内容。我们也支持 (1) 使用 PSPDFProcessor
class.
谢谢, 它对我有用。
pdfDocumentObject.Form.FlattenFormFields();
巴拉.