jpg等公事在线浏览消除方案搭建,docx转为pdf实例

来源:http://www.smjxgs.com 作者:王中王鉄算盘 人气:98 发布时间:2019-08-08
摘要:Java利用openoffice将doc、docx转为pdf实例代码,openofficedocx 本文研究的主要是Java编程利用openoffice将doc、docx转为pdf的实现代码,具体如下。 Java实现在线预览的示例代码(openOffice实现),示例

Java利用openoffice将doc、docx转为pdf实例代码,openofficedocx

本文研究的主要是Java编程利用openoffice将doc、docx转为pdf的实现代码,具体如下。

Java实现在线预览的示例代码(openOffice实现),示例代码openoffice

简介

之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。

我的实现逻辑有两种:

一、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为html格式。

二、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为pdf格式。

转换成html格式大家都能理解,这样就可以直接在浏览器上查看了,也就实现了在线预览的功能;转换成pdf格式这点,需要用户安装了Adobe Reader XI,这样你会发现把pdf直接拖到浏览器页面可以直接打开预览,这样也就实现了在线预览的功能。

将文件转化为html格式或者pdf格式

话不多说,直接上代码。

package com.pdfPreview.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ConnectException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
 * 利用jodconverter(基于OpenOffice服务)将文件(*.doc、*.docx、*.xls、*.ppt)转化为html格式或者pdf格式,
 * 使用前请检查OpenOffice服务是否已经开启, OpenOffice进程名称:soffice.exe | soffice.bin
 * 
 * @author yjclsx
 */
public class Doc2HtmlUtil {

  private static Doc2HtmlUtil doc2HtmlUtil;

  /**
   * 获取Doc2HtmlUtil实例
   */
  public static synchronized Doc2HtmlUtil getDoc2HtmlUtilInstance() {
    if (doc2HtmlUtil == null) {
      doc2HtmlUtil = new Doc2HtmlUtil();
    }
    return doc2HtmlUtil;
  }

  /**
   * 转换文件成html
   * 
   * @param fromFileInputStream:
   * @throws IOException 
   */
  public String file2Html(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String timesuffix = sdf.format(date);
    String docFileName = null;
    String htmFileName = null;
    if("doc".equals(type)){
      docFileName = "doc_"   timesuffix   ".doc";
      htmFileName = "doc_"   timesuffix   ".html";
    }else if("docx".equals(type)){
      docFileName = "docx_"   timesuffix   ".docx";
      htmFileName = "docx_"   timesuffix   ".html";
    }else if("xls".equals(type)){
      docFileName = "xls_"   timesuffix   ".xls";
      htmFileName = "xls_"   timesuffix   ".html";
    }else if("ppt".equals(type)){
      docFileName = "ppt_"   timesuffix   ".ppt";
      htmFileName = "ppt_"   timesuffix   ".html";
    }else{
      return null;
    }

    File htmlOutputFile = new File(toFilePath   File.separatorChar   htmFileName);
    File docInputFile = new File(toFilePath   File.separatorChar   docFileName);
    if (htmlOutputFile.exists())
      htmlOutputFile.delete();
    htmlOutputFile.createNewFile();
    if (docInputFile.exists())
      docInputFile.delete();
    docInputFile.createNewFile();
    /**
     * 由fromFileInputStream构建输入文件
     */
    try {
      OutputStream os = new FileOutputStream(docInputFile);
      int bytesRead = 0;
      byte[] buffer = new byte[1024 * 8];
      while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
        os.write(buffer, 0, bytesRead);
      }

      os.close();
      fromFileInputStream.close();
    } catch (IOException e) {
    }

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    try {
      connection.connect();
    } catch (ConnectException e) {
      System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
    }
    // convert
    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    converter.convert(docInputFile, htmlOutputFile);
    connection.disconnect();
    // 转换完之后删除word文件
    docInputFile.delete();
    return htmFileName;
  }

  /**
   * 转换文件成pdf
   * 
   * @param fromFileInputStream:
   * @throws IOException 
   */
  public String file2pdf(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String timesuffix = sdf.format(date);
    String docFileName = null;
    String htmFileName = null;
    if("doc".equals(type)){
      docFileName = "doc_"   timesuffix   ".doc";
      htmFileName = "doc_"   timesuffix   ".pdf";
    }else if("docx".equals(type)){
      docFileName = "docx_"   timesuffix   ".docx";
      htmFileName = "docx_"   timesuffix   ".pdf";
    }else if("xls".equals(type)){
      docFileName = "xls_"   timesuffix   ".xls";
      htmFileName = "xls_"   timesuffix   ".pdf";
    }else if("ppt".equals(type)){
      docFileName = "ppt_"   timesuffix   ".ppt";
      htmFileName = "ppt_"   timesuffix   ".pdf";
    }else{
      return null;
    }

    File htmlOutputFile = new File(toFilePath   File.separatorChar   htmFileName);
    File docInputFile = new File(toFilePath   File.separatorChar   docFileName);
    if (htmlOutputFile.exists())
      htmlOutputFile.delete();
    htmlOutputFile.createNewFile();
    if (docInputFile.exists())
      docInputFile.delete();
    docInputFile.createNewFile();
    /**
     * 由fromFileInputStream构建输入文件
     */
    try {
      OutputStream os = new FileOutputStream(docInputFile);
      int bytesRead = 0;
      byte[] buffer = new byte[1024 * 8];
      while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
        os.write(buffer, 0, bytesRead);
      }

      os.close();
      fromFileInputStream.close();
    } catch (IOException e) {
    }

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    try {
      connection.connect();
    } catch (ConnectException e) {
      System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
    }
    // convert
    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    converter.convert(docInputFile, htmlOutputFile);
    connection.disconnect();
    // 转换完之后删除word文件
    docInputFile.delete();
    return htmFileName;
  }

  public static void main(String[] args) throws IOException {
    Doc2HtmlUtil coc2HtmlUtil = getDoc2HtmlUtilInstance();
    File file = null;
    FileInputStream fileInputStream = null;

    file = new File("D:/poi-test/exportExcel.xls");
    fileInputStream = new FileInputStream(file);
//   coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/xls","xls");
    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/xls","xls");

    file = new File("D:/poi-test/test.doc");
    fileInputStream = new FileInputStream(file);
//   coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/doc","doc");
    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/doc","doc");

    file = new File("D:/poi-test/周报模版.ppt");
    fileInputStream = new FileInputStream(file);
//   coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");
    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");

    file = new File("D:/poi-test/test.docx");
    fileInputStream = new FileInputStream(file);
//   coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/docx","docx");
    coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/docx","docx");

  }

}

