10

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

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

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

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

我还查看了“将 HTML 表单提交到 PDF

4

4 回答 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 创建的页面,真的!

在此处输入图像描述

在此处输入图像描述

于 2012-08-17T17:17:50.367 回答
2

http://www.fpdf.org/

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

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

于 2012-08-17T17:10:49.663 回答
1

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

于 2012-08-17T17:22:05.843 回答
1

您可以考虑的一种方法是使用将任何 HTML 转换为 PDF 的在线 API。您可以向他们发送一个生成的 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');

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

希望有帮助!

于 2018-06-01T12:33:47.367 回答