相关专题链接:

PDF解决方案(1)--文件上传

PDF解决方案(2)--文件转PDF

PDF解决方案(3)--PDF转SWF

PDF解决方案(4)--在线浏览

前言:上一篇中讲到的文件上传,文件上传在网络上有大量的范例,因为想提供一个完整的解决方案就放上了,仅供参考;这一篇主要介绍一些常用文件转换为PDF的实现。

1、word、excel转pdf

通过百度了解到现在office转换为pdf主要有三种形式:Jacob、JCom、openoffice,前两种方式均依赖windows平台和office软件(其中JCom还需要Acrobat_Pro且已注册),成本很高且局限性很大,第三种方式使用开源的openoffice支持跨平台使用,目前绝大部分的web应用都会部署在linux或UNIX平台,所以第三种方式是一种最好的实现方案,下面介绍第三种方案的实现(基于windows平台,linux平台在openoffice的安装和启动略有差异,但Java调用的代码是相同的,后面在提供专门篇幅来介绍linux平台的openoffice安装和启动),前两种方式会在下面提供demo供大家参考。

转换前需要先安装并以服务方式启动openoffice软件:

openoffice下载地址:http://www.openoffice.org/download/index.html

安装成功后在cmd中定位到program目录,执行命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" –nofirststartwizard,然后执行:netstat -ano|findstr "8100" ,当出现如图红线所示则表示启动成功了。

调用openoffice代码:

调用openoffice进行转换需要用到openoffice提供的jar包:jodconverter、juh、jurt、ridl、slf4j-api、slf4j-jdk14、unoil、xstream,Apache的io包,在项目中引用就可以了,其中在jodconverter包的com.artofsolving.jodconverter路径下有一个document-formats.xml的文件,它定义了openoffice支持的文件转换类型,这里我们只选中其中的doc、docx、xls、xlsx四种类型,先获取openoffice连接,然后定义输入输出文件格式信息,执行转换,关闭连接即可,代码中有详细注释这里不再赘述了。

/*** 调用openoffice把office转成pdf* @param inStream 输入流* @param fos 输出流* @param extensionname 扩展名*/public static void converterOffiec2PDF(InputStream inStream,FileOutputStream fos, String extensionname){OpenOfficeConnection connection = null;try{connection = new SocketOpenOfficeConnection(8100);//获取openoffice连接DocumentConverter converter = new OpenOfficeDocumentConverter(connection);//创建openoffice文件转换类DocumentFormat inputFormat = null;DocumentFormat pdf = new DocumentFormat("Portable Document Format","application/pdf", "pdf");//指定目标文件格式信息//指定输出过滤器参数pdf.setExportFilter(DocumentFamily.DRAWING, "draw_pdf_Export");pdf.setExportFilter(DocumentFamily.PRESENTATION,"impress_pdf_Export");pdf.setExportFilter(DocumentFamily.SPREADSHEET, "calc_pdf_Export");pdf.setExportFilter(DocumentFamily.TEXT, "writer_pdf_Export");//指定输入文件格式信息  定义信息在docment_formats.xml中if (Constans.FileExtName.DOC.equalsIgnoreCase(extensionname)){inputFormat = new DocumentFormat("Microsoft Word",DocumentFamily.TEXT, "application/msword", "doc");inputFormat.setExportFilter(DocumentFamily.TEXT, "MS Word 97");}else if (Constans.FileExtName.DOCX.equalsIgnoreCase(extensionname)){inputFormat = new DocumentFormat("Microsoft Word 2007 XML",DocumentFamily.TEXT,"application/vnd.openxmlformats-officedocument.wordprocessingml.document","docx");}else if (Constans.FileExtName.XLS.equalsIgnoreCase(extensionname)){inputFormat = new DocumentFormat("Microsoft Excel",DocumentFamily.SPREADSHEET, "application/vnd.ms-excel","xls");inputFormat.setExportFilter(DocumentFamily.SPREADSHEET,"MS Excel 97");}else if (Constans.FileExtName.XLSX.equalsIgnoreCase(extensionname)){inputFormat = new DocumentFormat("Microsoft Excel 2007 XML",DocumentFamily.SPREADSHEET,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xlsx");}//执行文件转换
            converter.convert(inStream, inputFormat, fos, pdf);} finally{if (connection != null){connection.disconnect();connection = null;}closeStream(inStream, fos);}}

2、图片转pdf

图片转pdf采用itext的开源jar包itextpdf,itextpdf可以创建、修改pdf,这里我们利用itextpdf创建一个新的pdf然后把图片添加进去,实现图片转pdf的效果;代码步骤为:先创建文档,获取pdf写入器,打开文档,设置内容格式,写入内容到文档,关闭文档。

/*** 图片转pdf* @param inStream* @param fos* @throws MalformedURLException* @throws IOException* @throws*/public static void converterImg2Pdf(InputStream inStream,FileOutputStream fos) throws MalformedURLException, IOException{//创建新文档Document doc = new Document();try{//pdf写入器装载文档、输出流
            PdfWriter.getInstance(doc, fos);doc.open();//打开文档准备写入,文档必须打开才能写入
            BufferedImage bufferedImage = ImageIO.read(inStream);float h = bufferedImage.getHeight();float w = bufferedImage.getWidth();Image image = Image.getInstance(bufferedImage, null);image.setAlignment(Image.MIDDLE);//图片对齐方式,居中即可image.scalePercent(getPercent2(h, w));//图片压缩比doc.add(image);//添加图片doc.close();//关闭文档,文档必须正确关闭
} catch (DocumentException e){e.printStackTrace();}}