转换成html和转换成pdf的过程几乎一样,只是在创建输出的File时前者命名为XXX.html,后者命名为XXX.pdf,在执行converter.convert(docInputFile, htmlOutputFile);时,jodconverter会自己根据文件类型名转换成对应的文件。

注意,main方法里别file2Html和file2pdf都调用,会报错的,要么转html,要么转pdf,只能选一个。还有就是在执行之前,需要启动openOffice的服务:在openOffice目录下的命令窗口中执行soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard即可启动。

以上需要引入jodconverter的jar包。希望对大家的学习有所帮助,也希望大家多多支持帮客之家。

简介 之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做...

1. 需要用的软件

OpenOffice , JodConverter

2.启动OpenOffice的服务

我到网上查如何利用OpenOffice进行转码的时候,都是需要先用cmd启动一个soffice服务,启动的命令是:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"。

但是实际上,对于我的项目,进行转码只是偶尔进行,然而当OpenOffice的转码服务启动以后,该进程(进程名称是soffice.exe)会一直存在,并且大约占100M的内存,感觉非常浪费。于是我就想了一个办法,可以将执行该服务的命令直接在Java代码里面调用,然后当转码完成的时候,直接干掉这个进程。在后面的JAVA代码里面会有解释。

所以,实际上,这第2步可以直接跳过

3.将JodConverter相关的jar包添加到项目中

将JodConverter解压缩以后,把lib下面的jar包全部添加到项目中

注意:安装openoffice

4. 下面就是重点喽,详见Java代码解析

package cn;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/** 
 * office转化为pdf 
 * pdf转化为swf文件 
 * @author Administrator 
 * 
 */
public class Converter {
 private static String openOfficePath = "E:\安装软件\openoffice\date";
 //openoffice软件的安装路径 
 /** 
   * 将Office文档转换为PDF. 运行该函数需要用到OpenOffice和jodconverter-2.2.2 
   * <pre> 
   * 方法示例: 
   * String sourcePath = "F:\office\source.doc"; 
   * String destFile = "F:\pdf\dest.pdf"; 
   * Converter.office2PDF(sourcePath, destFile); 
   * </pre> 
   *  
   * @param sourceFile 
   *      源文件, 绝对路径. 可以是Office2003-2007全部格式的文档, Office2010的没测试. 包括.doc, 
   *      .docx, .xls, .xlsx, .ppt, .pptx等. 示例: F:\office\source.doc 
   * @param destFile 
   *      目标文件. 绝对路径. 示例: F:\pdf\dest.pdf 
   * @return 操作成功与否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置错误; 如果返回 0, 
   *     则表示操作成功; 返回1, 则表示转换失败 
   */
 public static int office2PDF(String sourceFile, String destFile) {
  try {
   File inputFile = new File(sourceFile);
   if (!inputFile.exists()) {
    return -1;
    // 找不到源文件, 则返回-1
   }
   // 如果目标路径不存在, 则新建该路径  
   File outputFile = new File(destFile);
   if (!outputFile.getParentFile().exists()) {
    outputFile.getParentFile().mkdirs();
   }
   String OpenOffice_HOME = openOfficePath;
   //这里是OpenOffice的安装目录  
   // 如果从文件中读取的URL地址最后一个字符不是 '',则添加''  
   if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\') {
    OpenOffice_HOME  = "\";
   }
   // 启动OpenOffice的服务  
   String command = OpenOffice_HOME  
               "program\soffice.exe -headless -accept="socket,host=127.0.0.1,port=8100;
   urp;
   "";
   Process pro = Runtime.getRuntime().exec(command);
   // connect to an OpenOffice.org instance running on port 8100  
   OpenOfficeConnection connection = new SocketOpenOfficeConnection(  
             "127.0.0.1", 8100);
   connection.connect();
   // convert  
   DocumentConverter converter = new OpenOfficeDocumentConverter(  
             connection);
   converter.convert(inputFile, outputFile);
   // close the connection  
   connection.disconnect();
   // 关闭OpenOffice服务的进程  
   pro.destroy();
   return 0;
  }
  catch (FileNotFoundException e) {
   e.printStackTrace();
   return -1;
  }
  catch (IOException e) {
   e.printStackTrace();
  }
  return 1;
 }
 public static void main(String []args) throws Exception {
  String sourcePath = "C:\Users\Administrator\Desktop\1\分组情况一览表.xls";
  String destFile = "C:\Users\Administrator\Desktop\1\dest.pdf";
  int flag = Converter.office2PDF(sourcePath, destFile);
  if (flag == 1) {
   System.out.println("转化失败");
  } else if(flag == 0){
   System.out.println("转化成功");
  } else {
   System.out.println("找不到源文件, 或url.properties配置错误");
  }
 }
}

