我有一个设置了格式和布局的docx文档文件,我将其保存为PDF文件。我想使用这个pdf文件作为模板,创建预先填充了用户数据的新pdf文件。
我看过FPDF,FPDI,tcPDF,domPDF,ZendPDF,http://koivi.com/fill-pdf-form-fields/(Justin Koivisto),一些转换工具,如HTML2PDF和stackoverflow上提到的一些命令行工具。除了FPDI之外,它们都没有提供示例,使用PDF模板搜索并用实际数据替换自定义标签(通常来自数据库),或者添加数据而不指定一组值,如x、y、postion、字体、字体格式等。
从头开始创建PDF似乎工作量太大。我还没有考虑使用HTML2PDF转换器,因为结果似乎差异很大,然后出现了样式问题。有些工具允许CSS,但通常有一些限制,比如不支持浮动。
是否没有一种简单的方法可以像Excel和PHPExcel一样使用模板?
我的需求是:
- 免费
- 加载并使用模板
- 搜索和替换自定义标记
- 添加数据(文本、图像、字体、格式化等)
- 自定义页眉和页脚
- 必须使用共享主机
- 允许下载、保存/存储到服务器并附加到最终生成的PDF的电子邮件(最好不必先保存)
我真的很推荐MPDF:
- 它基于FPDF和HTML2FPDF,因此您可以使用它们的一些功能或添加其他功能
- 它有很多很酷的功能(创建任何类型的条形码、区域设置支持、水印等等)
- 它有一个制作精良的文档
- 它有一个社区论坛
- 它有例子
- 它有一个简单的学习曲线
唯一不好的是它有点重,但你可以去掉你不需要的东西。
使用TCPDF您可以使用HTML标签创建PDF模板。它创建速度快、易于使用、易于集成。我用它生成律师事务所的详细发票(多页不同格式)、珠宝车间的生产信封(包括照片)、库存票据和发票。
TCPD示例
尝试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');
另请参阅以下链接:PHP中有pdf模板的解决方案吗?
在PHP 中编写/绘制PDF模板文档
http://www.livedocx.com/
LiveDocx是一个基于模板的文档创建平台。
http://www.phplivedocx.org/articles/getting-started-with-phplivedocx/
您可以使用Word或OpenOffice邮件合并功能来创建模板并将数据导入标记中,而不是使用PHP。然后你可以"打印",但以pdf格式导出,而不是实际打印。如果您不需要定期更新模板,这可能是一个更快的解决方案。我为大约150个产品做了这件事,花了不到30分钟的时间,包括创建模板和上传pdf。只是事后想想,希望这能帮助到别人!
尝试使用PDF作为"模板"的问题是PDF是一种排版文档格式。这是一个固定的布局,你不应该把布局搞得太乱。
如果您想对此做更多的工作,那么使用XSL-FO之类的东西从XML"模板"生成文档会简单得多。您所需要做的就是生成具有正确字段的XML,然后XSL-FO渲染器可以为您创建PDF。
最好的(唯一的?)免费XSL-FO渲染器是Apache FOP。
您可以跳过在现有PDF上定义模板的所有痛苦https://github.com/applicius/dhek/releases。它在PDF页面/坐标上创建了一个JSON映射区域,这样您就可以用您喜欢的PDF API填充它。
我在一个项目中需要它,所以我为此创建了一个快速工具。您可以查看它,并随时在这里贡献
如果您的服务器安装了OpenOffice,您可以在无头模式下使用soffice将RTF文件(Rich Text Format)转换为PDF。
-
在Text like"中创建带有模板括号的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'");
以下是一些如何使用一个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');