3

Java を使用して入力する必要がある XFA ベースの PDF フォームがあります。最善のアプローチを提案できますか。iText を使用して、pdf の xfa xml を生成できました。

public void readXfa(String srcPdfFilename, String destXMLFilename) throws IOException, ParserConfigurationException, SAXException, TransformerFactoryConfigurationError, TransformerException {

    PdfReader reader = new PdfReader(srcPdfFilename);
    XfaForm xfa = new XfaForm(reader);
    Document doc = xfa.getDomDocument();

    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");

    FileOutputStream os = new FileOutputStream(destXMLFilename);
    tf.transform(new DOMSource(doc), new StreamResult(os));

    reader.close();
}

上記のコードから生成された Pdf と Xfa XML があります。アイデアがないように見えるので、さらに進める方法を教えてください。XFA ドキュメントを確認しようとしましたが、正しくないようです。私はxmlを持っていません.pdfには多くのフィールドがあり、動的なXFA pdfフォームであるため、非常に複雑です。

あなたの助けと提案は心から感謝されます。

4

1 に答える 1

3

例を見てくださいFillXFA。この例には、動的テーブルを含むフォーム ( purchase_order.pdf ) があります。

ここに画像の説明を入力

ここで、XML ファイル形式のデータのセットであるdata.xmlを追加すると、次の結果が得られます: purchase_order_filled.pdf

ここに画像の説明を入力

ご覧のとおり、XML ファイルに存在するデータと、多数の空の行 (XML の空のデータ行に対応) が追加されています。多くの行を追加すると、新しいページが PDF に追加されるようになりました。

これはそれがどのように行われるかです:

public void manipulatePdf(String src, String dest)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader,
            new FileOutputStream(dest));
    AcroFields form = stamper.getAcroFields();
    XfaForm xfa = form.getXfa();
    xfa.fillXfaForm(new FileInputStream(XML));
    stamper.close();
    reader.close();
}

ここに別の例があります: XfaMovies. xfa_movies.pdfドキュメントは、ボタンのない単一ページの PDF です120本の映画のデータmovies.xmlを注入します。その結果、23 ページの PDF xfa_filled_in.pdfが作成されます。

注:コードを読むと、完全な XFA ストリームを含む XML が得られます。それは必要ありません。必要なのはデータだけです。そのため、XML ファイルへのリンクを追加しました。XFA 固有のタグは含まれていません。

于 2014-07-01T11:12:55.073 に答える