PDF解决方案(2)--文件转PDF
相关专题链接:
前言:上一篇中讲到的文件上传,文件上传在网络上有大量的范例,因为想提供一个完整的解决方案就放上了,仅供参考;这一篇主要介绍一些常用文件转换为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
PDF解决方案(2)--文件转PDF的更多相关文章
- PDF解决方案(3)--PDF转SWF
相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:上一篇中介绍了上传的文件转PDF, ...
- PDF解决方案(1)--文件上传
相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:最近参与了一个项目,客户要求把系统 ...
- PDF解决方案(4)--在线浏览
相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:上一篇主要提到了PDF在线浏览的各 ...
- C# 使用 wkhtmltopdf 把HTML文本或文件转换为PDF
一.简介 之前也记录过一篇关于把 HTML 文本或 HTML 文件转换为 PDF 的博客,只是之前那种方法有些局限性. 后来又了解到 wkhtmltopdf.exe 这个工具,这个工具比起之前的那种方 ...
- libreoffice转换文件为pdf文件乱码问题解决办法
最近系统需要一个office文件预览功能 解决方案为使用libreoffice将office文件转换为pdf文件,然后使用swftools将pdf文件转换为swf文件 最后在前台使用flexpaper ...
- React中使用react-file-viewer,实现预览office文件(pdf,word,xlsx等文件)前端实现
最近做一个项目要求在前端浏览器可以直接打开office文件(pdf,doc,xlsx等文件).pdf浏览器可以直接打开(可以直接用a标签href="文件地址"或者iframe标签s ...
- .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...
- 执行jar文件生成pdf报错,Unsupported URL <file:///home
java -Djava.library.path=/usr/local/lib/ruby/gems/1.8/gems/sharp_office-1.0.1/ext/sigar -jar /usr/lo ...
- Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)
功能说明 输入文件路径,在浏览器输出文件预览信息,经测试极速(Chrome).IE9.Firefox通过 分类文件及代码说明 DemoFiles 存放可测试文件 Default.aspx 启动页 ...
随机推荐
- Repository、IUnitOfWork和IDbContext
DDD 领域驱动设计-谈谈Repository.IUnitOfWork和IDbContext的实践 上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDb ...
- 什么是简单的分析SQL注入漏洞
如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的,可是有多少人知道为什么会有这种注入漏洞呢?有的会随口说着对于字符的过滤不严造成的. 可是事实是这样吗?我们学这些.不仅要知其然.更要知其所以然 ...
- 脚本+批处理打造IIS监控器
原文 脚本+批处理打造IIS监控器 首先说下我什么要写它,第一.它可以帮你做一件事,那就是随时给你监控你公司的网站服务器的状态,一旦你的网站出现问题不能访问了,它就会自动帮你重启IIS然后让死掉的网站 ...
- 自动注册 IIS6 的 MIME 类型
原文 自动注册 IIS6 的 MIME 类型 由于IIS5和IIS6有很多的MIME类型没有设置,其中还包括了FLV(video/x-flv),上篇文章描述了制作<IIS6 自动安装>,而 ...
- Linux IPC(Inter-Process Communication,进程间通信)之管道学习
1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...
- 光流和KLT
一 光流 光流的概念是Gibson在1950年首先提出来的. 它是空间运动物体在观察成像平面上的像素运动的瞬时速度.是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存 ...
- 百度官方wormHole后门检测记录(转)
本次这个安卓后门真是哔了狗了,刚加入大安卓阵营就出了这个篓子,跟你root不root和什么安卓版本没有版毛钱关系,完全是百度SDK官方提供的后门,不是漏洞,人为的. 乌云地址:http://drops ...
- django 简易博客开发 1 安装、创建、配置、admin使用(转)
Django 自称是“最适合开发有限期的完美WEB框架”.本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触D ...
- async和await关键字实现异步编程
async和await关键字实现异步编程 异步编程 概念 异步编程核心为异步操作,该操作一旦启动将在一段时间内完成.所谓异步,关键是实现了两点:(1)正在执行的此操作,不会阻塞原来的线程(2)一旦 ...
- asp.net学习之GridView七种字段
原文:asp.net学习之GridView七种字段 asp.net中GridView绑定到数据源时,可以自动显示数据源的各个字段.只要设定其AutoGenerateColumns为TRUE即可.但这, ...