文档章节

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

china008
 china008
发布于 2014/08/27 21:20
字数 999
阅读 105
收藏 0

相关专题链接:

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进行转换需要用到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

本文转载自: 相关专题链接: PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:上一篇中讲到的...

china008
粉丝 6
博文 286
码字总数 30406
作品 0
海淀
私信 提问
JAVA实现调用打印机打印PDF

JAVA实现调用打印机打印PDF,网上搜索了一大把资料,基本上都是重复。。。下面骂人的一大堆。。我这里来解决一下。 需求:前端调用用接口 后端根据模版生成数据联通打印机直接一键打印! 思路...

jason_kiss
2018/12/27
0
0
PDF文件如何转成markdown格式

百度上根据pdf转makrdown为关键字进行搜索,结果大多数是反过来的转换,即markdown文本转PDF格式。 但是PDF转markdown的解决方案很少。 正好我工作上有这个需求,所以自己实现了一个解决方案...

JerryWang_SAP
02/24
0
0
doc文档转pdf文档和pdf文档、doc文档等转为swf文档开发解决方案

1 业务背景描述: 需求:网站需要用户可以在页面浏览课程讲义、bbs论坛的资料。讲义文件是pdf文件。bbs论坛资料一般是pdf文件或者doc文档等 2 实现思路: 将doc文档等转为pdf文档, 将pdf文档...

deepler
2014/01/15
0
2
office转PDF文档

最近项目上面有个需求,将用户上传的office格式转换成pdf格式。下面记录下我走过的一些弯路,和得到的一些收获 1 使用java第三方api转换。 这个是我最开始的想法,因为java毕竟比较熟悉,学习...

冰暝
2016/12/05
33
0
PDF处理、Tesseract-OCR的介绍

相关文章 OCR识别-python版(一) 基于Python实现对PDF文件的OCR识别 使用Google开源tesseract OCR用语言库报allowblob_division解决方案 Tesseract-OCR识别中文与训练字库实例 Tesseract训练...

致Great
2017/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
3
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
8
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
4
0
centos7修改命令行或图形界面启动模式

1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改启动模式(修改为图形界面,要是修改为命令行就multi-user.target) 2.systemctl set-default multi-...

大圣39
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部