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

PDFBox pdf转图像生成重叠文本

汪深
2023-03-14

对于一个附带项目,我开始使用PDFBox将pdf文件转换为图像。这是我用来转换为图像文件的pdf文件https://bitcoin.org/bitcoin.pdf.

这是我正在使用的代码。调用PDFToImage的代码非常简单。但是输出的jpg图像文件看起来非常糟糕,插入了很多逗号,并且有一些重叠的文本。

    String [] args_2 =  new String[7];
    String pdfPath = "C:\\bitcoin.pdf";
    args_2[0] = "-startPage";
    args_2[1] = "1";
    args_2[2] = "-endPage";
    args_2[3] = "1";
    args_2[4] = "-outputPrefix";
    args_2[5] = "my_image_2";
    //args_2[6] = "-resolution";
    //args_2[7] = "1000";
    args_2[6] = pdfPath;
    try {
        PDFToImage.main(args_2);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

共有1个答案

殳宸
2023-03-14

如果您查看日志记录输出(也许您需要在您的环境中激活日志记录)。您会看到许多类似的条目(使用PDFBox 1.8.5生成):

Jun 16, 2014 8:40:43 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont drawString
Warnung: Changing font on <t> from <Century Schoolbook Fett> to the default font
Jun 16, 2014 8:40:43 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont drawString
Warnung: Changing font on <S> from <Times New Roman> to the default font
Jun 16, 2014 8:40:46 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont drawString
Warnung: Changing font on <c> from <Arial> to the default font
Jun 16, 2014 8:40:52 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont drawString
Warnung: Changing font on <i> from <Courier New> to the default font

因此,PDFBox使用不同于PDF所指示的字体来呈现文本。这解释了插入的大量逗号和重叠文本:

  1. 不同的字体可能有不同的编码。看起来您的示例PDF使用了一种带有逗号的编码,其中PDFBox假定的默认字体具有空格字符

这一切的原因是PDFBox 1.8。x不支持所有类型的字体进行渲染。您可能想尝试PDFBox 2.0.0-SNAPSHOT,这是目前正在开发的新PDFBox。但请注意,渲染的类已经更改。

使用PDFBox 2.0.0-SNAPSHOT的当前状态(2014年6月中旬),可以如下方式渲染PDF:

PDDocument document = PDDocument.loadNonSeq(resource, null);
PDDocumentCatalog catalog = document.getDocumentCatalog();
@SuppressWarnings("unchecked")
List<PDPage> pages = catalog.getAllPages();

PDFRenderer renderer = new PDFRenderer(document);

for (int i = 0; i < pages.size(); i++)
{
    BufferedImage image = renderer.renderImage(i);
    ImageIO.write(image, "png", new File("bitcoin-convertToImage-" + i + ".png"));
}

其他PDFRenderer.renderImage重载允许您显式设置所需的分辨率。

PS:正如Tilman Hausherr所建议的,您可能希望将ImageIO. write调用替换为

    ImageIOUtil.writeImage(image, "bitcoin-convertToImage-" + i + ".png", 72);

ImageIOUtil是一个PDFBox助手类,它试图优化ImageIO写入程序的选择,并向图像html" target="_blank">文件添加DPI属性。

如果您使用不同的PDFRenderer.renderImage重载来设置分辨率,请记住相应地更改此处的最终参数72

 类似资料:
  • 在我的项目中,我必须使用画布在另一个相同大小和图案的图像上实现一个不同的颜色图像,并且图像不是圆形或矩形形状。所有这些都是波浪形状,它将应用于单个主背景图像,用于在每个函数上显示多个图形。 重叠图像应更改为另一种选定颜色。我的问题是,使用canvas有什么方法,我们可以改变canvas绘制的图像颜色,或者我们需要始终使用不同的图像,并应用CSS/jQuery。 我读过关于画布图像掩蔽和重叠的文章。

  • 问题内容: 有没有办法在PHP中给出的视频文件(,),以生成缩略图图像预览? 问题答案: 请看一下http://ffmpeg.org/以及此讨论http://board.phpbuilder.com/showthread.php?10327812-How- to-install-ffmpeg-php-to-create-thumbnails-from- 影片

  • 当一个人第一次创建一个新项目时,该对话框允许您指向某个外部的.png文件,然后当该对话框完成时,它生成4个不同像素大小的图像作为启动图标使用。 我的问题是:所以,如果一个人已经创建了一个现有的项目,有没有什么地方可以告诉工作室重新生成4个新的这样的文件,只需要将它重新指向其他地方,指向其他的.png? 我突然想到,我可以启动一个新项目,然后手动复制到目前为止开发的所有其他文件,如.java和.xm

  • 我使用飞碟R8生成PDF文件。PDF需要一个标题,该标题将在每一页上重复。标题将由用户指定,因此我无法确定其高度。我设法使页眉在每一页上重复,但问题是,如果页眉有多行文本,它不会动态地重新调整正文的高度,最终会与正文重叠。这是我的代码: 使用飞碟生成后,生成的PDF如下所示: 谁能帮我找到一个解决办法,使我的头球不与身体其他部位重叠?

  • 问题内容: 我想使用CSS将一个图像与另一个图像叠加。例如,第一张图片(如果您喜欢,可以是背景)将是产品的缩略图链接,该链接会打开一个灯箱/弹出窗口,显示该图片的较大版本。 在此链接的图像之上,我想要一个放大镜图像,以向人们展示可以单击该图像将其放大(显然,如果没有放大镜,这是不明显的)。 问题答案: 我只是在一个项目中做完了这件事。HTML端看起来像这样: 然后使用CSS: 我在CSS上留下了很

  • 这是一个游戏,当用户点击左侧div的最后一个节点时,每次都会添加5个图像。 如果他点击其他节点,应该显示游戏结束警报。 问题: > 在调用Generateface函数生成新面孔集之前,我将如何删除右侧和左侧div的所有节点。 点击左边额外的笑脸