このコードを読み取り元がない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;
}
}
まずは、サンプルコードをご提供いただきありがとうございます。人々が私たちにテストのためにコンパイルできるサンプルを与えるとき、質問に答えるほうがずっと簡単です。あなたの例を試してみましたが、問題を再現できませんでした。コードを試してみると、フィールドが正しく追加されています。私は、iText 7.0.1とページサイズA4のソースファイルを使用しています。あなたのソースファイルを見てください。多分、ページサイズは異なって定義されます。座標系の原点( '(0、0)')が左下隅にない場合は、あなたが記述した問題が発生する可能性があります。 –
@BrunoLowagie応答いただきありがとうございます。ここにサンプルファイルがありますが、これを捨てるものは何ですか? http://www.filedropper.com/sample_15 – Elliot
@BrunoLowagie起源の素晴らしいアイデア。私はx座標とy座標を使って遊んだので、私はウィジェットを範囲外に置いていたと思う。とても有難い!より多くのツールを使用することを楽しみにしています。 – Elliot