java 修改pdf图片_Java PDF文件逐页转换为图片

本文介绍了在Java中使用PDFBox将PDF文件转换为图片时,如何处理因缺失字体导致的乱码问题。在Linux环境下,如果PDF文件包含的字体在系统中未安装,转换后的图片会出现方框乱码。解决方案是检查PDF的字体,然后在Linux上安装缺失的字体,并重启应用以使PDFBox加载新字体到内存。
摘要由CSDN通过智能技术生成

一直以来,Java 体系就缺少操作PDF文件的类库,直到PDFBox 的出现。

PDFBox 是一款基于 Java 的优秀的PDF文件处理类库,支持从PDF文件中提取文本、将图片插入PDF文件、将 PDF 文件逐页的生成图片等等。

这里主要讲一下将 PDF 文件逐页生成图片。

1、PDF 文件逐页生成图片(基于 2.x 版本)PDDocument doc = PDDocument.load(pdfFile);

int pageCount = doc.getNumberOfPages();

PDFRenderer pdfRenderer = new PDFRenderer(doc);

for (int pageIndex=0; pageIndex

BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 105, ImageType.RGB);

ImageIOUtil.writeImage(image, imageFilePath, 105);

}

doc.close();

上述代码能将一个 PDF 文件逐页转换为图片。

笔者在自己的 Windows 机器上能正常运行,将一个带有中文填充字符的 PDF 文件逐页转换为了图片。但是将服务部署到 Linux 机器上后,发现中文填充字符变成了方框,也就是出现了乱码。

2、依赖系统字体经仔细研究,PDFbox 将 PDF 文件转换为图片的过程中,需要操作系统上安装了 PDF 文件中使用的字体,不然可能出现乱码。

而 PDF 文件中用到的字体,可以从【文件】==》【属性】==【字体】中查看。

可以在 linux 上使用 fc-list 指令查看已经安装的字体,比对找出缺少的字体,然后逐一安装。

3、PDFbox 会缓存字体信息安装完相应的字体后,发现乱码还在(空的框框),后来从 PDFbox 的日志上得知,PDFbox 在应用启动的时候会将字体信息缓存到内存中。

于是想到重启应用,重启应用后,日志中会看到已探测到新的字体,并逐一加载到内存缓存,重新执行命令,可以看到乱码消失,图片正常了。

作者:LBQY

链接:https://www.jianshu.com/p/22a84090753f

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权

转载请注明原文链接:Java PDF文件逐页转换为图片

要将 PDF 文件转换成高清图片,可以使用 Java 库 Apache PDFBox。以下是一个简单的示例代码: ```java import java.io.File; import java.io.IOException; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.rendering.RenderDestination; import org.apache.pdfbox.rendering.RenderRequest; import org.apache.pdfbox.rendering.RenderResult; import org.apache.pdfbox.rendering.Renderer; import org.apache.pdfbox.rendering.image.BufferedImageRenderer; import org.apache.pdfbox.rendering.image.BufferedImageWriter; import javax.imageio.ImageIO; public class PDFToImageConverter { public static void main(String[] args) throws IOException { String sourcePdf = "path/to/source.pdf"; String destFolder = "path/to/destination/folder"; convertPDFToImages(sourcePdf, destFolder); } public static void convertPDFToImages(String sourcePdf, String destFolder) throws IOException { File file = new File(sourcePdf); PDDocument document = PDDocument.load(file); PDFRenderer pdfRenderer = new PDFRenderer(document); int pageCount = document.getNumberOfPages(); for (int i = 0; i < pageCount; i++) { BufferedImage image = pdfRenderer.renderImageWithDPI(i, 300); File output = new File(destFolder + "/image" + (i + 1) + ".png"); ImageIO.write(image, "png", output); } document.close(); } } ``` 这段代码将 PDF 文件转换成多个 PNG 格式的图片,存储在指定的文件夹中。其中,`pdfRenderer.renderImageWithDPI(i, 300)` 方法可以指定图片的 DPI(每英寸点数),这里设置为 300dpi,可以根据需要进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值