使用 PHP 从模板创建新的 PDF

Posted

技术标签:

【中文标题】使用 PHP 从模板创建新的 PDF【英文标题】:Create new PDF from template with PHP 【发布时间】:2011-09-20 06:41:10 【问题描述】:

我有一个设置了格式和布局的 docx 文档文件,我将其保存为 PDF 文件。 我想使用这个 pdf 文件作为模板来创建预先填充了用户数据的新 pdf 文件。

我见过FPDF、FPDI、tcPDF、domPDF、Zend PDF、http://koivi.com/fill-pdf-form-fields/ (Justin Koivisto)、一些转换工具,如 html2PDF 和这里提到的一些命令行工具在***上。除了FPDI,他们都没有提供使用PDF模板的示例来使用实际数据(通常来自数据库)搜索和替换自定义标签,或者在不指定数据的情况下添加数据x、y、位置、字体、字体格式等值。

从头开始创建 PDF 似乎工作量太大。 我还没有考虑使用HTML2PDF 转换器,因为结果看起来差别很大,然后是样式问题。一些工具允许 CSS,但通常有限制,比如不支持浮动。

有没有像phpExcel 的 Excel 那样使用模板的简单方法?

我的需要是:

免费 加载和使用模板 搜索和替换自定义标签 添加数据(文本、图像、字体、格式等) 自定义页眉和页脚 必须使用共享主机 允许下载、保存/存储到服务器并附加到最​​终生成的 PDF 的电子邮件(最好不必先保存)

【问题讨论】:

如果您创建这样的工具会很棒 =) actualreports.com 的人创造了类似的东西,但他们为他们的服务收费。 【参考方案1】:

我真的推荐MPDF:

    它基于 FPDF 和 HTML2FPDF,因此您可以使用它们的一些功能或添加其他功能 它有很多很酷的功能(创建任何类型的条形码、区域设置支持、水印等等) 它有一个制作精良的文档 它有一个社区论坛 它有例子! 它具有简单的学习曲线

唯一不好的是它有点重,但是你可以删除你不需要的东西。

【讨论】:

【参考方案2】:

使用 TCPDF,您可以使用 HTML 标签原则创建 PDF 模板,创建速度快,易于使用,易于集成 我用它来生成律师事务所的详细发票(不同格式的多页),生产信封珠宝工作室的照片(包括照片)、库存票据和发票。

TCPD examples

【讨论】:

【参考方案3】:

试试FPDI它支持编辑现有模板并在该模板文件中进行更改

用法非常简单:

<?php
require_once('fpdf.php');
require_once('fpdi.php');

$pdf = new FPDI();

$pagecount = $pdf->setSourceFile('TestDoc.pdf');
$tplidx = $pdf->importPage(1, '/MediaBox');

$pdf->addPage();
$pdf->useTemplate($tplidx, 10, 10, 90);

$pdf->Output('newpdf.pdf', 'D');

另请参阅以下链接: Is there a solution for pdf template in PHP?

Writing/Drawing over a PDF template document in PHP

【讨论】:

【参考方案4】:

http://www.livedocx.com/

LiveDocx 是一个基于模板的文档创建平台。

http://www.phplivedocx.org/articles/getting-started-with-phplivedocx/

【讨论】:

【参考方案5】:

尝试使用 PDF 作为“模板”的问题在于 PDF 是一种排版文档格式。例如。这是一个固定的布局,你不应该把布局弄得太乱。

如果您想用它做更多事情,使用 XSL-FO 之类的东西从 XML“模板”生成文档会简单得多。您需要做的就是生成包含正确字段的 XML,然后 XSL-FO 渲染器可以为您创建 PDF。

最好的(唯一?)免费 XSL-FO 渲染器是 Apache FOP。

【讨论】:

【参考方案6】:

您可以使用 https://github.com/applicius/dhek/releases 跳过在现有 PDF 上定义模板的所有痛苦。它在 PDF 页面/坐标上创建一个 JSON 映射区域,以便您可以使用您喜欢的 PDF API 填充它。

【讨论】:

【参考方案7】:

您可以使用 Word 或 OpenOffice 邮件合并功能来创建模板并将数据导入标签,而不是使用 PHP 执行此操作。然后您可以“打印”但导出为 pdf 而不是实际打印。如果您不需要定期更新模板,这可能是一个更快的解决方案。我为大约 150 种产品做了这个,只用了不到 30 分钟,包括创建模板和上传 pdf。只是事后的想法,希望这对其他人有帮助!

【讨论】:

【参考方案8】:

这里是一些示例,如何使用一个 PDF 模板和 HTML 内容创建多个页面。基于MPDF 库。

$mpdf = new mPDF('utf-8', $format_size, 0, '', $margin_left, $margin_right, $margin_top, $margin_bottom, 0, 0, $orientation);

if ( $bg_template )  
    // is a PDF template file
    $mpdf->SetImportUse();
    $pagecount = $mpdf->SetSourceFile( $bg_template );
    $tplIdx = $mpdf->ImportPage( $pagecount );


foreach ( $html as $one_letter_text ) 
    $mpdf->addPage();

    if ( $bg_template ) 
        $mpdf->useTemplate( $tplIdx, 0, 0);
    

    $mpdf->WriteHTML( $one_letter_text );

$title = 'my-letter.pdf';

$pdf_path = $this->created_pdf_upload_dir.'/'.$title;
$mpdf->Output( $pdf_path, 'F');

【讨论】:

【参考方案9】:

我在一个项目中需要它,所以我为此创建了一个快速工具。您可以查看并随时贡献here

【讨论】:

【参考方案10】:

如果您的服务器安装了 OpenOffice,您可以在无头模式下使用 soffice 将 RTF 文件(富文本格式)转换为 PDF。

    在“亲爱的,name,你好吗?”等文本中使用模板括号创建 RTF

    使用$content=file_get_contents('path_to_file');打开文件并加载内容

    根据需要替换文本:$content=str_replace('name', 'Bruce Wanye', $content);

    将内容保存到新文件:file_put_contents('path_to_file2', $content);

    现在转换为 PDF:excec("soffice --headless --convert-to pdf 'path_to_file2' --outdir 'target_directory'");

【讨论】:

【参考方案11】:

看看http://template2pdf.com/ 它提供了一个 API,允许您使用 OpenOffice 或 LibreOffice 模板并替换文本或图像。

【讨论】:

无法访问此站点。

以上是关于使用 PHP 从模板创建新的 PDF的主要内容,如果未能解决你的问题,请参考以下文章

从模板生成PDF的最佳方法[关闭]

使用 PDFSharp 从 HTML 模板生成 PDF 并发送到浏览器

在 PHP 中编写/绘制 PDF 模板文档

如何创建和填写 PDF 表单

有没有办法从 iOs 中的 XML/HTML 模板生成 PDF 文件

itextpdf 根据PDF模板生成新的PDF(自我理解)