0

免責事項:私はiTextでこれをやろうとしています。私はこれを機能させるために、読んだり、調べたり、質問したり、質問したり、実験したり、思いつく限りのことをしたりしました。私は激怒しています。私が試したことがなく、他の誰かにこれをやってもらうためにここに来ただけだとは思わないでください。そうではありません。私は学びたい、私はこれを理解したい。私はこれを経験した人からの良い方向性を探しています。

編集可能なテキスト フィールドを含む PDF があります。私がやりたいことは、その PDF からプログラムで読み取り、既に存在するテキスト フィールドからテキストを取り込み、アプリの別の場所からテキストを取得し、以前の情報と新しいテキスト情報を元の PDF に書き戻すことです。

私が試したこと:
- PdfReader で PDF を読む
- PdfStamper(PdfReader, FileOutputStream) を使用して PDF に書き込む
- Reader.getAcroFields() を使用してテキスト フィールドを取得します。

私は何日もウェブを探し回っていますが、これを解決することはできません. 私がこれを行うとき:

String in = "C:/Users/me/Desktop/file.pdf";
String out = "C:/Users/me/Desktop/file.pdf";
PdfReader reader = new PdfReader(in);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(out));
AcroFields form = stamper.getAcroFields();
form.setField("dateDisc1", "5/21");

最終的に破損した PDF (file.pdf) が作成されます。

これを行う簡単な方法がある場合は、これに光を当ててください。

ありがとうございました!

4

2 に答える 2

0

自分でそれを考え出しました。将来、同様のことをしようとしている他の人のために、ウォークスルーを作成しました。

これを行う簡単な方法を見つけようとして、何日もウェブを探し回っています。うまくいかなかったので、私はかかとを掘り下げ、可能であればそれを機能させると決心しました. これを行う方法を尋ねる人々のインターネット全体で数十の場所を見てきました。さて、これはよく文書化された例です。

//Define the location of the PDF and establish a new file to write to. We will change the target later//
    String dest = System.getProperty("user.home").concat("directory_and_name_of_PDF.pdf");
    String out = System.getProperty("user.home").concat("directory_and_name_that_will_be_changed.pdf");
    PdfReader pdfreader = new PdfReader(dest);                 
    PdfStamper stamper = new PdfStamper(pdfreader, new FileOutputStream(System.getProperty("user.home").concat("same_as_String out")));       
    AcroFields form = stamper.getAcroFields();  

//Append text to the text fields//
    form.setField("text field name", "text to add");
    form.setField("text field name2", "repeat");
    form.setField("text field name3", "repeat");
    form.setField("text field name4", "repeat");
    stamper.close();
    pdfreader.close();

//Change the file name of fileOutputStream to the original that was read from//
    File destfile = new File(dest);
    File outfile = new File(out);
    destfile.delete();        
    outfile.renameTo(new File(System.getProperty("user.home").concat("name_of_the_original_PDF.pdf"))); 

そして、それがあります。これにより元のファイルが削除され、fileOutputStream の名前が元のファイル名に変更されることに注意してください。読み込んでいない元の情報があれば、それは失われます。コピーしたいすべての情報を必ず収集してください。ifまた、読み込まれたテキスト フィールド内のテキストが上書きされないように、条件ステートメント ( ) を設定したことにも注意してください。そうしないと、以前のテキストが新しい PDF に引き継がれない危険があります。

ご不明な点がございましたら、お気軽にお問い合わせください。私は決してプロの開発者ではありませんが、私が知っていることについてアドバイスを提供できます。質問する前に調査することを忘れないでください。幸運を!

于 2013-10-09T18:25:11.947 に答える