【问题标题】:Convert PDF to HTML in PHP similar to DocuSign在 PHP 中将 PDF 转换为 HTML,类似于 DocuSign
【发布时间】:2020-01-14 21:32:03
【问题描述】:

我们正在开发一个需要将 PDF 文件转换为 HTML 的网站,因为某些 PDF 有一个表格(不一定是可填写的 PDF,这些 PDF 打印出来是为了填写)。

所以我们希望它通过我们的网站填写,而不是打印文件并用笔填写。我们将实现无纸化。

DocuSign 提供这些,您可以在其中上传 PDF,然后您可以将其自定义为具有文本框、复选框。所以我们有点使用 DocuSign 作为参考,但仍然没有弄清楚他们是如何做到的(几乎完美地将 PDF 转换为 HTML,反之亦然)。

到目前为止,我已经尝试了几种将 PDF 转换为 HTML 的第三方软件。我尝试过 XPDF、Poppler 和 ImageMagick。

ImageMagick 将 PDF 转换为不适合的图像,因为这些图像在转换回 PDF 进行打印时尺寸较大。

Poppler 是基于我的研究的一个 fork XPDF,我在使用 XPDF 后尝试过它是否更好,它基本上完成了 XPDF 的工作,但它会将 PDF 转换为在转换为 HTML 时在 CSS 上具有更大的像素。这很好,但它丢失了字体系列。

XPDF 将 PDF 转换为 HTML 但像素较小,因此当我将其转换回 PDF 时,它无法适应整个页面,我仍然需要手动调整所有 CSS 以适应它。

所以在使用了这些 3rd 方软件后,我使用 MPDF 将 HTML 文件转换回 PDF,转换后的文件有很多不一致之处。文本未正确对齐。和原来的PDF基本不一样。

任何帮助将不胜感激!

【问题讨论】:

  • Yii2和这个问题有什么关系
  • 我们在项目中使用 yii2 作为框架,我们希望 yii2 上有一个库。

标签: php pdf yii2 mpdf xpdf


【解决方案1】:

您尝试做的事情并不像看起来那么简单。多年来,我一直在使用 Adob​​e Sign(以前称为 EchoSign),并且对这些服务的工作方式有很好的了解。话虽如此,我强烈建议您研究其中一项电子签名服务,而不是尝试推出自己的服务。这将为您节省大量时间。

这就是一切的运作方式

  1. PDF 本身必须有一个带有命名字段的表单。换句话说,如果您在 Adob​​e Reader 或 Chrome 中打开此类 PDF,您应该能够填写这些字段。如果您的 PDF 没有 PDF 表单,您将需要 Acrobat PRO 等其他软件来创建表单。
  2. 您必须将 PDF 转换为可以在浏览器中呈现的平面图像。
  3. 您将需要一个工具来提取 PDF 表单信息,例如字段名称、类型、尺寸和坐标。
  4. 有了所有这些信息,您就可以在浏览器中呈现 PDF 图像。使用上一步中的字段类型、尺寸和坐标将绝对定位的 HTML 表单元素放置在图像上。每个 HTML 元素都需要按名称引用 PDF 表单字段。
  5. 从 HTML 小部件收集信息和数据映射(如 field_name => field_value)后,您将需要使用其他软件以编程方式在原始 PDF 中填写 PDF 表单。 PDF 表单信息通常存储在 FDF 或 XFDF 文件中。

我不知道有哪个工具可以帮助您解决上述问题,至少在 PHP 中没有。不过,我可以为您提供一个有用的建议:

  • PDFtk Server - 可以帮助您,提取 PDF 表单字段信息并填写相同的 XFDF 文件。遗憾的是,您可以使用此类工具提取的表单字段信息不包括尺寸和坐标。
  • iText - .Net 和 Java 中可用的库,可用于提取有关 PDF 表单的详细信息,包括字段的维度和坐标。您可以使用这个可以与 PHP 通信的工具包创建微服务。

肯定有更多的工具可以完成这项工作。希望这些信息能够引导您朝着正确的方向前进,或者帮助您决定如何推进您的项目。

【讨论】:

  • 这正是我们现在正在做的,定位绝对 html 表单元素,但是在从 PDF 转换的图像上,一旦使用 XPDF 转换 PDF,就会自动创建元素。我们做的第一个选项是图像上的 html 表单元素,但是在浏览了不同的 PDF 之后,我们遇到了错误的 PDF 到图像的转换,图像全黑,这就是我转换为 XPDF 而不是 ImageMagick 的原因。
  • 所以我想我们会坚持将 PDF 转换为图像,然后覆盖 html 表单元素,获取它们的值并将其放入 PDF 中的实际表单。我的最后一个问题是,是否有一个 PHP 库可以使 PDF 可填充?谢谢
  • 添加 Acrobat 表单或使 PDF 可填写的任务很可能需要手动执行。手动执行此操作并不算太糟糕,因为每个 PDF 应用程序只需要执行一次。您可能需要 Acrobat PRO 来执行此操作。如果您要查看 PDFtk 以提取 PDF 表单信息,请避免使用 Adobe LiveCycle 编辑 PDF :)
  • 感谢您的快速响应,我回到了我们的第一个选项。使用ImageMagick将PDF转换为图像,似乎我们遇到的问题是在转换为JPG文件时产生的,我们尝试了PNG,它看起来很棒。因此,现在我们只需将 html 元素放在图像上,并在提交后获取它们的数据以填写 PDF 表单。非常感谢您的帮助。
  • @Dave ...我一直在根据我在这里阅读的一篇文章开展一个项目。 codeproject.com/Articles/466362/Blend-PDF-with-HTML5 Demo:hanray.com/sites/BlendPDFWithHTML5/#/pdf/f1040ezt 他用的是PDF.js。如果您使用可填写表单的 PDF,它将呈现 pdf 的图像,然后在顶部覆盖 html 表单字段。我目前拥有它,因此它会在输入数据时保存数据。可以作为标准表格提交。处理序列化并存储在表中,然后读回数据,将数据插入 PDF,然后将其展平。
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2016-01-09
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多