【问题标题】:Change placeholder in PDF更改 PDF 中的占位符
【发布时间】:2014-01-07 02:20:58
【问题描述】:

我正在为我们在路上的人设计一个报价系统的原型。

基本上我要做的是从网络表单中获取详细信息,然后将其用于填充 PDF 模板。

目前我认为最好的方法是创建一个带有占位符的 PDF 模板,例如[[clientname]],在 PDF 中找到该引用,然后将其与我们在表单中的内容进行交换。

我正在为应用程序使用 codeigniter,因为它没有快速原型设计的经验。有谁知道可以让我以这种方式轻松修改 PDF 文档的库或其他此类功能?

感谢您的宝贵时间!

【问题讨论】:

  • 目前我认为最好的方法是创建一个带有占位符的 PDF 模板,例如[[clientname]] - 我建议改用 AcroForm 表单字段。在许多 pdf 库中,填写表格通常相当容易。

标签: php codeigniter pdf


【解决方案1】:

PDF 是由页面渲染器渲染的对象的集合;通过“替换占位符”来修改块可能有效,但另一方面,它可能不会。例如,如果您在文档中写入“[[zip_code]]”,则它可能会被紧缩成三个或更多块,并且 PDF(一旦变得可读 - 它可能不会)将 完全包含 ASCII 序列“[[zip_code]]”。

最好的办法是使用 PDFLib 或 CPDF 从模板生成 空白 pdf,您将在其中存储每个文本块的坐标。实际上你可以在一个 PHP 文件中做到这一点like this:

$tokens = array(
    'zip'     => array( 2500, 1730, ... ),
    'address' => array( 2600, 1234, ... ),
    ...
);
foreach ($tokens as $token => $info) {
    list ($x, $y /*, ..font... size...*/) = $info;
    PDF_show_XY ($pdf, $record[$token], $x, $y );
}
PDF_end_document($pdf);

然后,当您将页面“覆盖”在您选择的背景上时,您可以使用 pdftk 之类的工具来做到这一点:

pdftk foreground.pdf background background.pdf output merged.pdf

使用适当的分辨率单位(例如十分之一毫米),您可以打印背景并使用普通标尺测量所需字段的位置。

PDF 会比您从头开始生成的要大一些,但它们完美打印 - 两层将在打印时“合并”,否则不会互相干扰。

【讨论】:

  • 哇,谢谢我根本没有考虑过这条路线。非常感谢。
【解决方案2】:

您可以使用https://code.google.com/p/dompdf/ 之类的东西,它将基于网页生成PDF。应该让事情变得简单 - 只需让页面看起来像你想要的那样,让用户填写相关信息,然后生成 pdf。

至于编辑现有 PDF,请参阅 PDF Editing in PHP?

http://www.setasign.com/products/fpdi/about/ 和 Zend 看起来是最好的选择。但是,考虑到您的限制,Zend 似乎很难使用。如果预算是一个问题,至少测试 dompdf 可能是值得的。

【讨论】:

  • 嗨,谢谢。不寻找 HTML 到 PDF,因为我们已经使用了一个风格化的 PDF 模板。而不是每次我们只希望 PDF 中的占位符被替换为 PHP 中保存的变量/自动响应时手动更改此文档。
  • 明白。更新了答案。
猜你喜欢
  • 1970-01-01
  • 2013-10-04
  • 2013-11-22
  • 1970-01-01
  • 2017-03-26
  • 2015-05-07
  • 2013-07-01
  • 2012-08-03
  • 2012-04-01
相关资源
最近更新 更多