使用PHP从模板创建新的PDF

时间:2011-06-22 10:41:39

标签: php pdf-generation html2pdf

我有一个docx文档文件,其中包含格式化和布局,我将其另存为PDF文件。 我想使用这个pdf文件作为模板来创建预填充用户数据的新pdf文件。

我见过FPDFFPDItcPDFdomPDFZend PDFhttp://koivi.com/fill-pdf-form-fields/(Justin Koivisto),一些转换工具像HTML2PDF和stackoverflow上提到的一些命令行工具。除FPDI外,其中没有一个使用PDF模板提供示例来搜索和替换包含实际数据的自定义标记(通常来自数据库)或添加数据而不指定一堆值,如x,y,postion,font,font-formating等。

从头开始创建PDF似乎太多了。 我还没有考虑使用HTML2PDF转换器,因为结果看起来变化很大,然后存在样式问题。有些工具允许使用CSS,但通常有限制,例如没有浮动支持。

是不是像使用PHPExcel的Excel一样使用模板的简单方法?

我的需求是:

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

11 个答案:

答案 0 :(得分:14)

我真的推荐MPDF

  1. 它基于FPDF和HTML2FPDF,因此您可以使用它们的一些功能或添加其他功能
  2. 它有很多很酷的功能(创建任何类型的条形码,区域设置支持,水印等等)
  3. 它有一个非常精心制作的文档
  4. 它有一个社区论坛
  5. 它有例子!
  6. 它有一个简单的学习曲线
  7. 唯一不好的是它有点重量,但你可以删除你不需要的东西。

答案 1 :(得分:6)

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

TCPD examples

答案 2 :(得分:5)

尝试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

答案 3 :(得分:2)

答案 4 :(得分:1)

尝试将PDF用作“模板”的问题是PDF是排版文档格式。例如。它是一个固定的布局,你不应该过多地混淆布局。

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

以下是如何使用一个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 :(得分:0)

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

答案 10 :(得分:0)

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

  1. 在模板中创建带有模板括号的RTF,例如“亲爱的{{{name}}},你好吗?”

  2. 打开文件并使用$content=file_get_contents('path_to_file');

    加载内容
  3. 根据需要替换文本:$content=str_replace('{{{name}}}', 'Bruce Wanye', $content);

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

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