老攀呀 2023-12-14 09:51 采纳率: 100%
浏览 8
已结题

java使用apache pdfbox提取dpf为图片时没有颜色

使用apache pdfbox提取dpf为图片时没有颜色,初步猜测时图层的原因,试了很多中办法都不生效。

 BufferedImage image = renderer.renderImageWithDPI(i, 300,ImageType.ARGB);
BufferedImage image = renderer.renderImageWithDPI(i, 300,ImageType.RGB);

原来pdf效果

img


适用pdfbox 提取图片效果

img


img


代码如下:

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>3.0.0</version>
        </dependency>

 private static void pdf2Image() {
        //程序的逻辑代码
        String pdfFilePath = "D:\\Users\\65720\\Desktop\\*********\\勇罕 2022年 第 4 期.pdf"; // PDF文件路径
        String outputImagePath = "D:\\Users\\65720\\Desktop\\********\\勇罕 2022年 第 4 期\\"; // PNG格式的图片路径
        try {
            // 加载PDF文档
            PDDocument document = Loader.loadPDF(new File(pdfFilePath));
            // 创建PDF渲染器
            PDFRenderer renderer = new PDFRenderer(document);
            // 循环处理每一页
            for (int i = 0; i < 2; i++) {
                // 渲染PDF页面为图像
                BufferedImage image = renderer.renderImageWithDPI(i, 300);
                // 保存图像为PNG文件
                ImageIO.write(image, "png", new File(outputImagePath + "page" + (i + 1) + ".png"));
            }
            // 关闭PDF文档
            document.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
  • 写回答

1条回答 默认 最新

  • nuclear2011 2023-12-15 16:12
    关注

    可以尝试下其他库转换看看结果。下面代码用到Spire.PDF for Java库转换PDF到图片

    
    import com.spire.pdf.*;
    import com.spire.pdf.graphics.PdfImageType;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    public class PDFtoImage {
        public static void main(String[] args)throws IOException {
            //实例化PdfDocument类的对象
            PdfDocument pdf = new PdfDocument();
    
            //加载PDF文档
            pdf.loadFromFile("sample.pdf");
    
            //遍历PDF每一页,保存为图片
            for (int i = 0; i < pdf.getPages().getCount(); i++) {
                //将页面保存为图片,并设置DPI分辨率
                BufferedImage image = pdf.saveAsImage(i, PdfImageType.Bitmap,500,500);
                //将图片保存为png格式
                File file = new File( String.format(("ToImage-img-%d.png"), i));
                ImageIO.write(image, "PNG", file);
            }
            pdf.close();
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算