2

对于一家保险公司,我创建了他们各种保险申请的 PDF 表格。这些将在他们的网站上提供(完成后)。每个表格都是 PDF 格式,看起来与应用程序的打印版本完全一样。这个想法是用户在线填写,点击表单底部的(可见但不可打印的)“提交”按钮,整个完成的 PDF 被发送到公司。这样他们就可以打印出来,并继续使用他们当前的纸质文件系统。

我尝试使用“mailto:...” URL 作为提交按钮,但这需要外部邮件程序。它还为附加的 PDF 提供了一个随机临时文件名。

因此,我想将 PDF 发送到 php 脚本,更改名称,然后从那里通过电子邮件发送给公司。我玩了一下,我可以到达目标脚本,但我不知道 PDF 会发生什么。我希望它会出现在 $_FILES 中,但什么也没有。

保存到数据库不是一种选择。

在准备 PDF 表单时,您可以选择提交方式:作为 HTML 表单(如 Sepodati 所说)、作为 XML 数据、作为 FDF(仅发送数据,并在显示数据时会打开原始 PDF),或作为完整的 PDF。为了方便不精通计算机的网站所有者使用,我将向他们发送一份他们可以打印的完整 PDF。

所以,同样的问题仍然存在:当我到达目标脚本时,我的 PDF 文件去了哪里?

我通过 PDF 本身的提交按钮提交 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

此页面包含我的脚本的所有输出。

4

2 回答 2

1

它应该发送整个 PDF 非常有趣。我很想知道它是如何做到的,因为我已经在 Adob​​e 网站上搜索了有关如何通过单击 PDF 表单上的按钮来提交整个 PDF 文件的信息。

我在他们的网站上找到的唯一信息是有关 FDF 和 XFDF 格式的信息。这两种格式都必须通过表单处理程序脚本以某种方式进行解析,并且不会像您从文件系统中选择文件时那样包含在 $_FILES 中。

$fptr = fopen("temp.fdf", "w"); 
fputs($fptr, $HTTP_RAW_POST_DATA); 
fclose($fptr); 
于 2012-07-10T19:12:29.577 回答
1

这是一个非常古老的帖子,所以我相信你现在已经得到了答案,但是这对我有用,以防其他人在未来偶然发现这个问题。顺便说一句-这仅适用于您提交完整的表单字段的整个 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);
  }
?>
于 2015-12-03T21:35:56.483 回答