(转)PDF转图片工具类

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;
    }
}

原文地址:https://www.cnblogs.com/RivenLw/p/10309393.html

时间: 2024-08-01 01:22:29

(转)PDF转图片工具类的相关文章

图片工具类, 图片水印,文字水印,缩放,补白等

import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import

拍照、本地图片工具类(兼容至Android7.0)

拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb.weex.util; import android.Manifest; import android.app.Activity; import android.app.Dialog; import android.content.ClipData; import android.content.Conten

Java图片工具类,完成图片的截取和任意缩放

package com.common.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRas

Android 调节图片工具类

package com.base.changeimage; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; /** * 调节图

异步线程加载图片工具类

/** * 异步线程加载图片工具类 * 使用说明: * BitmapManager bmpManager; * bmpManager = new BitmapManager(BitmapFactory.decodeResource(context.getResources(), R.drawable.loading)); * bmpManager.loadBitmap(imageURL, imageView); */ public class BitmapManager { private st

圆形 / 圆角图片工具类——CircleImageManager

这个类可以实现圆角,或者是圆形图片的操作. CircleImageManager.java package com.kale.utils; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import

压缩图片工具类,压缩100KB以内拿走直接用

最近遇到自拍上传图片过大问题,很烦恼,所以自己写了一个压缩图片的工具类使用,自测效果很不错,可以压缩到KB以内,像素还可以分辨清晰 下面Java代码奉上: 1 import lombok.extern.slf4j.Slf4j; 2 import org.w3c.dom.Element; 3 4 5 import javax.imageio.IIOImage; 6 import javax.imageio.ImageIO; 7 import javax.imageio.ImageTypeSpeci

PDF转图片工具

点击下载( 提取码:1ll1 ) 软件功能基于mupdf,UI使用wxpython开发 功能: 支持pdf转图片,图片格式png 支持批量转换 使用: 第一步,点击按钮添加文档到列表,或直接将待转换文档拖入列表 第二步,选择输出目录 第三部,点击转换 核心代码: class Debug(object): DEBUG = True def TraceLog(self, log=None): if Debug: import traceback traceback.print_exc() if lo

Android 超强图片工具类BitmapUtil

说明:为了方便大家使用,本人把大家常用的图片处理代码集中到这个类里 使用了LruCache与SoftReference /** * 图片加载及转化工具 ----------------------------------------------------------------------- 延伸:一个Bitmap到底占用多大内存?系统给每个应用程序分配多大内存? Bitmap占用的内存为:像素总数 * * 每个像素占用的内存.在Android中, Bitmap有四种像素类型:ARGB_888