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全体を送信することになっているのは非常に興味深いことです。PDFフォームのボタンをクリックしてPDFファイル全体を送信する方法についての情報をAdobeサイトで検索したので、それがどのように行われるかを知りたいと思います。

彼らのサイトで私が見つけたのは、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 に答える