![](/img/trans.png)
[英]Submit PDF filled form to PHP script then email PDF as an attachment
[英]Submit entire PDF form to a PHP script
对于一家保险公司,我已经创建了各种保险申请的PDF表格。 这些将在其网站上提供(完成后)。 每种形式都是PDF,看起来与应用程序的印刷版完全一样。 这样的想法是,用户在线填写它,然后单击表单底部的(可见但不可打印)“提交”按钮,然后将完整的PDF发送给公司。 这样,他们可以将其打印出来,并继续使用当前的纸张归档系统。
我尝试对“提交”按钮使用“ mailto:...” URL,但这需要外部邮件程序。 它还为附加的PDF提供了一个临时的临时文件名。
因此,我想将PDF发送到php脚本,更改名称,然后从那里通过电子邮件发送给公司。 我玩了一下,可以到达目标脚本,但是我不知道PDF会发生什么。 我希望它显示在$ _FILES中,但什么也没有。
保存到数据库不是一种选择。
在准备PDF表单时,您可以选择提交方式:HTML表单(如Sepodati所说),XML数据,FDF(仅发送数据,并在显示数据时打开原始PDF),或作为完整的PDF。 为了使不精通计算机的网站所有者易于使用,我将向他们发送完整的PDF,供他们打印。
因此,仍然存在相同的问题:当我到达目标脚本时,我的PDF文件会放在哪里?
我正在通过PDF本身上的Submit按钮提交PDF。 您必须熟悉PDF表单才能理解这一点。 对于URL,我放置了目标PHP脚本。
在目标脚本中,我尝试了以下PHP代码:
reset ($_FILES);
while (list ($key, $val) = each ($_FILES)) {
echo "$key => $val<br />\n";
}
我为$ _FILES,$ _ GET,$ _ POST和$ _REQUEST执行了此操作。 什么都没出现,好像每个数组都是空的。 不过,我可能做错了。
我将phpinfo()放在脚本中,这些变量似乎与PDF相关...
_SERVER["CONTENT_LENGTH"] = 37722
_SERVER["CONTENT_TYPE"] = application/pdf
_SERVER["HTTP_USER_AGENT"] = Mozilla/4.0 (compatible; Adobe Acrobat Control Version 5.00 for ActiveX)
_SERVER["REQUEST_METHOD"] = POST
内容长度约为PDF的大小。
我之前没有注意到的其他一点是,提交后,Internet Explorer会显示此页面(或类似的名称):
C:\WINDOWS\TEMP\pa003773.html
此页面包含我脚本的所有输出。
它应该发送整个PDF,这很有趣。 我想知道它是如何实现的,因为我已经在Adobe网站上搜索了有关如何通过单击PDF表单上的按钮来提交整个PDF文件的信息。
我在他们的网站上唯一发现的是有关FDF和XFDF格式的信息。 这两种格式都必须通过表单处理程序脚本以某种方式进行解析,并且当您从文件系统中选择文件时,这两种格式都不会包含在$ _FILES中。
$fptr = fopen("temp.fdf", "w");
fputs($fptr, $HTTP_RAW_POST_DATA);
fclose($fptr);
这是一篇非常古老的文章,所以我相信您现在已经得到了答案,但是这对我很有用,以防将来其他人偶然发现此问题。 顺便说一句,这仅适用于您提交完整的PDF表单字段的情况。
您将在“提交”按钮上输入的地址应为http://youserver.com/lib/php/formProcess.php?email=to@company.com&formName=Asset%20Inventory
<?php
ob_start();
$file = file_get_contents("php://input"); //Gets binary PDF Data
$time = microtime(true);
//Names pdf file based on the time to the microsecond so nothing gets overwritten. Obviously you can change this to whatever you want or do something like $_REQUEST['formName'] and just include the form name in your URL from your pdf submit button
$newfile = "forms/" . $time . ".pdf";
$worked = file_put_contents($newfile, $file); //Creates File
ob_end_clean();
//Upon completion you can either return XFDF to update a field on your form or display a PDF document. I chose the PDF route because it worked for our situation.
$successFile = 'success.pdf';
$errFileFile = 'error.pdf';
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSendmail();
$mail->setFrom('From email address', 'from name');
$mail->addReplyTo('Reply to email', 'Reply to name');
$mail->addAddress($_REQUEST['email']); //get email from URL- alternately you can just hardcode in an address
$mail->addAttachment( $newfile );
$mail->isHTML(true);
$mail->Subject = 'New form submission';
$mail->Body = 'A new form has been submitted.';
if(!$mail->send()) {
header('Content-type: application/pdf');
readfile($errFile);
} else {
header('Content-type: application/pdf');
readfile($successFile);
//if you want to delete the file from the server after emailing: unlink($newfile);
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.