使用PDF作为编辑格式通常是一个不错的选择。如果你有一个固定字段的表单,那么很容易。使用交互式表单创建PDF模板。在这种形式中,基于AcroForm技术,您将定义具有固定坐标和固定大小的字段。然后,您可以将内容添加到这些字段。
这种方法的一个主要缺点是缺乏灵活性。你有没有注意到我在前一段中使用过三次“固定”这个词?如果文字不符合预定义的字段,那么您运气不好。如果该字段超尺寸,则会以大量空白结束。如果您可以预测数据会是什么样,这种方法非常棒。典型的用例是票证或优惠券。例如:空白表格是一个非常好的页面,只有几个字段,自动化系统可以输入名称,日期,时间和座位号。
这不是您在屏幕截图中显示的示例的最佳方法。预先知道每一行文本,每一个字,每个字符的位置。如果您想用一个长词替换一个短词(反之亦然),那么需要重新计算所有这些(每行,整个页面,可能是整个文档)的位置。这是疯狂。只有设计能力很差的人才会提出这样的想法。
一个比较好的主意是将模板存储为HTML。见iText的的pdfHTML教程,在那里我们有这段HTML代码的实例chapter 5:
<html>
<head>
<title>Invitation to SXSW 2018</title>
</head>
<body>
<u><b>Re: Invitation</b></u>
<br>
<p>Dear <name>SXSW visitor</name>,
we hope you had a great SXSW film festival experience last year.
And we would like to invite you to the next edition of SXSW Film
that takes place from March 9 until March 17, 2018.</p>
<p>Sincerely,<br>
The SXSW crew<br>
<date>August 4, 2017</date></p>
</body>
</html>
其实,它不是真正的HTML,因为<name>
标签和标签<date>
中不存在的HTML。所有HTML处理器(浏览器以及pdfHTML)忽略这些标签和对待自己的内容,如同标签是<span>
:
它没有多大意义,这样的标签的纯背景HTML,但在pdfHTML的情况下它确实很有意义。随着pdfHTMLL,您可以配置自定义标签,并有一个结果,看起来像下面显示的PDF文件:
看看在“李四”的文档,并将其与“布鲁诺Lowagie”的文件比较。名字“John Doe”比我的名字短得多,因此在第一行中有更多的词汇。文本流动得很好(我们也可以选择证明双方的文字是合理的)。这种“流动”是无法用你的方法实现的,因为你永远不会得到一个PDF模板来很好地回流。
好的,我明白了,你可能会说,10但是实际方面呢?你谈论Java/.Net库,但我正在使用Laravel和Angular.js。首先,让我告诉你,我认为你不会为Laravel或Angular.js找到任何好的PDF工具,因为PDF的性质和那些开发环境(在我看来,这些技术并不能很好地发挥作用一起)。不管我的意见如何,这不应该成为你的问题,因为你在亚马逊环境中工作。 AWS支持Java,并且获得pdfHTML所需的Java代码很少。我为pdfHTML教程编写的大部分代码示例都少于15行。那么为什么不尝试Java和PDFHTML?
看看这里的一些答案开始:https://stackoverflow.com/questions/34049956/generate-pdf-from-html-using-pdfmake-in-angularjs –
PDF是处理链中的最终格式。它特别不是为了容易改变内容而设计的,这可能要求现有的内容被重新流转。您可能会考虑更改模板以包含AcroForm表单字段并填充它们,但这会根据插入的名称留下更多或更少的较大间隔。或者,您可以考虑将模板重新编码为其他一些非最终格式,例如html,以该格式插入值,然后转换为pdf。 – mkl