当前位置: 首页 > 知识库问答 >
问题:

使用PDFBox正确地将PDF渲染为图像

羊舌诚
2023-03-14

因此,在这个应用程序中,我们使用iText来填写PDF表单,并使用PDFBox将填写好的PDF加载到我们的系统中,并将其转换为图像。

问题是图像转换的时候。所有的信息都在那里,但是复选框...奇怪吗?复选框里面有一个奇怪的“空框”,而不是在PDF上设置的样式复选框“复选标记”。

它应该是怎样的:

PDFBox版本2.0.11 iText版本为5.5.13

下面是进行转换的代码片段:

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,转换质量很低,并且丢失了一些字体格式和样式。自从升级后,它变得更好了,但仍然存在bug。

填充位置:

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();

...

你们知道这是什么吗?

谢啦!

共有1个答案

游鸣
2023-03-14

多亏了Tilman Hausherr的建议,它才正常工作。问题确实是运行应用程序的服务器中缺少字体。(Zapf Dingbats和/或MS Gothic)。

在目录“/fonts”或“/usr/share/fonts”(Linux)/“/Windows/fonts”(Windows)中安装丢失的字体成功了!

 类似资料:
  • 使用以下代码,我得到了这样的坏输出: %PDF-1.4%���� 4.0目标 而不是pdf。代码如下: 如何在浏览器中获取实际的pdf输出。

  • 当使用PDFBox将PDF(可填充)转换为Jpeg时。复选框中的勾号将转换为方框字符 警告[org.apache.pdfbox.rendering.type1glyph2d]代码52(a20)没有字形,字体为ZapfDingbats public static void main(String[]args)引发异常{ 我如何设置字体到PDF图像代码?

  • 问题内容: 我正在使用飞碟将XHTML转换为PDF文档。我已经获得了仅可用于基本HTML和嵌入式CSS的代码,但是,现在,我试图将图像添加为PDF的标题。我想知道的是,是否有任何办法通过将图像文件读取为Java Image对象来添加图像,然后以某种方式将其添加到PDF(或XHTML中,就像它获得了虚拟的“ URL”一样)表示可用于呈现PDF的Image对象。有没有人做过这样的事情? 预先感谢您提供

  • 我正在使用飞碟将XHTML转换为PDF文档。我已经让代码只使用基本的HTML和内嵌CSS,然而,现在我正试图将一个图像作为某种头添加到PDF中。我想知道的是,是否有任何方法可以添加图像,通过读取图像文件作为Java图像对象,然后以某种方式将其添加到PDF(或XHTML——就像它得到一个虚拟的“url”,表示可以用于呈现PDF的图像对象)。有人做过这样的事吗? 提前感谢您提供的任何帮助!

  • 我正在学习使用react和mapbox,但是我很难理解为什么我的mapbox贴图在通过react加载时不能正确渲染。当我正常加载它(没有React.js)时,没有问题,因为以下代码正常工作,并且映射正常显示: 但是当我按照下面的方法操作时,地图通常根本不会出现,或者当它出现时,我只在div的左上角看到它的一部分。 进行缩放或打开chrome开发者工具等操作似乎有时会使地图出现。我不知道发生了什么事

  • 我在GeoServer中正确显示国家边界时遇到问题,您可以从下面的链接(意大利地图)中看到。 http://trideg.server.de/tridec/wms?service=WMS 问题出现在边缘非常锋利的国家边界上(我假设),例如阿尔巴尼亚的形状正确地显示: http://trideg.server.de/tridec/wms?service=WMS 我从naturalearthdata.