iText(iTextSharp)を使用してXFAフォームフィールドをPDFに入力しますか?

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

  •  22-07-2019
  •  | 
  •  

質問

(Adobe LiveCycle Designerで作成された)XFAフォームフィールドをPDFに入力する必要があります。 iText(実際にはC#のiTextSharp)を使用してPDFを解析し、XFAフィールドに入力してから、変更したPDFを保存しようとしています。

iTextで見つけることができるすべての例(ごく少数のiTextSharpの例)では、AcroFormフィールドの変更について説明しています。このPDFにはAcroFormフィールドがなく、XFAのみを使用します。

非標準のリソースへのポインターが役立ちます(このトピックについては必要なグーグルを既に実行しており、有用なものは見つかりませんでした)。

ここでのコード例は、私がやろうとしていることを実際にやった人なら誰でも素晴らしいでしょう。

役に立ちましたか?

解決

PDFにデータパケットを取得できる場合、AcrobatのXFAランタイムはそれらのフィールドにデータパケットのデータを入力します。

これらの1つがどのように見えるかを確認するには、LiveCycle Designerでフォームを作成し(Acrobat Proに付属)、そこにいくつかのフィールドを追加し、ダイナミックPDFとして保存します。 Acrobatでフォームを開き、フィールドに値を入力して保存します。

PDFデータを参照できるツールでPDFを開くと、/ Catalog / AcroForm / XFAに<!> lt; xfa:datasets <!> gt;があるストリームが見つかります。入力した値を持つパケット。自分で作成してPDFに挿入する必要があります。

XDP仕様には、データパケットとマージアルゴリズムの説明が含まれています。ここで見つけることができます:

http://partners.adobe.com/public/developer/xml/ index_arch.html

代わりに、AdobeからLiveCycleサーバーを購入します。これにより、Webサービスの呼び出しなど、さまざまな方法でこれらすべてをプログラムで実行できます。

他のヒント

iTextSharpはXFAで動作します。すべての疑問を取り除くには、iText Webサイトのサンプルをご覧ください。

http://itextpdf.com/examples/iia.php?id=165

using (FileStream existingPdf = new FileStream("existing.pdf", FileMode.Open))
using (FileStream sourceXml = new FileStream("source.xml", FileMode.Open))
using (FileStream newPdf = new FileStream("new.pdf", FileMode.Create))
{
    // Open existing PDF  
    PdfReader pdfReader = new PdfReader(existingPdf);

    // PdfStamper, which will create  
    PdfStamper stamper = new PdfStamper(pdfReader, newPdf);
    stamper.AcroFields.Xfa.FillXfaForm(sourceXml);

    stamper.Close();
    pdfReader.Close();
}

同じ問題があり、解決策を見つけたと思います。 Powershellを使用してpdfオブジェクトを検査しています。

iTextSharp DLLをロードします。

Add-Type -Path "C:\Users\micah\Desktop\itextsharp.dll"

PDFを変数に読み込みます:

$PDF = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:\Users\micah\Desktop\test.pdf"

このオブジェクトを検査します:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Get-Member

表示する必要があるのは、PDF上のすべてのフィールドがプロパティとしてこのオブジェクトにあるということです。 次のように、すべてのフィールドのクイックビューを取得できます。

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Select-Object -Property "*"

これは魔法のチケットでなければなりません。この場所は、元のフォームのフィールドと、フォームのXFA部分の両方です。

それは本の中でitextがこれをしないからだと言っています。 PDFを変換できますか?

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