使用 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 PDFSharp 从 HTML 模板生成 PDF 并发送到浏览器