相关文件下载

jcom、jacob demo下载地址:http://pan.baidu.com/s/1dD297rz

转载于:https://www.cnblogs.com/barros/p/3870704.html

PDF解决方案(2)--文件转PDF相关推荐

  1. PDF解决方案(3)--PDF转SWF

    2019独角兽企业重金招聘Python工程师标准>>> PDF解决方案(3)--PDF转SWF 相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF ...

  2. xps 转 pdf android版,OakDoc XPS to PDF Converter(XPS文件转PDF格式工具)V2.2 正式版

    OakDoc XPS to PDF Converter(XPS文件转PDF格式工具)是一款很优秀好用的XPS转PDF的辅助工具.如果你需要一款好用的文件转换工具,小编带来的这款OakDoc XPS t ...

  3. dxf转nc代码软件_cad怎么转pdf?cad文件转换pdf文件的方法步骤

    在日常办公中,我们会时不时遇到一些文档格式转换的问题,例如pdf转word,pdf转excel,pdf转图片,pdf转txt等,这些都是比较常见的.如果是做设计师的话,转换的格式又会有所不同,cad文 ...

  4. OFD文件怎么转PDF?ofd文件转换为pdf格式教程

    如果我们电脑里面装有wps软件,ofd文件可以通过WPS软件转换成PDF,以下为WPS转换的步骤说明: 现在已经有了非常好用的在线转换程序www.DataConvert.cn 可以直接处理 2维数组 ...

  5. pdf转换jpg文件转换器

    pdf转换jpg文件转换器 pdf文件转换器怎么合理有效的转换成jpg格式的?这两者之间的转换问题不是很常见,因此有效的转换方式并不多,可是仍有需要的人.怎么处理才好呢?pdf转换成jpg这种情况还是 ...

  6. pdf转jpg文件转换器

    pdf转jpg文件转换器 PDF文档在我们工作学习中处处可见,PDF文档阅读起来非常方便,对很多办公室一族来说,它的使用量和Word是最多的.但是现在已经有越来越多的人士需要将PDF转换成jpg格式的 ...

  7. pdf to word文件转换器,出自著名的PDF解决方案供应商NitroPDF

    PDFtoWord.com 号称是目前最为精准的pdf to word文件转换器,出自著名的PDF解决方案供应商NitroPDF. PDFtoWord.com是在线应用,完全免费,使用方便: - 访问 ...

  8. php生成pdf中文断码_Rmarkdown导出中文PDF解决方案

    Rmarkdown非常适合R语言使用者导出格式漂亮的文档,但是输出中文PDF的过程中会遇到各种麻烦的问题,本文整理了我的经验供大家参考. 总的来说,通过Rmarkdown输出中文版pdf报告,要解决以 ...

  9. Java实现HTML页面转PDF解决方案(转)

    最近在工作中遇到了一个很囧的事情.要把HTML页面转换成PDF或者tiff图片等其他形式,目前tiff还是一头雾水,如果各位大师有真的可行的想法(不要是别人那边抄的,百度最近搜索的质量严重的打击了我对 ...

最新文章

  1. 二叉树的前序、中序、后序遍历非递归实现
  2. 编辑Linux系统实验,linux操作系统实验vi编辑器的使用
  3. python ffmpeg4 保存h264
  4. laravel中的form表单提交
  5. AQS抽象队列同步器详解(待更新)
  6. win10系统下载 Ghost Win10 RS1 1067 64位纯净3月版
  7. 信息发布服务器hp3000,HPCS-3000型DCS系统维护说明….doc
  8. oneproxy检测主从复制同步延迟
  9. 演练 小米商城 手机版块 0920
  10. 上交AI研究院副院长马利庄:基于大数据的人脸识别技术进展与展望
  11. 补习系列(8)-springboot 单元测试之道
  12. 为什么摄像头模块功耗和EMI需要求助SerDes?
  13. backtrader的回测结果之Bokel quantstats backtrader_plotting btplotting
  14. LeetCode 714. 买卖股票的最佳时机含手续费(动态规划)
  15. 学计算机拼音摇号,电脑摇号:作弊100%!
  16. 莫纳什大学计算机专业在哪个校区,莫纳什大学校区几个
  17. 九月总结:快速成长的一个月
  18. V-Play 使用粗体验
  19. 2022湖南最新建筑八大员(市政)考试试题题库及答案解析
  20. 软件测试基础篇(3)

热门文章

  1. Google 节日徽标全集 (1999-2009) (下)
  2. css --- 清除浮动
  3. Java Web 请求转发与请求重定向
  4. DOM-12 【模拟桌面待讲评】鼠标事件深入、点击与拖拽分离、双击事件
  5. elasticsearch分词聚合查询demo
  6. [SceneKit专题]11-Reference-Nodes引用节点
  7. Powershell命令中的 CommonParameters是指什么
  8. JS-键盘事件之方向键移动元素
  9. 基于百度地图js进行地理定位
  10. 计算UILabel带行间距的行高