您将无法通过打印的方式捕获用户在表单中输入的信息。
要生成它的 PDF,您需要将数据保存到服务器,然后让 wkhtmltopdf 请求一个页面,该页面的表单中填写了表单中的详细信息。
这是因为用于服务 HTML 页面的 HTTP 的无状态特性。
当用户请求 form_1.html 时,他们会收到 HTML 页面,他们会填写表单详细信息,但所有这些信息都存储在本地计算机上。
如果其他人请求 form_1.html,他们会收到 HTML 页面的另一个副本,但没有任何详细信息,因为 Web 服务器还不知道第一个用户输入的详细信息。
当用户向服务器提交表单时,服务器只查找第一个用户表单的内容。然后服务器应用程序可以决定如何处理它。
如果您认为 wkhtmltopdf 与其他使用网络浏览器的用户一样工作,您就会明白为什么他们只收到表单。
如果你想走 wkhtmlpdf 路线,那么你需要
- 在服务器本地保存提交的数据
- 设置第二个 HTML 页面,该页面可以被请求并能够加载该特定日期
- 设置 wkhtmltopdf 以请求该网页
- 将生成的文件发送给用户
如果您想向用户发送他们输入表单的 PDF 版本而不保存它,更好的方法可能是使用 PHP 处理提交的表单数据并使用服务器端 PDF 生成工具,例如 @987654321 @ 或 http://www.fpdf.org/ ,创建 PDF 并将其发送给用户。它看起来不像他们的形式,但它会为他们生成一个 PDF。
编辑:有关通过 wkhtmltopdf 执行此操作的方法的更多详细信息(请注意,这不是很安全)
给定这个 html 表单 (form_1.html)
<html>
<body>
<form method="post" action="respond.php">
<input type="text" name="fieldname">
<input type="submit">
</form>
在您响应表单帖子的 php 中,我们将其称为“respond.php”
<?php
$form_values = $_POST;
// you should really validate $form_values
$contents = serialize($form_values);
$filename = sha1($contents);
file_put_contents($filename,$contents);
$result = shell_exec('"C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe" http://localhost/get.php?filename='+$filename+' vish.pdf 2>> err3.txt 1>> out3.txt');
echo $result;
$file = "vish.pdf";
$pdf = file_get_contents("vish.pdf");
header('Content-Type: application/pdf');
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Length: '.strlen($pdf));
header('Content-Disposition: inline; filename="'.basename($file).'";');
ob_clean();
flush();
echo $pdf;
exit()
在 get.php 中(需要通过网络服务器访问)
<?php
$filename = $_GET['filename']
// you should really validate $filename
$contents = file_get_contents($filename);
$form_values = unserialize($contents);
?>
<html>
<body>
<form>
<input type="text" name="fieldname" value="<?php print $form_values['fieldname'] ;?>">
</form>
</body>
</html>
关键是您需要让 wkhtmltopdf 接收一个 HTML 页面,该页面具有由服务器填写的表单字段。因此,当 wkhtmltopdf 请求 http://localhost/get.php?filename='+$filename+'它时,它会从您的本地主机接收 HTML 页面,其中填写了所有表单详细信息。
请注意,这是一个概念性解决方案,用于说明您如何使用它。我不会在生产中推荐这个,因为它依赖于默默无闻的安全性