摘要:利用Apache的pdfbox包进行操作,将pdf分成多个png图片。

环境:win10+Eclipse Oxygen+jdk1.8.0

第三方库:

注意:官方的pdfbox有2.0和1.8两种版本之分,在一些API上有差别。类似于Python2和Python3的区别,两者不能通用。我在一开始不了解这个区别,加之一些博客并没有明确说明,造成了很大困扰和时间浪费。本文是用的pdfbox2.0

问题1:fontbox和pdfbox的下载地址。

解答:可以在官网中下载。https://pdfbox.apache.org/download.cgi#20x 百度搜索即可。点击左侧的download,在界面中选择下载。

问题2:只导入fontbox和pdfbox两个包为何会报错?

解答:需要导入commons-logging包,也是Apache的包。提供一些与日志相关的服务。

commons-logging的下载,可以在官网http://commons.apache.org/proper/commons-logging/download_logging.cgi上下载,点击左侧的download,在界面中选择下载即可。

代码:

/**
* @author 夹心 E-mail: yanjiaxin8410@163.com
* @version 创建时间:2018年5月18日 下午8:57:07
* 类说明
*/import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;public class PDF2png {//可自由确定起始页和终止页public static void pdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd) {// 将pdf装图片 并且自定义图片得格式大小File file = new File(fileAddress+"\\"+filename+".pdf");try {PDDocument doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = indexOfStart; i < indexOfEnd; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图ImageIO.write(image, "PNG", new File(fileAddress+"\\"+filename+"_"+(i+1)+".png"));}} catch (IOException e) {e.printStackTrace();}}//转换全部的pdfpublic static void pdf2png(String fileAddress,String filename) {// 将pdf装图片 并且自定义图片得格式大小File file = new File(fileAddress+"\\"+filename+".pdf");try {PDDocument doc = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI// BufferedImage srcImage = resize(image, 240, 240);//产生缩略图ImageIO.write(image, "PNG", new File(fileAddress+"\\"+filename+"_"+(i+1)+".png"));}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入需要转换的pdf的地址,例如 E:\软件\代码:");String fileAddress = sc.nextLine();System.out.println("请输入需要转换的pdf的名称,不要加.pdf后缀,例如 操作系统概念:");String filename =sc.nextLine();System.out.println("请输入开始转换的页码,从0开始,例如 5:");int indexOfStart=sc.nextInt();System.out.println("请输入停止转换的页码,-1为全部,例如 10:");int indexOfEnd=sc.nextInt();if (indexOfEnd==-1) {pdf2png(fileAddress, filename);}else {pdf2png(fileAddress, filename, indexOfStart, indexOfEnd);}}}

评价:

转换效率还是可以的,基本每秒转换一两张图片的速度。

图片的大小与清晰度和代码中的dpi设置有关,我尝试过96/144/198三个值,发现144比较合适。如果有特殊需求,需要更高清晰度的图片,可以自己手动调高dpi参数。

java实现pdf转图片相关推荐

  1. Java制作PDF转图片小工具

    背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...

  2. java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案

    java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案 方式 pdfBox iText(方式同上) spire.pdf.free(方式同上) 遇到的问题 图片清晰度.这种方式都有这个问 ...

  3. java代码pdf转图片中文乱码解决

    1:java代码 @RequestMapping("/pdfToPng")public void pdfToPng(HttpServletResponse response) th ...

  4. Java 实现PDF转图片,去除PDF水印,图片转PDF

    1.依赖jar包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian& ...

  5. java读取pdf三维图片_java 读取PDF文件生成图片形式

    引入所需maven依赖 org.icepdf.os icepdf-core 6.2.2 javax.media jai_core JAVA代码工具类package com.util; import c ...

  6. JAVA的pdf转图片方法

    JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...

  7. java实现pdf转图片,并可生成黑白图片

    一.开发前准备 所需jar:https://download.csdn.net/download/zqq3436/10588117 jdk版本:1.6 测试代码文件夹目录结构(pdf文件夹下有一些.p ...

  8. Java给PDF添加图片水印,且可以文字定位

    这两天公司开发需要对PDF增加特定图片,类似于电子印章效果,试了许多网上的方式,经过测试PDF只可以插入图片或者通过RSA实现专属签章,我觉得插入图片好用一些,效果如下: 这是定位了<盖章> ...

  9. Java实现pdf转图片的工具类(三种方法实现PDF转图片的案例)【亲测可用】

    提示:有些时候我们需要在项目中展示PDF,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好.Java使用各种技术将pdf转换成图片格式,并且内容不失帧.清晰可见,该工具类也是开发中常用到的 ...

  10. java生成PDF(图片,模板,表格)

    刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,不过这篇文章主要 ...

最新文章

  1. php + mssql乱码
  2. python生成一圈数包裹一圈数的数组
  3. 无数老板做企业还在卖产品赚差价
  4. P5 MySQL数据类型和类型选择
  5. Linux——tmux和vim常用命令总结(必会)
  6. Flutter高性能,线程安全,App开发的未来
  7. 韩顺平 php大牛班课程,2016泰牛程序员韩顺平PHP大牛班HTML课程完整笔记资料.doc...
  8. Adobe Photoshop 中的魔棒工具
  9. 苹果appstore审核等待很长时间的解决方案
  10. 怎么合并mp3音频文件?
  11. 基于FPGA的任意字节数的串口发送(含源码工程)
  12. 判断当前入口是PC端企业微信还是PC端浏览器。或者是APP端企业微信
  13. RollPitchYaw傻傻分不清
  14. 渗透测试-微信刷票漏洞(IP伪造)
  15. 2021最新.NET/C#面试汇总:《.NET/C#面试手册》
  16. PyTorch学习笔记(20) ——激活函数
  17. 【Python】python 程序示例
  18. Selenium自动化测试框架基础学习(元素表单操作)(Selenium操作)
  19. 2022年C++学习路线以及知识整理汇总
  20. Intelligent Robot

热门文章

  1. 概率统计13——二项分布与多项分布
  2. 计算机换算单位 gb,mb与gb换算(gb转换mb计算器)
  3. 腾讯觅影正式对外开放,可用AI进行医学图像分析和辅助诊疗
  4. [C++系列] 66. 超详解C++阶段性总结思维导图
  5. 题目 1097: 蛇行矩阵
  6. 北京程序员平均工资达2万!你拖后腿了吗?
  7. 怎么用java打开pkg文件怎么打开,pkg文件怎么打开 【处置方式】
  8. day12【Lambda,函数式接口】Lamd
  9. 从NCBI中查看已发现的基因可变剪接
  10. oracle 存储过程body,【随手记】Oracle存储过程报错 Compilation errors for PACKAGE BODY