启动命令

总结

以上就是本文关于Java利用openoffice将doc、docx转为pdf实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

本文研究的主要是Java编程利用openoffice将doc、docx转为pdf的实现代码,具体如下。 1....

sh /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

4887王中王鉄算盘奖结果 1

C:Program Files (x86)OpenOffice 4program>soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

4887王中王鉄算盘奖结果 2

  linux kill 进程

4887王中王鉄算盘奖结果 3

查看8100端口号运行的程序

4887王中王鉄算盘奖结果 4

查看openoffice运行的情况

4887王中王鉄算盘奖结果 5

kill掉2310进程id的程序

Java中将word生成缩略图  

Java jacob 将Word 生成PDF文件

实例——使用PDFRenderer将pdf转化成图片

Java利用OpenOffice将word等office文档转换成PDF(附件在最后)

java/poi读取word,并替换word中的文本内容,向word中插入图片的操作

[简单]poi导出简单word2007带页眉页脚

java itext生成word

[简单]poi操作word 2007 常用方法总结

[简单] poi word2007简单图文混排

OpenOffice实现Office转Pdf支持自定义添加水印、页眉、页脚

OpenOffice实现Office转Pdf(支持自定义添加水印、页眉、页脚)

linux下word模板操作及PDF处理笔记

关于POI提取word中文本,除掉页眉页脚

使用POI读写Word doc文件

java对文档等、附件在线预览的详细开发步骤解析:openOffice SwfTools FlexPaper

借用OpenOffice将上传的Word文档转换成Html格式

jodconverter

doc/jpg等文件在线浏览解决方案搭建

Ubuntu Server(64位)安装Openoffice4,SWFTools完成

Linux openoffice 安装测试

CentOS 6.6下安装OpenOffice4.0

文件转换工具office to swf

openOffice conversion failed: could not load input document

openOffice pdf2swf类百度文库):pdf转swf(Linux,window)

[JODConverter]word转pdf心得分享(转)

阿里云安装OpenOffice转换pdf文档乱码解决方式

仿百度文库解决方案(二)——利用Jacob调用MS Office转换文档为PDF

Java跨平台将word转为pdf(结合Jodconverter 和OpenOffice.org)

利用jodconverter(基于OpenOffice服务)将word文件(*.doc)转化为html格式

CentOS6.6安装OpenOffice4.0

http://www.dianju.cn/demos/demos

对点聚weboffice插件的使用说明

Java操作PDF之iText超入门

OpenDocument文档转换器 JODConverter

对象存储 OSS>SDK手册>Java-SDK

Poi之Word文档结构介绍

java生成word文档【一】

Apache POI使用详解

Java使用iText生成word文件的完美解决方案(亲测可行)

利用IText导出Word

itext写word并实现下载

iText生成word代码及jar包(含页眉页脚)

IText导出word之页眉页脚页码

使用Aspose.words for java去掉Word文档的水印(底图)

用JAVA移除Word文档的底图(水印)

POI 替换word2003 页眉页脚中的内容

Java使用iText生成word文 表格、图片、表格里插图片、页眉、页脚、图片页脚、这一次更全面

POI用addPicture插入图片到word里面无法显示

利用POI操作不同版本word文档中的图片以及创建word文档,poi不同版本

如何把图片放入到页面的合适位置

使用POI如何把图片插入到Word文件的第一行。。。

如何在已经有内容的word里面通过java程序加入页眉页脚

4887王中王鉄算盘奖结果 6

。。

本文由4887王中王鉄算盘奖结果发布于王中王鉄算盘,转载请注明出处:jpg等公事在线浏览消除方案搭建,docx转为pdf实例

关键词:

最火资讯