如何使用java进行pdf转图片并去除水印

背景:前天遇到一个问题,本来使用的程序pdf转图片,没有问题,突然出现pdf转图片出现乱码,不全的问题。
解决方案一:使用spire.pdf.jar包,免费版会出现水印,效率不高,但转换图片稳定。

//maven仓库下载地址
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependency>
   <groupId> e-iceblue </groupId>
    <artifactId>spire.pdf</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf.free</artifactId>
    <version>2.6.3</version>
</dependency>

自己封装的工具类

import com.spire.pdf.PdfDocument;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;

public class Pdf2Imges {

    /**
     * 截图
     * @param input 原图片
     * @param out 最终图片
     * @param x 起始x坐标
     * @param y 起始y坐标
     * @throws IOException
     */
    public static void cutPNG(InputStream input, OutputStream out , int x, int y) throws IOException {
        ImageInputStream imageStream = null;
        try {
            Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("png");
            ImageReader reader = readers.next();
            imageStream = ImageIO.createImageInputStream(input);
            reader.setInput(imageStream, true);
            ImageReadParam param = reader.getDefaultReadParam();

            Rectangle rect = new Rectangle(x, y, reader.getWidth(0), reader.getHeight(0)-y);
            param.setSourceRegion(rect);
            BufferedImage bi = reader.read(0, param);
            ImageIO.write(bi, "png", out);
        }finally {
            imageStream.close();
        }
    }
    /**
     * 将pdf转成图片
     * @param fileAddress 文件地址
     * @param filename 文件名
     * @param type 图片类型
     * @throws IOException
     */
    public static void pdfToPng(String fileAddress, String filename, String type) throws IOException {
        //加载PDF文件
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile(fileAddress+"\\"+filename+".pdf");
        //保存PDF的每一页到图片
        BufferedImage image;
        for (int i = 0; i < doc.getPages().getCount(); i++) {
            //此方法效率慢
            image = doc.saveAsImage(i);
            //方案二:将水印同背景化
            //将水印同背景颜色化
            int rgb = image.getRGB(20,5);
            for(int y=0; y<21; y++){
                for(int x=30; x<680; x++){
                    image.setRGB(x,y,rgb);
                }
            }
            File file = new File(fileAddress+"\\"+filename+"_"+(i+1)+"."+type);
            ImageIO.write(image, type, file);
            //方案一:将水印部分截取掉
//            Pdf2Imges.cutPNG(new FileInputStream(fileAddress+"\\"+filename+"_"+(i+1)+"."+type),
//                    new FileOutputStream(fileAddress+"\\"+filename+"-"+(i+1)+"."+type),0,20);
            //file.delete();
        }
        doc.close();
    }

    public static void main(String[] ags) throws IOException {
        String fileAddress = "文件地址";
        String filename = "文件名";
        String type = "图片类型";
        Pdf2Imges.pdfToPng(fileAddress,filename,type);
    }
}

方案二:下载xpdf工具,使用该工具进行pdf转图片,效率高,效果好,推荐使用(后续会写一篇关于这个的)
https://blog.csdn.net/BluerCat/article/details/107855588

你可能感兴趣的:(java,java,乱码,jar)