1. 程式人生 > >(轉)PDF轉圖片工具類

(轉)PDF轉圖片工具類

rendering ret isn rotation xpage wim erro buffere item

import org.apache.commons.lang3.StringUtils;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage; import java.io.File; import java.util.ArrayList; import java.util.List; /** * FileName: PdfToImageUtil * Date: 2018/9/18 17:53 * 說明: PDF轉圖片 */ public class PdfToImageUtil { static Logger logger = LoggerFactory.getLogger(PdfToImageUtil.class); // 水印透明度
private static float alpha = 0.2f; // 水印橫向位置 private static int positionWidth = 150; // 水印縱向位置 private static int positionHeight = 300; // 水印文字字體 private static Font font = new Font("仿宋", Font.BOLD, 26); // 水印文字顏色 private static Color color = Color.GRAY; // 水印文字 private
static String watermark; //圖片寬度(做成可配置項) private static Integer width = 2479; //圖片高度(做成可配置項) private static Integer height = 3508; //圖片格式(做成可配置項) private static String imgType = "png"; public PdfToImageUtil() { } /** * 有參構造,傳參水印文字,生成圖片時根據是否傳參選擇是否生成水印 * * @param watermark 水印內容 */ public PdfToImageUtil(String watermark) { this.watermark = watermark; } //設置水印 public static BufferedImage setGraphics(BufferedImage bfimage) { Graphics2D g = bfimage.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); // 5、設置水印文字顏色 g.setColor(color); // 6、設置水印文字Font g.setFont(font); // 7、設置水印文字透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); //設置旋轉 g.rotate(-Math.PI / 6); g.drawString(watermark, 0, (bfimage.getHeight() / 2) * 1); // 9、釋放資源 g.dispose(); return bfimage; } /** * @date: 2018/9/18 17:55 * @param: [inputFile] pdf文件路徑 * @return: java.util.List<java.lang.String> 圖片地址列表 * @Description: pdf文件轉圖片 */ public static List<String> pdfToIamge(String inputFile) { //獲取inputFile的後綴名前的內容,如:"e:/test.pptx"的後綴名為:"e:/test" String imgPath_start = inputFile.substring(0, inputFile.lastIndexOf(".")); List<String> list=null; Document document = null; try { document = new Document(); document.setFile(inputFile); float rotation = 0; //旋轉角度 int maxPages = document.getPageTree().getNumberOfPages(); list = new ArrayList<String>(maxPages); for (int i = 0; i < maxPages; i++) { //zoom 縮放比例 ,記住這裏調清晰度,我用的是8.5超清晰,9以上就報錯了 BufferedImage bfimage = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, 2.1f); //設置圖片的寬和高 Image tempImage = bfimage.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage biTemp = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics gTemp = biTemp.getGraphics(); gTemp.drawImage(tempImage, 0, 0, null); //加水印 /*if (StringUtils.isNotBlank(watermark)) { biTemp = setGraphics(biTemp); }*/ RenderedImage rendImage = biTemp; //拼接圖片地址 String imgPath = imgPath_start + "_" + i + "." + imgType; ImageIO.write(rendImage, imgType, new File(imgPath)); bfimage.flush(); list.add(imgPath); } } catch (Exception e) { logger.error("pdf轉化圖片出錯!", e); } if (document != null) { document.dispose(); } return list; } public void setWidth(Integer width) { PdfToImageUtil.width = width; } public void setHeight(Integer height) { PdfToImageUtil.height = height; } public void setImgType(String imgType) { PdfToImageUtil.imgType = imgType; } }

(轉)PDF轉圖片工具類