最近需要用到pdf转图片,发现不是需要花钱就是有水印限制,不是很好,自己做了个小程序,满足大家的需求:

maven:

<dependencies><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.5</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-tools</artifactId><version>2.0.5</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk16</artifactId><version>1.46</version></dependency></dependencies>

code:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileSystemView;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;/*** Created by Administrator on 2019-02-28.*/
public class PDF2IMG {private static final String PASSWORD = "-password";private static final String START_PAGE = "-startPage";private static final String END_PAGE = "-endPage";private static final String PAGE = "-page";private static final String IMAGE_TYPE = "-imageType";private static final String FORMAT = "-format";private static final String OUTPUT_PREFIX = "-outputPrefix";private static final String PREFIX = "-prefix";private static final String COLOR = "-color";private static final String RESOLUTION = "-resolution";private static final String DPI = "-dpi";private static final String CROPBOX = "-cropbox";private static final String TIME = "-time";public static void main(String[] args) throws IOException {System.setProperty("apple.awt.UIElement", "true");String password = "";String pdfFile = getFile().getPath();String outputFilePath="D:\\XS\\";String outputPrefix = "XSPdfTools";String imageFormat = "jpg";int startPage = 1;int endPage = 2147483647;String color = "rgb";float cropBoxLowerLeftX = 0.0F;float cropBoxLowerLeftY = 0.0F;float cropBoxUpperRightX = 0.0F;float cropBoxUpperRightY = 0.0F;boolean showTime = false;int dpi;try {dpi = Toolkit.getDefaultToolkit().getScreenResolution();} catch (HeadlessException var28) {dpi = 96;}for(int document = 0; document < args.length; ++document) {if(args[document].equals("-password")) {++document;if(document >= args.length) {usage();}password = args[document];} else if(args[document].equals("-startPage")) {++document;if(document >= args.length) {usage();}startPage = Integer.parseInt(args[document]);} else if(args[document].equals("-endPage")) {++document;if(document >= args.length) {usage();}endPage = Integer.parseInt(args[document]);} else if(args[document].equals("-page")) {++document;if(document >= args.length) {usage();}startPage = Integer.parseInt(args[document]);endPage = Integer.parseInt(args[document]);} else if(!args[document].equals("-imageType") && !args[document].equals("-format")) {if(!args[document].equals("-outputPrefix") && !args[document].equals("-prefix")) {if(args[document].equals("-color")) {++document;color = args[document];} else if(!args[document].equals("-resolution") && !args[document].equals("-dpi")) {if(args[document].equals("-cropbox")) {++document;cropBoxLowerLeftX = Float.valueOf(args[document]).floatValue();++document;cropBoxLowerLeftY = Float.valueOf(args[document]).floatValue();++document;cropBoxUpperRightX = Float.valueOf(args[document]).floatValue();++document;cropBoxUpperRightY = Float.valueOf(args[document]).floatValue();} else if(args[document].equals("-time")) {showTime = true;} else if(pdfFile == null) {pdfFile = args[document];}} else {++document;dpi = Integer.parseInt(args[document]);}} else {++document;outputPrefix = args[document];}} else {++document;imageFormat = args[document];}}if(pdfFile == null) {usage();} else {if(outputPrefix == null) {outputPrefix = pdfFile.substring(0, pdfFile.lastIndexOf(46));}PDDocument var30 = null;try {var30 = PDDocument.load(new File(pdfFile), password);ImageType imageType = null;if("bilevel".equalsIgnoreCase(color)) {imageType = ImageType.BINARY;} else if("gray".equalsIgnoreCase(color)) {imageType = ImageType.GRAY;} else if("rgb".equalsIgnoreCase(color)) {imageType = ImageType.RGB;} else if("rgba".equalsIgnoreCase(color)) {imageType = ImageType.ARGB;}if(imageType == null) {System.err.println("Error: Invalid color.");System.exit(2);}if(cropBoxLowerLeftX != 0.0F || cropBoxLowerLeftY != 0.0F || cropBoxUpperRightX != 0.0F || cropBoxUpperRightY != 0.0F) {changeCropBox(var30, cropBoxLowerLeftX, cropBoxLowerLeftY, cropBoxUpperRightX, cropBoxUpperRightY);}long startTime = System.nanoTime();boolean success = true;endPage = Math.min(endPage, var30.getNumberOfPages());PDFRenderer renderer = new PDFRenderer(var30);for(int endTime = startPage - 1; endTime < endPage; ++endTime) {BufferedImage image = renderer.renderImageWithDPI(endTime, (float)dpi, imageType);String duration = outputPrefix + (endTime + 1) + "." + imageFormat;success &= ImageIOUtil.writeImage(image, duration,dpi);}long var31 = System.nanoTime();long var32 = var31 - startTime;int count = 1 + endPage - startPage;if(showTime) {System.err.printf("Rendered %d page%s in %dms\n", new Object[]{Integer.valueOf(count), count == 1?"":"s", Long.valueOf(var32 / 1000000L)});}if(!success) {System.err.println("Error: no writer found for image format \'" + imageFormat + "\'");System.exit(1);}} catch(Exception ex){ex.printStackTrace();}finally {if(var30 != null) {var30.close();}}System.out.println("转换完成");}}private static void usage() {String message = "Usage: java -jar pdfbox-app-x.y.z.jar PDFToImage [options] <inputfile>\n\nOptions:\n  -password  <password>            : Password to decrypt document\n  -format <string>                 : Image format: " + getImageFormats() + "\n" + "  -prefix <string>                 : Filename prefix for image files\n" + "  -page <number>                   : The only page to extract (1-based)\n" + "  -startPage <int>                 : The first page to start extraction (1-based)\n" + "  -endPage <int>                   : The last page to extract(inclusive)\n" + "  -color <int>                     : The color depth (valid: bilevel, gray, rgb, rgba)\n" + "  -dpi <int>                       : The DPI of the output image\n" + "  -cropbox <int> <int> <int> <int> : The page area to export\n" + "  -time                            : Prints timing information to stdout\n" + "  <inputfile>                      : The PDF document to use\n";System.err.println(message);System.exit(1);}private static String getImageFormats() {StringBuilder retval = new StringBuilder();String[] formats = ImageIO.getReaderFormatNames();for(int i = 0; i < formats.length; ++i) {if(formats[i].equalsIgnoreCase(formats[i])) {retval.append(formats[i]);if(i + 1 < formats.length) {retval.append(", ");}}}return retval.toString();}private static void changeCropBox(PDDocument document, float a, float b, float c, float d) {Iterator i$ = document.getPages().iterator();while(i$.hasNext()) {PDPage page = (PDPage)i$.next();System.out.println("resizing page");PDRectangle rectangle = new PDRectangle();rectangle.setLowerLeftX(a);rectangle.setLowerLeftY(b);rectangle.setUpperRightX(c);rectangle.setUpperRightY(d);page.setCropBox(rectangle);}}public static File getFile(){JFileChooser jfc=new JFileChooser(); //设置当前路径为桌面路径,否则将我的文档作为默认路径FileSystemView fsv = FileSystemView .getFileSystemView();jfc.setCurrentDirectory(fsv.getHomeDirectory());//JFileChooser.FILES_AND_DIRECTORIES 选择路径和文件jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );//弹出的提示框的标题jfc.showDialog(new JLabel(), "确定");//用户选择的路径或文件File file=jfc.getSelectedFile();return file;}}

java PDF转jpg相关推荐

