3

iText を使用して PDF フォームに入力していますが、コンソールにエラーはありませんが、出力 PDF を開くと、「辞書オブジェクトが必要です」というメッセージが表示され、その後、「このドキュメントは Adob​​e Reader の拡張機能を有効にしました。ドキュメントは作成後に変更されたため、拡張機能は使用できなくなりました。」

また、出力 pdf には変更が加えられていますが、上記のメッセージが示すように、元の pdf ドキュメントの機能はありません。

以下のコードを使用しました...

PdfReader reader = new PdfReader("C:\\Users\\asfs\\Downloads\\1013-Form22.pdf");
String name = "C:\\Users\\asfs\\Downloads\\Temp.pdf";

PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(name));
AcroFields form = stamp.getAcroFields();

String last = "Form22_Dtls[0].Page1[0].Country_C[0]";

form.setField(last, "Sample Country name");

HashMap map = new HashMap();
map = form.getFields();
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext())
    System.out.println("Field is >>>"+iterator.next());
// close pdf stamper
stamp.setFormFlattening(true);
stamp.close();

私を助けてください。

ありがとう

4

3 に答える 3

4

試す:

// open the pdf stamper in edit mode
stamp = new PdfStamper(reader, new FileOutputStream(name), '\0', true);

PdfStamperは追加モードである必要があります。

于 2011-10-19T08:42:26.600 に答える
0

Java コードが必要な場合は、あるブログから入手したスニペットを次に示します。しかし、これが役立つか、私に知らせてくれる場合に備えて、pdf Nitroを使用しています

private ByteArrayOutputStream editPdfDocument() throws Exception {
PdfReader reader = null;
PdfStamper stamper = null;
ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
HashMap fieldsWithValues = new HashMap();
int user_id = 1234; // unique key for the object
String dirPath = “D:/abc”;// directory path
String fileName = “def.pdf”;// name of the file
try {
reader = new PdfReader(dirPath + “/” + fileName);
stamper = new PdfStamper(reader, baosPDF);
AcroFields form = stamper.getAcroFields();
HashMap fields = form.getFields();
Set keys = fields.keySet();   // keys represents the names of all the form fields
fieldsWithValues = fetchFieldValuesForObject(user_id, keys);
// fetchFieldValuesForObject(user_id, keys) method will fetch the values of the fields from Database for object identified by user_id
Iterator itr = keys.iterator();
while (itr.hasNext()) {
String fieldName = (String) itr.next();
String fieldValue = fieldsWithValues.get(fieldName) != null ? (String)(fieldsWithValues.get(fieldName)) : “”;
form.setField(fieldName, fieldValue);
}
stamper.setFormFlattening(true);
} catch (Exception dex) {
if (stamper != null)
stamper.close();
if (reader != null)
reader.close();
throw dex;
}
return baosPDF;
}`enter code here`

データベースからデータを直接取得する Java を使用した Pdf フォーム入力です。うまくいくことを願っています 自動フォーム入力の Java コードにアクセスしてください

于 2013-10-07T09:06:51.483 に答える
0

私の知る限り、stamp.setFormFlattening(true); 呼び出している場合は、フィールドを削除してコンテンツに置き換えます。そのため、新しいドキュメントはフィールドを保持しません

于 2014-09-02T15:27:31.450 に答える