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

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

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

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

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

我的需要是:

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

【问题讨论】:

  • 如果您创建这样的工具会很棒 =)
  • actualreports.com 的人创造了类似的东西,但他们为他们的服务收费。

标签: php pdf-generation


【解决方案1】:

我真的推荐MPDF

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

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

【讨论】:

    【解决方案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】:

        【讨论】:

          【解决方案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。

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

                    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'");

                    【讨论】:

                      【解决方案11】:

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

                      【讨论】:

                      • 无法访问此站点。
                      猜你喜欢
                      • 2019-03-22
                      • 1970-01-01
                      • 2012-05-17
                      • 1970-01-01
                      • 2010-11-19
                      • 2018-06-19
                      • 1970-01-01
                      • 2013-06-06
                      • 1970-01-01
                      相关资源
                      最近更新 更多