PDF转换JPG【顶】(jacob调用adobe动态库)
来源:互联网 发布:我的体育老师 知乎 编辑:程序博客网 时间:2024/04/30 02:57
网上找了很多PDF转JPG的方法。有纯java转的,有转换工具转换的,还有插件转换的,其中主要有:pdfbox、PDFRenderer、xpdf
转换后的效果基本都是分辨率低,有失真,或者有中文转换问题。
如果对于没有分辨率要求的话可以考虑一下PDFRenderer,基本就可以满足你的需求了。
pdfbox存在中文转换问题,当然网上也有一些解决方法,有兴趣也可以研究一下。
而对于转换工具来说,转换的效果自然是满意的,其中,有pdftoimage、PDFJPG.exe(推荐)下载地址:http://yunpan.cn/QpnVfxsZX493b ,但是如果程序要调用的话就不行了,因为只支持图形界面,不支持命令行调用。故而对于需要语言来调用的话就得另找了。
后来找了C#语言的,http://blog.csdn.net/shi0090/article/details/7262199 这篇文章可谓是各式各样,不过都是用到C#的,如果用java呢?
我就想使用java来调用dll,进而实现PDF转JPG的方法。
再后来加了个群后,找到一个比较靠谱的(转换效果好,分辨率高)的,就是利用jacob调用adobe动态库来转换。http://blog.csdn.net/d34274498/article/details/19154769
不过这个程序缺点除了该博文讲到的效率慢些,我觉得还有就是需要安装Acrobat这个限制。但转换效果还是挺不错的。源生态的。
我对该程序做了一下修改,主要就是增加一个缩放尺寸的,还有释放Acrobat.exe对PDF的操作。
package com.test.tool;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.ComThread;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class Pdf2Jpg {/** * * @param filepath * pdf路径 * @param savePath * img保存路径 * @param times * 缩放比例 如:1f为原图比例 * @throws IOException */public static void savaPageAsJpgByAcrobat(String filepath, String savePath,float times) throws IOException {ComThread.InitSTA();//初始化com的线程 // 输出FileOutputStream out = null;// PDF页数int pageNum = 0;// PDF宽、高int x, y = 0;// PDF控制对象Dispatch pdfObject = null;// PDF坐标对象Dispatch pointxy = null;// pdfActiveX PDDoc对象 主要建立PDF对象ActiveXComponent app = new ActiveXComponent("AcroExch.PDDoc");// pdfActiveX PDF的坐标对象ActiveXComponent point = new ActiveXComponent("AcroExch.Point");try {// 得到控制对象pdfObject = app.getObject();// 得到坐标对象pointxy = point.getObject();// 打开PDF文件,建立PDF操作的开始Dispatch.call(pdfObject, "Open", new Variant(filepath));// 得到当前打开PDF文件的页数pageNum = Dispatch.call(pdfObject, "GetNumPages").toInt();for (int i = 0; i < pageNum; i++) {// 根据页码得到单页PDFDispatch page = Dispatch.call(pdfObject, "AcquirePage",new Variant(i)).toDispatch();// 得到PDF单页大小的Point对象Dispatch pagePoint = Dispatch.call(page, "GetSize").toDispatch();// 创建PDF位置对象,为拷贝图片到剪贴板做准备ActiveXComponent pdfRect = new ActiveXComponent("AcroExch.Rect");// 得到单页PDF的宽int imgWidth = (int) (Dispatch.get(pagePoint, "x").toInt() * 2 * times);// 得到单页PDF的高int imgHeight = (int) (Dispatch.get(pagePoint, "y").toInt() * 2 * times);// 控制PDF位置对象Dispatch pdfRectDoc = pdfRect.getObject();// 设置PDF位置对象的值Dispatch.put(pdfRectDoc, "Left", new Integer(0));Dispatch.put(pdfRectDoc, "Right", new Integer(imgWidth));Dispatch.put(pdfRectDoc, "Top", new Integer(0));Dispatch.put(pdfRectDoc, "Bottom", new Integer(imgHeight));// 将设置好位置的PDF拷贝到Windows剪切板,参数:位置对象,宽起点,高起点,分辨率Dispatch.call(page, "CopyToClipboard", new Object[] {pdfRectDoc, 0, 0, 200 * times });Image image = getImageFromClipboard();BufferedImage tag = new BufferedImage(imgWidth, imgHeight, 8);Graphics graphics = tag.getGraphics();graphics.drawImage(image, 0, 0, null);graphics.dispose();// 输出图片ImageIO.write(tag, "JPEG", new File(savePath + (i+1) + ".jpg"));}} catch (Exception e) {e.printStackTrace();} finally {// 关闭PDFapp.invoke("Close", new Variant[] {});ComThread.Release();//关闭com的线程 真正kill进程}}public static Image getImageFromClipboard() throws Exception {Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();Transferable cc = sysc.getContents(null);if (cc == null)return null;else if (cc.isDataFlavorSupported(DataFlavor.imageFlavor))return (Image) cc.getTransferData(DataFlavor.imageFlavor);return null;}/*public static void main(String[] args) throws IOException {savaPageAsJpgByAcrobat("D:/test/pdf2html/uploadAndDownload/diyizu.pdf","D:/test/pdf2html/uploadAndDownload/img", 0.25f);}*/}
需要下载jacob-1.17-M2: http://yunpan.cn/QpnjIZK7D4jKC
同时还要安装Acrobate
在此也非常感谢该博友对我的提点。
- PDF转换JPG【顶】(jacob调用adobe动态库)
- JAVA使用jacob调用adobe动态库pdf转换图片
- jpg在线转换pdf
- java pdf转换jpg
- 仿百度文库解决方案(二)——利用Jacob调用MS Office转换文档为PDF
- 使用jacob调用Windows的com对象,转换Office文件为pdf、html等
- jpg转换pdf的方法
- jpg如何转换pdf格式
- jpg在线转换成pdf
- jpg转换成pdf免费
- jpg转换成pdf免费
- jpg图片如何转换pdf
- pdf转换jpg转换器软件
- PDF 转换成JPG图
- PDF转换成图片JPG
- 利用Jacob将word转换为pdf
- JAVA jacob office转换pdf代码
- java jacob office转换成pdf
- IMEI为TAC + FAC + SNR + SP(国际移动台识别码)
- VC6.0工程设置介绍
- C#使用正则表达式读取log4net日志文件
- setiosflags作用
- java 遍历map最简单的方法
- PDF转换JPG【顶】(jacob调用adobe动态库)
- 安装Homebrew,vim in Mac
- Android中SDK安装出错Failed to fectch URl https://dl-ssl.google.com/android/repository/addons_list.xml
- AsyncTask(笔记)
- 演示如何使用微软的CAPICOM组件
- eclipse的常用的设置
- ORACLE数据库SQL优化--->如何得到真实的执行计划
- 9-patch for Android UI
- HDU 1573 X问题 求同余方程组解的个数