【发布时间】:2017-05-16 09:25:21
【问题描述】:
各位开发者您好,
打印使用 iText 7 使用 Java 应用程序自动生成的 PDF 时遇到问题。打印此类 PDF 时,打印输出包含所有图片和图形,但没有任何文本。
谁能告诉我可能是什么问题?我在 Adobe 中尝试了“打印为图像”选项并得出了相同的结果。
非常感谢。
编辑/添加代码和链接:
Link to PDF file created this way
document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(dest))));
this.form = PdfAcroForm.getAcroForm(document.getPdfDocument(), true);
PdfTextFormField fw1Field = PdfTextFormField.createText(document.getPdfDocument(),
new Rectangle(Variables.llx, Variables.lly, Variables.urx, Variables.ury), "Feld1");
fw1Field.setValue(fw1);
fw1Field.setReadOnly(Variables.readonly);
fw1Field.setBorderColor(Color.WHITE);
form.addField(fw1Field);
PdfTextFormField fsText = PdfTextFormField.createText(document.getPdfDocument(),
new Rectangle(Variables.llx + 150, Variables.lly, Variables.urx + 50, Variables.ury), "FSText");
fsText.setValue("Freigabeschein:");
fsText.setBackgroundColor(Variables.backgroundColourText);
fsText.setBorderColor(Color.WHITE);
fsText.setReadOnly(Variables.readonlyText);
fsText.setBorderColor(Color.WHITE);
form.addField(fsText);
PdfTextFormField idField = PdfTextFormField.createText(document.getPdfDocument(),
new Rectangle(Variables.llx + 250, Variables.lly, Variables.urx, Variables.ury), "Freigabeschein Nummer");
idField.setValue(id);
idField.setReadOnly(Variables.readonly);
idField.setBorderColor(Color.WHITE);
form.addField(idField);
PdfTextFormField datumText = PdfTextFormField.createText(document.getPdfDocument(),
new Rectangle(Variables.llx + 350, Variables.lly, Variables.urx, Variables.ury), "DatumText");
datumText.setValue("Datum:");
datumText.setBackgroundColor(Variables.backgroundColourText);
datumText.setBorderColor(Color.WHITE);
datumText.setReadOnly(Variables.readonlyText);
form.addField(datumText);
//more Text, created exactly as above
PdfButtonFormField buttonSpeichern = PdfFormField.createPushButton(document.getPdfDocument(), new Rectangle(450, 20, 100, 30), "speichern", "SPEICHERN");
buttonSpeichern.setBackgroundColor(Color.LIGHT_GRAY);
buttonSpeichern.setValue("Speichern");
buttonSpeichern.setVisibility(PdfFormField.VISIBLE_BUT_DOES_NOT_PRINT);
buttonSpeichern.setAdditionalAction(PdfName.D, PdfAction.createJavaScript("saveFSFunction(1);"));
form.addField(buttonSpeichern);
PdfButtonFormField buttonDrucken = PdfFormField.createPushButton(document.getPdfDocument(), new Rectangle(300, 20, 100, 30), "drucken", "DRUCKEN");
buttonDrucken.setBackgroundColor(Color.LIGHT_GRAY);
buttonDrucken.setValue("Drucken");
buttonDrucken.setVisibility(PdfFormField.VISIBLE_BUT_DOES_NOT_PRINT);
buttonDrucken.setAdditionalAction(PdfName.D, PdfAction.createJavaScript("printFunction(1, 0, 1, \"FS\");"));
form.addField(buttonDrucken);
document.close();
【问题讨论】:
-
请分享 A) 用于创建 PDF 的代码的关键部分 B) 重现该问题的示例 PDF。
-
感谢您的回复,我添加了代码 sn-p 链接到带有问题的示例 PDF。
-
您是否检查过您是否将 Acrobat 设置为打印表单域?要么,要么您的文本字段都将其可见性设置为可见,但不打印。虽然,我不认为这是使用 iText 创建文本字段时的默认设置,而且您似乎没有在此处共享的代码中进行设置...
-
@SamuelHuylebroeck,非常感谢。我必须设置所有字段
.setVisibility(0);没有可见的枚举,所以我认为这是标准行为 - 显然不是。 -
@Harry 下一版本中会有一个。我记得前段时间在 slackoverflow 上遇到过类似的问题,并为它添加了一个枚举。仅供参考,这里的数字 0 没有什么特别之处,其他可见性选项映射为 1、2 和 3,并且方法中的默认 switch 语句设置为可见和打印设置。