2016-11-01 8 views
1

このコードを読み取り元がないPdfDocumentで実行すると、正しく動作します。プレデダイドpdfから読み込むと、フォーム/ウィジェットの作成は中止されますが、期待通りの段落が追加されます。エラーはありません。誰がなぜこれが起こっているのか理解していますか?ここでIText7は、新しい文書にのみフォーム/ウィジェットを作成します

は、私が実行しているコードです:

public class HelloWorld { 

    public static final String DEST = "sampleOutput.pdf"; 
    public static final String SRC = "sample.pdf"; 
    public static void main(String args[]) throws IOException { 
     File file = new File(DEST); 

     new HelloWorld().createPdf(SRC, DEST); 
    } 

    public void createPdf(String src, String dest) throws IOException { 
     //Initialize PDF reader and writer 
     PdfReader reader = new PdfReader(src); 
     PdfWriter writer = new PdfWriter(dest); 

     //Initialize PDF document 
     PdfDocument pdf = new PdfDocument(writer); //if i do (reader, writer) the widget isn't added to the first page anymore. 

     // Initialize document 
     Document document = new Document(pdf); 

     HelloWorld.addAcroForm(pdf, document); 

     //Close document 
     document.close(); 
    } 

    public static PdfAcroForm addAcroForm(PdfDocument pdf, Document doc) throws IOException { 
     Paragraph title = new Paragraph("Test Form") 
       .setTextAlignment(TextAlignment.CENTER) 
       .setFontSize(16); 
     doc.add(title); 
     doc.add(new Paragraph("Full name:").setFontSize(12)); 

     //Add acroform 
     PdfAcroForm form = PdfAcroForm.getAcroForm(doc.getPdfDocument(), true); 
     //Create text field 
     PdfTextFormField nameField = PdfFormField.createText(doc.getPdfDocument(), 
       new Rectangle(99, 753, 425, 15), "name", ""); 

     form.addField(nameField); 
     return form; 

    } 
} 
+0

まずは、サンプルコードをご提供いただきありがとうございます。人々が私たちにテストのためにコンパイルできるサンプルを与えるとき、質問に答えるほうがずっと簡単です。あなたの例を試してみましたが、問題を再現できませんでした。コードを試してみると、フィールドが正しく追加されています。私は、iText 7.0.1とページサイズA4のソースファイルを使用しています。あなたのソースファイルを見てください。多分、ページサイズは異なって定義されます。座標系の原点( '(0、0)')が左下隅にない場合は、あなたが記述した問題が発生する可能性があります。 –

+0

@BrunoLowagie応答いただきありがとうございます。ここにサンプルファイルがありますが、これを捨てるものは何ですか? http://www.filedropper.com/sample_15 – Elliot

+0

@BrunoLowagie起源の素晴らしいアイデア。私はx座標とy座標を使って遊んだので、私はウィジェットを範囲外に置いていたと思う。とても有難い!より多くのツールを使用することを楽しみにしています。 – Elliot

答えて

1

私はこのようなコードを適応:あなたは二つの変更に気付くでしょう

public static PdfAcroForm addAcroForm(PdfDocument pdf, Document doc) throws IOException { 
    Paragraph title = new Paragraph("Test Form") 
      .setTextAlignment(TextAlignment.CENTER) 
      .setFontSize(16); 
    doc.add(title); 
    doc.add(new Paragraph("Full name:").setFontSize(12)); 

    PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true); 
    PdfTextFormField nameField = PdfFormField.createText(pdf, 
      new Rectangle(99, 525, 425, 15), "name", ""); 
    form.addField(nameField, pdf.getPage(1)); 
    return form; 
} 

  1. を私が変更しますフィールドのYオフセット(753の代わりに525)。これで、フィールドがページの表示領域内に追加されました。あなたのコードでは、フィールドが追加されましたが、表示されませんでした。
  2. addField()メソッドの第2パラメータとしてpdf.getPage(1)を追加することで、フィールドを追加する必要のあるページを定義しました。
+0

これは解決策です、 ありがとうございました。私は提出する他の1つの問題があり、あなたの知識に感謝するでしょう。同じフォーム値を参照する2つのウィジェットを使用することはできません。フォームの値を別々に変更すると、両方のウィジェットしか表示されません。 – Elliot

関連する問題