这个是我之前做发票业务时弄的,记录一下。
当时需求是要将发票的pdf转化为图片让用户预览,并支持长按图片进行保存。
使用pdfbox实现,用起来很方便。
1.引用jar包
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.16</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.16</version>
</dependency>
2.实现代码
代码里有个方法是用icepdf转换的,有兴趣也可以研究
icepdf是开源的,但是好像字体支持要收费。
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
public class PDF2ImageUtil {
/**
* 经过测试,dpi为96,100,105,120,150,200中,
* 120,150,200显示效果较为清晰,体积稳定,dpi越高图片体积越大
*/
public static final float DEFAULT_DPI = 200;
public static final String DEFAULT_FORMAT = "jpg";
/**
* pdf转图片,demo
* (使用 pdfbox)
* @param pdfPath PDF路径
* @imgPath img路径
* @page_end 要转换的页码,也可以定义开始页码和结束页码,根据需求自行添加
*/
public static void pdfTo