  1. java pdf 多页转换为png格式的图片

    java pdf 多页转换为png格式的图片  适用于 无论pdf有多少页均可 废话不说,直接上代码 import java.awt.Graphics; import java.awt.image.B ...

  2. java -PDF添加文本水印与图片水印

    java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30;public static voidwaterMark(String ...

  3. java pdf验签_java pdf验签

    java pdf验签 [2021-02-09 19:35:21]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/(\s ...

  4. java pdf 转换 word_如何使用Java将pdf文件转换为word文件

    如何使用Java将pdf文件转换为word文件? 而且,它看起来像它一样容易吗? 解决方法: public class PDFTextReader { static String pdftoText( ...

  5. java pdf库_Java中常用的操作PDF的类库

    iText iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用 ...

  6. java pdf替换内容_java PDF批量替换关键词

    java PDF批量替换关键词 要求:将要替换的字段封装到一个类中,并规定字段名与PDF中关键字的映射. 准备: 关键词信息类-----MatchItem package pdf.replace; i ...

  7. 10 本 Java PDF 书籍免费分享

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要分享以下Java开发PDF书籍 一.Java编程思想 二.Effective Java 三.Java核心技术卷 四.Java并发编程实践 ...

  8. Java PDF数字签名(五)—Java 给PDF签名时添加可信时间戳

    一.程序运行环境 编译环境:IntelliJ IDEA 所需测试文件:PDF..pfx数字证书及密钥.PDF Jar包(Free Spire.PDF for Java).签名图片(.png格式) 可信 ...

  9. Big Faceless Java PDF Library[bfopdf]

    用于创建.编辑.显示和打印 Acrobat PDF 文档的最智能的 PDF 库.PDF API 体积小.速度快.易于使用并集成到您的项目中,并且完全用 Java 编写. 产品概览 PDF 库读取和写入 ...

  10. Big Faceless Java PDF Library[BFO]

    Big Faceless Organization (BFO)是KSM有限公司的贸易名称,是一家英国的私营公司.我们为国际性的企业对企业的电子商务市场开发高质量的Java软件组件.BFO成立于1998 ...

最新文章

  1. (总结)RHEL/CentOS 7.x的几点新改变
  2. python有道翻译接口-Python通过调用有道翻译api实现翻译功能示例
  3. 成都理工大学计算机报告,[2017年整理]成都理工大学通信工程计算机网络综合课程设计报告.doc...
  4. 软件设计原则——迪米特法则
  5. php csv 类,php csv操作类代码 - trim
  6. 使用决策树分类算法判断一下你的Python水平
  7. java如何调用同目录下的文件_文件目录发生了增删改操作?Java如何实时监控?...
  8. 2018年1月问答系统综述
  9. 4位格雷码的顺序编码_整理丨一文掌握编码器的工作原理!
  10. Zabbix server is not running:the information displayed may not be current
  11. opencv用于医学图像分割
  12. 【C语言】扫雷(递归展开 + 标记功能)
  13. 新建word 无法切换输入法_为什么word文件中无法切换输入法?
  14. GRE隧道封装协议及内核处理解析
  15. docker容器化部署
  16. 一个简单好用的磨皮祛斑算法理论和python实现
  17. CSM3416SF兼容MP2451,MCP16301HT-E,LT1933ES6,AOZ1282CI
  18. Adobe illustrator如何下载安装
  19. Python 3.11 中的最佳新特性和修正
  20. 浙江商人传子传孙的22条经商规矩

热门文章

  1. 淘淘商城简介——淘淘商城(一)
  2. python做积分计算器_PyQt5练习:积分计算器
  3. PTA 程序设计-一帮一(C语言)
  4. Jsoup——抓取图片
  5. Adobe-CC-2017 安装教程
  6. 细说 AppCompat 主题引发的坑:You need to use a Theme.AppCompat theme with this activity!
  7. 揭秘你不知道的京东管理体系!
  8. MATLAB安装破解教程(内涵所需文件)
  9. 电脑内录软件如何录制电脑系统在线声音?
  10. (java+selenium)Web自动化12306模拟人工滑块验证