【问题标题】:Convert HTML form data into a PDF file using PHP使用 PHP 将 HTML 表单数据转换为 PDF 文件
【发布时间】:2012-08-14 03:46:09
【问题描述】:

我这几天一直在寻找和测试这个,想知道是否有人可以为我指出不同的方向。我有一个很长的工作申请 HTML 表单 (jobapp.html) 和一个匹配的 PDF (jobpdf.pdf),它们对于 HTML 表单和 PDF 中的所有条目具有相同的字段名称。我需要获取表单中输入的用户数据并将其转换为 PDF。这是我到目前为止收集到的,但不知道我是否走上了正轨:

pdftk 是唯一可行的第三方应用吗?

使用 pdftk,我会获取为用户收集的 $_POST 数据并生成 .fdf(user.fdf),然后在 .pdf(job.pdf) 上展平 .fdf。因此,不管每个文档上的字段位于何处,fdf 上的信息都会按字段名称填充 pdf?

我一直在努力 http://koivi.com/fill-pdf-form-fields/tutorial.php

我也看过“Submit HTML form to PDF

【问题讨论】:

  • 当您说“捕获”时,您的意思是获取客户端屏幕捕获并将 转换为 PDF 吗?我想创建模板 PDF 并将表单数据合并到其中会更容易很多。这当然是一种更标准的方法来创建这样的报告。
  • 它本质上是一个填写好的工作申请表,当用户提交表单时,我希望能够将申请表保存为 pdf 格式。
  • 我会将 PDF 视为“视图”,就像页面一样。两者都有绑定到数据的字段,否则彼此不了解或以任何方式相互依赖。 HTML“视图”的字段布局用于浏览器呈现和交互,PDF“视图”的字段布局用于可打印性,作为一种数据报告。
  • @David 感谢您的洞察力。那么在用户输入信息并提交后,我是否必须从 html 表单生成 fdf,然后将 fdf 与 pdf 合并?我假设 pdf 需要具有反映 html 表单的字段名称。将这些与 pdftk 合并的最佳方法是什么?
  • 我不知道FDF是什么,也不知道pdftk的任何东西,所以我无法就具体的实现给出建议。正如一般指导原则一样,创建两个截然不同的视图比将第二个视图以某种方式紧密绑定到第一个视图(甚至尝试从第一个的客户端视图生成)更容易维护。

标签: php html forms pdf pdftk


【解决方案1】:

我曾多次使用fpdf 创建基于php 的pdf 文档。下面是一个例子:

require('fpdf.php');

$pdf = new FPDF();

$pdf->AddFont('georgia', '', 'georgia.php');
$pdf->AddFont('georgia', 'B', 'georgiab.php');
$pdf->AddFont('georgia', 'I', 'georgiai.php');

# Add UTF-8 support (only add a Unicode font)
$pdf->AddFont('freesans', '', 'freesans.php', true);
$pdf->SetFont('freesans', '', 12);

$pdf->SetTitle('My title');
$pdf->SetAuthor('My author');
$pdf->SetDisplayMode('fullpage', 'single');

$pdf->SetLeftMargin(20);
$pdf->SetRightMargin(20);

$pdf->AddPage();
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();

您可以通过网站本身的tutorials 快速学习。


EDIT:保存表单数据的示例:(是的,很简单...)

require('fpdf.php');
$pdf = new FPDF();

$pdf->AddPage();
foreach ($_POST as $key =>$data)
{
    $pdf->Write(5, "$key: $data"); //write
    $pdf->Ln(10); // new line
}
$pdf->Output($path_to_file . 'file.txt','F'); // save to file

看看这些用 fpdf 创建的页面,真的!

【讨论】:

  • @djacksway 只需使用 POST 数据将其写入 fpdf。比如 $pdf->Cell(40,10,$_POST['username]);etc... 很简单。
  • 这对于 100 个左右的字段会不会很麻烦,然后必须将与字段相关的信息写出来
  • @djacksway 你看到我编辑的例子了吗? foreach ($_POST as $key =>$data)。您必须小心添加每个一定数量的页面 $pdf->Write(5, "$key: $data"); 我认为这足以开始您的解决方案...
【解决方案2】:

http://www.fpdf.org/

那就是图书馆来做这件事。我在这里使用它来将图像添加到表单并提交以使用这些图像创建 PDF:http://productionlocations.com/locations

执行此操作的实际代码非常复杂。

【讨论】:

    【解决方案3】:

    我发现PrinceXML 非常易于使用。它获取您的 HTML/XML,应用 CSS,并将其转换为 PDF。 PHP 扩展工作得很好。不幸的是,它不是免费的。

    【讨论】:

      【解决方案4】:

      您可以考虑的一种方法是使用将任何 HTML 转换为 PDF 的在线 API。您可以向他们发送包含用户提交数据的生成 HTML(更容易生成),并接收回一个高保真 PDF。

      市场上有很多可用的服务。我喜欢提到PDFShift,因为它提供了一个package in PHP,可以为您简化工作。

      安装后(使用 Composer 或直接下载,取决于您的选择),您可以像这样快速转换 HTML 文档:

      require_once('vendor/autoload.php');
      use \PDFShift\PDFShift;
      
      PDFShift::setApiKey('{your api key}');
      PDFShift::convertTo('https://link/to/your/html', null, 'invoice.pdf');
      

      就是这样。您可以实现很多功能(访问受保护的文档、添加水印等等)。

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 2012-05-05
        • 2012-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多