【发布时间】:2018-12-25 19:43:45
【问题描述】:
因此,在这个应用程序中,我们使用 iText 来填写 PDF 表单,并使用 PDFBox 来加载填写的 PDF 并将其转换为图像到我们的系统中。
问题在于图像何时转换。所有信息都在那里,但复选框......很奇怪?与在 PDF 上设置的样式复选框“复选标记”不同,复选框内部有一个奇怪的“空框”。
它应该是怎样的:
PDFBox 2.0.11 版 iText 版本是 5.5.13
这是发生转换的代码的小sn-p:
PDDocument pdf = PDDocument.load(byteArrayInputStream);
PDFRenderer renderer = new PDFRenderer(pdf);
BufferedImage[] images = new BufferedImage[pdf.getNumberOfPages()];
PDPage page = null;
BufferedImage image = null;
for (int i = 0; i < images.length; i++) {
try {
image = renderer.renderImageWithDPI(i, 300,org.apache.pdfbox.rendering.ImageType.RGB);
...
转换后我也感觉到“质量下降”。之前,我们使用的是 PDFBox 1.8,转换质量很低,并且丢失了一些字体格式和样式。升级后它变得更好了,但仍然存在错误。
填充发生的地方:
PdfReader reader = new PdfReader(filePath);
ByteArrayOutputStream lStr = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, lStr);
AcroFields acroFields = stamper.getAcroFields();
for (Entry<String, Item> map : acroFields.getFields().entrySet()) {
String key = map.getKey();
if (!fields.has(key))
continue;
if (fields.isNull(key))
continue;
acroFields.setField(key, fields.getString(key), true);
}
stamper.setFormFlattening(true);
stamper.close();
reader.close();
...
你们知道这是什么吗?
谢谢!
【问题讨论】:
-
确保安装了 zapf dingbats 或 Microsoft Gothic 字体。另请参阅日志消息。如果仍然无法使用,请分享 PDF。
-
在“应该如何:”图像中,“Alarme”和“Bancos de Cuoro”的不同背景颜色是不同的设计还是仅仅因为其中一个具有焦点?
-
对于 PDFBox,只需按照操作系统要求的方式复制丢失的字体(如果丢失)。在 Windows 中,将 zapf dingbats .pfb 文件复制到 \windows\fonts 目录(或 msgothic.tt* 文件)中。无需更改您的 PDF 文件。
-
我们代码的片段:protected String[] getSearchableDirectories() { return new String[] { System.getProperty("user.home") + "/.fonts", // user "/usr /local/fonts", // 本地 "/usr/local/share/fonts", // 本地共享 "/usr/share/fonts", // 系统 "/usr/X11R6/lib/X11/fonts" // X }; }
-
所以最容易测试的就是在你的用户目录下创建一个 .fonts 目录并将字体复制到那里。