使用PHP将HTML表单数据转换为PDF文件

10

我已经花了几天的时间进行了查找和测试,想知道是否有人能够指点我一个不同的方向。我有一个非常长的工作申请HTML表单(jobapp.html),和一个匹配的PDF(jobpdf.pdf),两者都有相同的字段名称。我需要将用户输入的数据转换为PDF格式。目前我的思路是:

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

使用pdftk,我会获取到$_POST为用户收集的数据并生成.fdf文件(user.fdf),然后将.fdf文件与.pdf文件(job.pdf)合并。这样无论文档中的字段位于何处,fdf文件中的信息都可以通过字段名称填充pdf吗?

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

我还看过"Submit HTML form to PDF"


当你说“捕获”时,你是指获取客户端屏幕截图并将其转换为PDF吗?我想创建一个模板PDF并将表单数据合并到其中会更容易得多。这肯定是创建此类报告的更标准方法。 - David
这实际上是一个工作申请表,用户填写完表格并提交后,我希望能够将申请表转换成PDF格式并保存。 - Djacksway
我会将PDF视为“视图”,就像页面一样。两者都有绑定到数据的字段,并且彼此不知道或以任何方式相互依赖。HTML“视图”具有为浏览器呈现和交互而布置的字段,而PDF“视图”则具有为可打印性而布置的字段,作为数据报告的一种形式。 - David
@David 謝謝你的建議。那麼,在使用者輸入資訊並提交後,我是否需要從 HTML 表單生成一個 fdf,然後將 fdf 與 pdf 合併?我假設 pdf 需要有與 HTML 表單相同的欄位名稱。最好的方式是使用 pdftk 合併這些內容嗎? - Djacksway
我不知道FDF是什么,也不了解pdftk的任何信息,因此无法就具体实现提供建议。但作为一般指导原则,创建两个明显分离的视图比将第二个视图与第一个视图紧密绑定(甚至尝试从第一个视图的客户端视图生成第二个视图)更容易维护。 - David
我在下面的答案中添加了一个示例。这非常容易! - Igor Parra
4个回答

8

我曾多次使用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();

你可以通过网站本身的教程快速学习。


编辑:保存表单数据的示例(是的,非常容易...)

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创建的页面,真的很棒!

在此输入图片描述

在此输入图片描述


1
@djacksway 只需使用 POST 数据将其写入 fpdf。像 $pdf->Cell(40,10,$_POST['username']); 等等... 这非常容易。 - Igor Parra
这对于大约100个字段来说不会很繁琐吗?然后需要将与该字段相关的信息写出来。 - Djacksway
@djacksway,你看到我编辑过的例子了吗?foreach ($_POST as $key =>$data)。你必须小心地添加每个$pdf->Write(5, "$key: $data");的页面数量。我认为这已经足够开始解决方案了... - Igor Parra

2

1

我发现PrinceXML非常容易使用。它可以将您的HTML/XML应用CSS并将其转换为PDF。PHP扩展非常好用。不幸的是,它不是免费的。


1

您可以考虑使用在线API将任何HTML转换为PDF的一种方法。您可以发送生成的HTML(更易于生成),其中包含用户提交的数据,并收到高保真度的PDF。

市场上有很多可用的服务。我想提到PDFShift,因为它提供了一个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');

就是这样了。你可以实现很多功能(访问安全文档、添加水印等)。

希望对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接