PDF に番号を動的に追加するか、その番号に基づいて送信ボタンの URL を変更します。

StackOverflow https://stackoverflow.com/questions/2765486

  •  03-10-2019
  •  | 
  •  

質問

SQL データベースから PDF を提供し、ブラウザーに表示しています。ユーザーが XML フォーム データを送信するときに、その PDF SQL レコードの RecordID を利用できるように、PDF に動的に数値を埋め込む方法を見つけようとしています。ユーザーがフォームの送信ボタンを押すと、フォームはその XML データを送信ページに送信します。送信 URL をその場で変更する何らかの方法がある場合は、クエリ文字列を実行して自分自身に RecordID を渡すことができます。コードで PDF を生成しているのではなく、手動で作成してサイトにアップロードしています。

編集

ユーザーにリンクが与えられます someServer.com/pdfLink.aspx?formID=5 そこにアクセスすると、そのページが DB から PDF を取得して表示します。これにより、Acrobat がブラウザーのフルサイズで表示されるため、私の aspx ページは完成したフォームの送信を制御できなくなります。Acrobat は制御します。ユーザーはフォームに記入し、フォーム内の送信ボタンを押します。この送信ボタンは、フォームの設計時に別のページを指すように設定されました。 someSite.com/pdfSubmit.aspx 送信ボタンをクリックすると、XML データがそのページに送信され、処理できるようになります。クエリ文字列にレコードIDが必要です。 someSite.com/pdfSubmit.aspx ページ。これを行うには、PDF を変更して、recordID とクエリ文字列を送信ボタンの送信 URL に追加するか、PDF に埋め込む必要があります。大きな問題は、PDF を表示する直前にどのように変更するかです。 someServer.com/pdfLink.aspx?formID=5 これら 2 つのオプションのいずれかを実行します。

役に立ちましたか?

解決 3

@plinth の提案を試しているときに、XML 送信から変更する必要があることに気付きました (彼のデータは直接 PDF 上にあったためです)。そこで、XMLデータ+PDFを埋め込んだXDPとして送信するフォームに変更しました。これを実行し、フォームが送信した生の XDP を表示したときに、これに遭遇しました。

  <?xml version="1.0" encoding="UTF-8" ?> 
  <?xfa generator="XFA2_4" APIVersion="3.0.8262.0"?> 
  <xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2010-05-04T15:15:00Z" uuid="6d0944c8-1573-442c-9c85-11e372bd38c3">
    <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
      <xfa:data>
         <form1>
           <TextField1>TestMe</TextField1> 
         </form1>
       </xfa:data>
    </xfa:datasets>
    <pdf href="ViewPDF.aspx?formID=10" xmlns="http://ns.adobe.com/xdp/pdf/" /> 
 </xdp:xdp>

最後から 2 行目に注目してください。必要な formID 値を持つ PDF の URL が自動的に含まれます。したがって、フォームから純粋な XML ポストではなく XDP を取得するだけで、必要なものがすべて得られました。

他のヒント

PDFに数字を埋め込むことはコーシャではありませんが、仕様を称えることができることがいくつかあります。

現在のPDF仕様には、「ファイルの最後の行にはファイル終了マーカーのみが含まれている」と述べています。

%%EOF

しかし、いくつかの小刻みの部屋があります - 実装の詳細には、技術的にはファイルの最後の行である必要はありませんが、最後の1Kにしか表示されない必要があります。多くのこと、ほとんどの準拠した読者はまばたきさえしません。これをしなければならなかった場合、新しいライン(1つがない場合)を追加する傾向があります。だから:

// assume we already know it ends with %%EOF
void AppendNumberToPdf(Stream stm, int number, bool addNewline)
{
    stm.Seek(0, SeekOrigin.End); // go to EOF
    StreamWriter writer = new StreamWriter(stm, new ASCIIEncoding(), 1024);
    writer.WriteLine(string.Format("{0}% {1} {2}", (addNewLine ? "\n" : ""), kMyMarkerString, number));
    writer.Flush();
}

kmymarkerstringは、「myApplicationDocumentidentifier:」のようなものである必要があります。または、トラックを簡単に識別できるようなものです。

クエリストリングは読み取り専用であるため、実行時に動的に変更することはできません。しかし、あなたはできます:

  1. 送信ページが最初にレンダリングされた時点で、フォームにRecordIDを追加する

  2. 送信フォームを処理してから、recordidパラメーターをクエリストリングに追加して、respons.redirect.redirect.server.server.transferを実行できますか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top