相关专题链接:

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连接,然后定义输入输出文件格式信息,执行转换,关闭连接即可,代码中有详细注释这里不再赘述了。

  1. /**
  2. * 调用openoffice把office转成pdf
  3. * @param inStream 输入流
  4. * @param fos 输出流
  5. * @param extensionname 扩展名
  6. */
  7. public static void converterOffiec2PDF(InputStream inStream,
  8. FileOutputStream fos, String extensionname)
  9. {
  10. OpenOfficeConnection connection = null;
  11. try
  12. {
  13. connection = new SocketOpenOfficeConnection(8100);//获取openoffice连接
  14. DocumentConverter converter = new OpenOfficeDocumentConverter(
  15. connection);//创建openoffice文件转换类
  16. DocumentFormat inputFormat = null;
  17. DocumentFormat pdf = new DocumentFormat("Portable Document Format",
  18. "application/pdf", "pdf");//指定目标文件格式信息
  19.  
  20. //指定输出过滤器参数
  21. pdf.setExportFilter(DocumentFamily.DRAWING, "draw_pdf_Export");
  22. pdf.setExportFilter(DocumentFamily.PRESENTATION,
  23. "impress_pdf_Export");
  24. pdf.setExportFilter(DocumentFamily.SPREADSHEET, "calc_pdf_Export");
  25. pdf.setExportFilter(DocumentFamily.TEXT, "writer_pdf_Export");
  26.  
  27. //指定输入文件格式信息 定义信息在docment_formats.xml中
  28. if (Constans.FileExtName.DOC.equalsIgnoreCase(extensionname))
  29. {
  30. inputFormat = new DocumentFormat("Microsoft Word",
  31. DocumentFamily.TEXT, "application/msword", "doc");
  32. inputFormat.setExportFilter(DocumentFamily.TEXT, "MS Word 97");
  33. }
  34. else if (Constans.FileExtName.DOCX.equalsIgnoreCase(extensionname))
  35. {
  36. inputFormat = new DocumentFormat(
  37. "Microsoft Word 2007 XML",
  38. DocumentFamily.TEXT,
  39. "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  40. "docx");
  41. }
  42. else if (Constans.FileExtName.XLS.equalsIgnoreCase(extensionname))
  43. {
  44. inputFormat = new DocumentFormat("Microsoft Excel",
  45. DocumentFamily.SPREADSHEET, "application/vnd.ms-excel",
  46. "xls");
  47. inputFormat.setExportFilter(DocumentFamily.SPREADSHEET,
  48. "MS Excel 97");
  49. }
  50. else if (Constans.FileExtName.XLSX.equalsIgnoreCase(extensionname))
  51. {
  52. inputFormat = new DocumentFormat(
  53. "Microsoft Excel 2007 XML",
  54. DocumentFamily.SPREADSHEET,
  55. "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  56. "xlsx");
  57. }
  58.  
  59. //执行文件转换
  60. converter.convert(inStream, inputFormat, fos, pdf);
  61. } finally
  62. {
  63. if (connection != null)
  64. {
  65. connection.disconnect();
  66. connection = null;
  67. }
  68.  
  69. closeStream(inStream, fos);
  70. }
  71. }

2、图片转pdf

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

  1. /**
  2. * 图片转pdf
  3. * @param inStream
  4. * @param fos
  5. * @throws MalformedURLException
  6. * @throws IOException
  7. * @throws
  8. */
  9. public static void converterImg2Pdf(InputStream inStream,
  10. FileOutputStream fos) throws MalformedURLException, IOException
  11. {
  12. //创建新文档
  13. Document doc = new Document();
  14. try
  15. {
  16. //pdf写入器装载文档、输出流
  17. PdfWriter.getInstance(doc, fos);
  18. doc.open();//打开文档准备写入,文档必须打开才能写入
  19.  
  20. BufferedImage bufferedImage = ImageIO.read(inStream);
  21. float h = bufferedImage.getHeight();
  22. float w = bufferedImage.getWidth();
  23. Image image = Image.getInstance(bufferedImage, null);
  24. image.setAlignment(Image.MIDDLE);//图片对齐方式,居中即可
  25. image.scalePercent(getPercent2(h, w));//图片压缩比
  26. doc.add(image);//添加图片
  27. doc.close();//关闭文档,文档必须正确关闭
  28.  
  29. } catch (DocumentException e)
  30. {
  31. e.printStackTrace();
  32. }
  33. }

相关文件下载

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

PDF解决方案(2)--文件转PDF的更多相关文章

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

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

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

    相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:最近参与了一个项目,客户要求把系统 ...

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

    相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:上一篇主要提到了PDF在线浏览的各 ...

  4. C# 使用 wkhtmltopdf 把HTML文本或文件转换为PDF

    一.简介 之前也记录过一篇关于把 HTML 文本或 HTML 文件转换为 PDF 的博客,只是之前那种方法有些局限性. 后来又了解到 wkhtmltopdf.exe 这个工具,这个工具比起之前的那种方 ...

  5. libreoffice转换文件为pdf文件乱码问题解决办法

    最近系统需要一个office文件预览功能 解决方案为使用libreoffice将office文件转换为pdf文件,然后使用swftools将pdf文件转换为swf文件 最后在前台使用flexpaper ...

  6. React中使用react-file-viewer,实现预览office文件(pdf,word,xlsx等文件)前端实现

    最近做一个项目要求在前端浏览器可以直接打开office文件(pdf,doc,xlsx等文件).pdf浏览器可以直接打开(可以直接用a标签href="文件地址"或者iframe标签s ...

  7. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  8. 执行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 ...

  9. Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)

    功能说明 输入文件路径,在浏览器输出文件预览信息,经测试极速(Chrome).IE9.Firefox通过 分类文件及代码说明  DemoFiles 存放可测试文件 Default.aspx  启动页 ...

随机推荐

  1. android Intent.createChooser 应用选择

    在微博案例: 1.public void onClickShare(View view) { 2. 3. Intent intent=new Intent(Intent.ACTION_SEND); 4 ...

  2. C#采用的是“四舍六入五成双”、上取整、下取整

    c# 四舍五入.上取整.下取整 Posted on 2010-07-28 12:54 碧水寒潭 阅读(57826) 评论(4) 编辑 收藏 在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采 ...

  3. WSHPSRS-匹克选择列表生成器-SRS(R12.2.3)

     匹克选择列表生成器-SRS(R12.2.3) --US Program:Pick Selection List Generation - SRS Short Name:WSHPSRS Appli ...

  4. 如何使用Maven创建web工程(详细步骤)

    使用eclipse插件创建一个web project 首先创建一个Maven的Project例如以下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing ...

  5. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...

  6. 【iOS发展-81】setNeedsDisplay刷新显卡,并CADisplayLink它用来模拟计时器效果

    (1)效果 (2)源码下载(假设提示没有小图片的话,自己找一个替换一下即可,看到效果即可) http://download.csdn.net/detail/wsb200514/8176339 (3)总 ...

  7. [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)

    指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Lon ...

  8. ABP领域层——领域事件(Domain events)

    ABP领域层——领域事件(Domain events) 基于DDD的现代ASP.NET开发框架--ABP系列之14.ABP领域层——领域事件(Domain events) ABP是“ASP.NET B ...

  9. CodeIgniter连接数据库及快速入门

    原文:CodeIgniter连接数据库及快速入门 一.数据库配置 CodeIgniter 有一个配置文件让你存放数据库连接值(username:用户名,password:密码,database nam ...

  10. FMDB与GCD

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 因为FMD ...