赞
踩
PDFBox 是一个用于处理 PDF 文件的 Java 库,通常情况下,它可以用于将 PDF 页面转换为图像。如果你在将长单页 PDF 转换为图像时遇到模糊的问题,可尝试以下解决方法:
代码已验证
- import org.apache.pdfbox.pdmodel.PDDocument;
- import org.apache.pdfbox.pdmodel.PDPage;
- import org.apache.pdfbox.pdmodel.PDRectangle;
- import org.apache.pdfbox.rendering.PDFRenderer;
- import org.apache.pdfbox.rendering.ImageType;
- import org.apache.pdfbox.rendering.RenderDestination;
- import org.apache.pdfbox.rendering.RenderedImage;
- import org.apache.pdfbox.rendering.Renderer;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
-
- public class ConvertLongPDFToImages {
- public static void main(String[] args) {
- try {
- PDDocument document = PDDocument.load(new File("your.pdf"));
- PDFRenderer pdfRenderer = new PDFRenderer(document);
-
- int pageNum = document.getNumberOfPages();
- List<BufferedImage> images = new ArrayList<>();
-
- // 设置图像分辨率
- int dpi = 300; // 每英寸点数
-
- for (int i = 0; i < pageNum; i++) {
- PDPage page = document.getPage(i);
- BufferedImage image = pdfRenderer.renderImageWithDPI(i, dpi, ImageType.RGB);
- images.add(image);
- }
-
- // 合并图像块
- BufferedImage combinedImage = combineImages(images);
-
- // 保存合并后的图像
- ImageIO.write(combinedImage, "PNG", new File("output.png"));
-
- document.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- // 合并多个图像
- private static BufferedImage combineImages(List<BufferedImage> images) {
- int totalWidth = 0;
- int maxHeight = 0;
-
- for (BufferedImage image : images) {
- totalWidth = Math.max(totalWidth, image.getWidth());
- maxHeight += image.getHeight();
- }
-
- BufferedImage combinedImage = new BufferedImage(totalWidth, maxHeight, BufferedImage.TYPE_INT_RGB);
- int y = 0;
-
- for (BufferedImage image : images) {
- combinedImage.createGraphics().drawImage(image, 0, y, null);
- y += image.getHeight();
- }
-
- return combinedImage;
- }
- }
如果遇到乱码无法加载字体:
可开Debug查看缺少哪个字体,如果提示STSong-Light字体缺失:No glyph for 20154 (CID 0ca6) in font STSong-Light
Using fallback XXX for CID-keyed font STSong-Light,指系统中没有安装STSong-Light字体,pdfbox使用XXX字体来替代,出现方块指替代字体也不存在,需要安装STSong-Light字体
可选择安装对应字体:
安装字体时,要选择“为所有用户安装”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。