1

LC Designer で作成した入力可能な PDF フォームがあります。iTextを使用して自動的に入力したい:

    public void fillOut(String input, String output, boolean remove, boolean preserve) throws IOException, DocumentException{
    PdfReader reader = new PdfReader(input);
    if (remove) 
        reader.removeUsageRights();
    PdfStamper stamper;
    if(preserve){
        System.out.println("preserve");
        stamper = new PdfStamper(reader, new FileOutputStream(input), '\0', true);
    }else{
        System.out.println("don't preserve");
        stamper = new PdfStamper(reader, new FileOutputStream(output));
    }
    AcroFields form = stamper.getAcroFields();
    Map<String,Item> fields = form.getFields();
    System.out.println(fields.size());
    for (Entry<String, Item> ent: fields.entrySet()) {
        System.out.println("[" + ent.getKey() + "] [" + ent.getValue() + "]");
    }
    form.setField("Text", "test text");

    stamper.close();
}

しかし、このコードは NPE を生成します。

Exception in thread "main" java.lang.NullPointerException
    at com.itextpdf.text.pdf.XfaForm.findFieldName(XfaForm.java:294)
    at com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1387)
    at com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1316)
    at FillOutForm.fillOut(FillOutForm.java:40)
    at AcroTest.main(AcroTest.java:13)

同時に、同じメソッド fillOut(String input, String output, boolean remove, boolean preserve) を使用して、以前に iText で作成されたフォームに入力すると、すべて問題ありません。

これは、両方の pdf を含む 7z アーカイブです。LC デザイナーで作成された LCtest.pdf で、エラーが発生します。それで、何が悪いのですか?私のコードに何か問題がありますか、それともバグですか?

PS:私が使用している iText のバージョンは 5.1.3 で、5.3.5 も同じように動作します。

4

1 に答える 1

2

NPE はコードでは発生していません。使用しているライブラリで発生しています。com.itextpdf.text.pdf

このライブラリのプロバイダーに連絡してサポートを受けることをお勧めします。意図的にNullPointerExceptionAPI から をスローしている可能性はほとんどありません。

それが不可能な場合は、ソースのコピーを入手してデバッグし、動作するケースとクラッシュするケースの違いを調べることができます。

于 2012-12-19T08:35:56.440 に答える