当前位置:威尼斯 > jave > 而安装 core01 时提示需要先安装,无需下载到本地

而安装 core01 时提示需要先安装,无需下载到本地

文章作者:jave 上传时间:2019-09-29

最近在电子合同等项目中需要把word或者pdf转换成image,用到了openOffice把word转换pdf,以及把pdf转换成图片

一直一来,我在 RHEL/4 i386 AS 上使用的 OpenOffice 是系统自带的 1.0.0 的版本,用来办公也还方便,前不久更新系统到 RHEL/5 Server 版本,忽然发现原来的 OpenOffice 没有了,日常使用起来很不方便,没有办法,只好手工安装了,不过一阵努力后却以失败而告终。在安装过程中依次出现要先安装 core01 ~ core08 的警告,而安装 core01 时提示需要先安装 core08,回头先安装 core08 时,却又提示 core01 必须先安装,似乎进入了一个太极循环。难道 OpenOffice 真的就不能再使用了么?我不甘心。几经周折,OpenOffice 终于安装成功。以下是我的安装过程,希望与我一样,费尽周折而无法安装的朋友能顺利使用上 OpenOffice 办公套件。

背景

  之前一直是用户点击下载word文件到本地,然后使用office或者wps打开。需求优化,要实现可以直接在线预览,无需下载到本地然后再打开。

  随后开始上网找资料,网上资料一大堆,方案也各有不同,大概有这么几种方案:

  1.word转html然后转pdf

  2.Openoffice + swftools + Flexmapper + jodconverter

  3.kkFileView

  分析之后最后决定使用Openoffice+PDF.js方式实现

感谢小伙伴张国清花费了三天时间来实现了此功能。下面我将把具体的步骤和注意事项说明。防止重复造轮子,最后我会把我的demo工程,以及对应的jar等发送到百度云。提供各位下载

step 1:)展开你的安装包。OOo_2.2.1_LinuxIntel_install_wJRE_zh-cn.tar.gz
# tar zxvf OOo_2.2.1_LinuxIntel_install_wJRE_zh-cn.tar.gz
资料来源:请从互联网上搜索下载最新版本,或从本光盘上直接下载 OOo_2.2.1_LinuxIntel_install_wJRE_zh-cn.tar.gz
注意事项:无

环境搭建

  1.安装Openoffice,下载地址:

  安装完成之后,cmd进入安装目录执行命令:soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard

  图片 1

  2.PDF.js,下载地址:

  下载之后解压,目录结构如下:

  图片 2

  图片 3

  图片 4

一、首先,列出maven依赖以及jar包

  <!--PDF转图片-->        <dependency>            <groupId>org.icepdf.os</groupId>            <artifactId>icepdf-core</artifactId>            <version>6.2.2</version>            <exclusions>                <exclusion>                    <groupId>javax.media</groupId>                    <artifactId>jai_core</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.icepdf.os</groupId>            <artifactId>icepdf-viewer</artifactId>            <version>6.2.2</version>        </dependency>        <!--word转pdf-->        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>jurt</artifactId>            <version>3.0.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>ridl</artifactId>            <version>3.0.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>juh</artifactId>            <version>3.0.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>unoil</artifactId>            <version>3.0.1</version>        </dependency>        <!--需要手动添加到本地仓库 word 转 pdf-->        <dependency>            <groupId>org.artofsolving.jodconverter</groupId>            <artifactId>jodconverter-core</artifactId>            <version>3.0-beta-4</version>        </dependency>

  这里注意:你还一个需要把一个jar的文件夹(文章最下边有相应的百度云下载地址)你找到自己的maven仓库把对应的jar手动放入到 【repository/org/】目录下,在idea右边导入后会有有红色波浪线警告。整个可忽略,不影响使用

  下图是对应怎么找到自己的maven repository路径

  图片 5

step 2:)安装 Java-runtime 支持包。 jre-6-linux-i586.rpm
# cd OOFOOF680_m18_native_packed-1_zh-CN.9161/RPMS

代码实现

  编码方面,分前端后:

  后端:java后端使用openoffice把word文档转换成pdf文件,返回流

  前端:把PDF.js解压后的文件加到项目中,修改对应路径,PDF.js拿到后端返回的流直接展示

 二、这里贴出详细的代码和配置,注意如果有的地方不正确或者不理解,欢迎评论或者在文章末尾下载我的demo工程来实际运行。以进一步详细熟悉

   word转换pdf工具类

import org.apache.commons.lang3.StringUtils;import org.artofsolving.jodconverter.OfficeDocumentConverter;import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;import org.artofsolving.jodconverter.office.OfficeManager;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import java.io.File;import java.util.List;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import java.util.regex.Pattern;/** * FileName: OfficeToPdfUtil * author:   zhangguoqing * Date:     2018/9/19 9:18 * 说明:  word文件转换成pdf文件(必须安装Openoffice) */@Componentpublic class OfficeToPdfUtil {        static OfficeManager officeManager;    private static ReentrantLock OfficeLock = new ReentrantLock();    @PostConstruct    public void init() {        DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();        // 设置OpenOffice.org 3的安装目录        config.setOfficeHome(getOfficeHome;        // 启动OpenOffice的服务        OfficeManager getOfficeManager = config.buildOfficeManager();        if (getOfficeManager == null) {            getOfficeManager.start();        }        officeManager = getOfficeManager;    }    private static Logger logger = LoggerFactory.getLogger(OfficeToPdfUtil.class);    /**     * 锁     */    private static Lock lock = new ReentrantLock();    /**     * windows下openoffice安装地址     */    private static String windowsOpenOfficeUrl;    /**     * linux下openoffice安装地址     */    private static String linuxOpenOfficeUrl;    /**     * mac下opneoffice安装地址     */    private static String macOpenofficeUrl = "/Applications/OpenOffice.org.app/Contents/";    /**     * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件<br>     *     * @param inputFilePath 源文件路径,如:"e:/test.docx"     * @return 转换后的图片地址     */    public static String officeToPdf(String inputFilePath) throws Exception {        try {            if (officeManager == null) {                //如果openOffice中途关闭了 再次启动 防止报错                officeManager = getOfficeManager();            }            if (StringUtils.isEmpty(inputFilePath)) {                logger.info("输入文件地址为空,转换终止!");                return null;            }            File inputFile = new File(inputFilePath);            // 转换后的pdf文件路径            String outputFilePath_end = getOutputFilePath(inputFilePath);            if (!inputFile.exists {                logger.info("输入文件不存在,转换终止!");                return null;            }            // 连接OpenOffice            OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);            return converterFile(inputFile, outputFilePath_end, inputFilePath, converter);        } catch (Exception e) {            logger.error("word转化pdf出错!", e);            throw e;        }    }    /**     * @author: zhangguoqing     * @date: 2018/9/19 14:03     * @param: [inputFilePath] word源文件路径 如:"e:/test.docx"     * @return: java.util.List<java.lang.String> 转换后图片地址列表     * @Description: word转成图片     */    public static List<String> officeToImg(String inputFilePath) {        try {            //word转成pdf            String pdfFilePath = officeToPdf(inputFilePath);            //pdf转图片            List<String> iamgeFilePath = PdfToImageUtil.pdfToIamge(pdfFilePath);            for (String string : iamgeFilePath) {                logger.info("图片地址:" + string);            }            //删除pdf文件            new File(pdfFilePath).delete();            return iamgeFilePath;        } catch (Exception e) {            logger.error("word转化图片出错!", e);            return null;        }    }    /**     * 获取输出文件     *     * @param inputFilePath     * @return     */    public static String getOutputFilePath(String inputFilePath) {        String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf");        return outputFilePath;    }    /**     * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br>     *     * @param inputFilePath     * @return     */    public static String getPostfix(String inputFilePath) {        return inputFilePath.substring(inputFilePath.lastIndexOf + 1);    }    /**     * 连接OpenOffice.org 并且启动OpenOffice.org     *     * @return     */    public static OfficeManager getOfficeManager() {        DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();        // 设置OpenOffice.org 3的安装目录        config.setOfficeHome(getOfficeHome;        // 启动OpenOffice的服务        OfficeManager getOfficeManager = config.buildOfficeManager();        getOfficeManager.start();        return getOfficeManager;    }    /**     * 根据操作系统的名称,获取OpenOffice.org 3的安装目录<br>     * 如我的OpenOffice.org 3安装在:C:/Program Files /OpenOffice.org 3<br>     *     * @return OpenOffice.org 3的安装目录     */    public static String getOfficeHome() {        String osName = System.getProperty("os.name");        logger.info("操作系统名称:" + osName);        if (Pattern.matches("Linux.*", osName)) {            return linuxOpenOfficeUrl;        } else if (Pattern.matches("Windows.*", osName)) {            return windowsOpenOfficeUrl;        } else if (Pattern.matches("Mac.*", osName)) {            return macOpenofficeUrl;        }        return null;    }    /**     * @author: zhangguoqing     * @date: 2018/9/19 11:35     * @param: [inputFile, outputFilePath_end, inputFilePath, converter]     * @return: java.util.List<java.lang.String> 转换后的图片地址列表     * @Description: 文件转换     */    public static String converterFile(File inputFile, String outputFilePath_end, String inputFilePath,                                       OfficeDocumentConverter converter) throws Exception {        File outputFile = new File(outputFilePath_end);        // 假如目标路径不存在,则新建该路径        if (!outputFile.getParentFile().exists {            outputFile.getParentFile().mkdirs();        }        //判断转换文件的编码方式,如果不是UTF-8,则改为UTF-8编码        converter.convert(inputFile, outputFile);        logger.info("文件:" + inputFilePath + "n转换为n目标文件:" + outputFile + "n成功!");        if (outputFile.isFile() && outputFile.exists {            return outputFilePath_end;        } else {            throw new Exception("转换的目标文件不存在 路径" + outputFilePath_end);        }    }    @Value("${officeToPdf.linuxOpenOfficeUrl}")    public void setLinuxOpenOfficeUrl(String linuxOpenOfficeUrl) {        OfficeToPdfUtil.linuxOpenOfficeUrl = linuxOpenOfficeUrl;    }    @Value("${officeToPdf.windowsOpenOfficeUrl}")    public void setWindowsOpenOfficeUrl(String windowsOpenOfficeUrl) {        OfficeToPdfUtil.windowsOpenOfficeUrl = windowsOpenOfficeUrl;    }}

  pdf转换image工具类

import org.apache.commons.lang3.StringUtils;import org.icepdf.core.pobjects.Document;import org.icepdf.core.pobjects.Page;import org.icepdf.core.util.GraphicsRenderingHints;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.awt.image.RenderedImage;import java.io.File;import java.util.ArrayList;import java.util.List;/** * FileName: PdfToImageUtil * Author:   zhangguoqing * Date:     2018/9/18 17:53 * 说明:  PDF转图片 */@Componentpublic class PdfToImageUtil {    static Logger logger = LoggerFactory.getLogger(PdfToImageUtil.class);    // 水印透明度    private static float alpha = 0.2f;    // 水印横向位置    private static int positionWidth = 150;    // 水印纵向位置    private static int positionHeight = 300;    // 水印文字字体    private static Font font = new Font("仿宋", Font.BOLD, 26);    // 水印文字颜色    private static Color color = Color.GRAY;    // 水印文字    private static String watermark;    //图片宽度    private static Integer width;    //图片高度    private static Integer height;    //图片格式    private static String imgType;    public PdfToImageUtil() {    }    /**     * 有参构造,传参水印文字,生成图片时根据是否传参选择是否生成水印     *     * @param watermark 水印内容     */    public PdfToImageUtil(String watermark) {        this.watermark = watermark;    }    //设置水印    public static BufferedImage setGraphics(BufferedImage bfimage) {        Graphics2D g = bfimage.createGraphics();        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);        // 5、设置水印文字颜色        g.setColor;        // 6、设置水印文字Font        g.setFont;        // 7、设置水印文字透明度        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));        //设置旋转        g.rotate(-Math.PI / 6);        g.drawString(watermark, 0, (bfimage.getHeight * 1);        // 9、释放资源        g.dispose();        return bfimage;    }    /**     * @author: zhangguoqing     * @date: 2018/9/18 17:55     * @param: [inputFile] pdf文件路径     * @return: java.util.List<java.lang.String> 图片地址列表     * @Description: pdf文件转图片     */    public static List<String> pdfToIamge(String inputFile) {        //获取inputFile的后缀名前的内容,如:"e:/test.pptx"的后缀名为:"e:/test"        String imgPath_start = inputFile.substring(0, inputFile.lastIndexOf("."));        List<String> list=null;        Document document = null;        try {            document = new Document();            document.setFile(inputFile);            float rotation = 0; //旋转角度            int maxPages = document.getPageTree().getNumberOfPages();            new ArrayList;            for (int i = 0; i < maxPages; i++) {                //zoom 缩放比例 ,记住这里调清晰度,我用的是8.5超清晰,9以上就报错了                BufferedImage bfimage = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, 2.1f);                //设置图片的宽和高                Image tempImage = bfimage.getScaledInstance(width, height, Image.SCALE_SMOOTH);                BufferedImage biTemp = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);                Graphics gTemp = biTemp.getGraphics();                gTemp.drawImage(tempImage, 0, 0, null);                //加水印                if (StringUtils.isNotBlank(watermark)) {                    biTemp = setGraphics;                }                RenderedImage rendImage = biTemp;                //拼接图片地址                String imgPath = imgPath_start + "_" + i + "." + imgType;                ImageIO.write(rendImage, imgType, new File;                bfimage.flush();                list.add;            }        } catch (Exception e) {            logger.error("pdf转化图片出错!", e);        }        if (document != null) {            document.dispose();        }        return list;    }    @Value("${pdfToImg.imgWidth}")    public void setWidth(Integer width) {        PdfToImageUtil.width = width;    }    @Value("${pdfToImg.imgHeight}")    public void setHeight(Integer height) {        PdfToImageUtil.height = height;    }    @Value("${pdfToImg.imgType}")    public void setImgType(String imgType) {        PdfToImageUtil.imgType = imgType;    }}

  spring boot yml配置文件

#word转pdfofficeToPdf:  #linux下openoffice安装地址  linuxOpenofficeUrl: /opt/openoffice4  #windows下openoffice安装地址 默认 请不要改变 (安装在哪个盘符都是这样)  windowsOpenofficeUrl: C:Program Files OpenOffice 4#pdf转图片pdfToImg:  #图片宽度  imgWidth: 1080  #图片高度  imgHeight: 1920  #图片格式  imgType: png

# rpm -ivh jre-6-linux-i586.rpm

后端

  项目使用springboot,pom文件添加依赖

<!-- openoffice word转pdf -->        <dependency>            <groupId>com.artofsolving</groupId>            <artifactId>jodconverter</artifactId>            <version>2.2.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>jurt</artifactId>            <version>3.0.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>ridl</artifactId>            <version>3.0.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>juh</artifactId>            <version>3.0.1</version>        </dependency>        <dependency>            <groupId>org.openoffice</groupId>            <artifactId>unoil</artifactId>            <version>3.0.1</version>        </dependency>

  application.properties配置openoffice服务地址与端口

openoffice.host=127.0.0.1openoffice.port=8100

  doc文件转pdf文件

import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.net.ConnectException;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.xxx.utils.Doc2PdfUtil;@Controller@RequestMapping("/doc2PdfController")public class Doc2PdfController {    @Value("${openoffice.host}")    private String OpenOfficeHost;    @Value("${openoffice.port}")    private Integer OpenOfficePort;        private Logger logger = LoggerFactory.getLogger(Doc2PdfController.class);        @RequestMapping("/doc2pdf")    public void doc2pdf(String fileName,HttpServletResponse response){        File pdfFile = null;        OutputStream outputStream = null;        BufferedInputStream bufferedInputStream = null;                Doc2PdfUtil doc2PdfUtil = new Doc2PdfUtil(OpenOfficeHost, OpenOfficePort);                try {            //doc转pdf,返回pdf文件            pdfFile = doc2PdfUtil.doc2Pdf;            outputStream = response.getOutputStream();            response.setContentType("application/pdf;charset=UTF-8");              bufferedInputStream = new BufferedInputStream(new FileInputStream;              byte buffBytes[] = new byte[1024];              outputStream = response.getOutputStream();              int read = 0;                while ((read = bufferedInputStream.read(buffBytes)) != -1) {                    outputStream.write(buffBytes, 0, read);                }        } catch (ConnectException e) {            logger.info("****调用Doc2PdfUtil doc转pdf失败****");            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }  finally {            if(outputStream != null){                try {                    outputStream.flush();                    outputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }                }            if(bufferedInputStream != null){                try {                    bufferedInputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

import java.io.File;import java.net.ConnectException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;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.StreamOpenOfficeDocumentConverter;public class Doc2PdfUtil {    private String OpenOfficeHost; //openOffice服务地址    private Integer OpenOfficePort; //openOffice服务端口        public Doc2PdfUtil(){    }    public Doc2PdfUtil(String OpenOfficeHost, Integer OpenOfficePort){        this.OpenOfficeHost = OpenOfficeHost;        this.OpenOfficePort = OpenOfficePort;    }        private Logger logger = LoggerFactory.getLogger(Doc2PdfUtil.class);        /**     * doc转pdf     * @return pdf文件路径     * @throws ConnectException     */    public File doc2Pdf(String fileName) throws ConnectException{        File docFile = new File(fileName + ".doc");        File pdfFile = new File(fileName + ".pdf");        if (docFile.exists {            if (!pdfFile.exists {                OpenOfficeConnection connection = new SocketOpenOfficeConnection(OpenOfficeHost, OpenOfficePort);                try {                    connection.connect();                    DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);                    //最核心的操作,doc转pdf                    converter.convert(docFile, pdfFile);                    connection.disconnect();                    logger.info("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");                } catch (java.net.ConnectException e) {                    logger.info("****pdf转换异常,openoffice服务未启动!****");                    e.printStackTrace();                    throw e;                } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {                    System.out.println("****pdf转换器异常,读取转换文件失败****");                    e.printStackTrace();                    throw e;                } catch (Exception e) {                    e.printStackTrace();                    throw e;                }            }        } else {            logger.info("****pdf转换异常,需要转换的doc文档不存在,无法转换****");        }        return pdfFile;    }}

三、最后说明一下oppenOffice安装时候的注意事项

  windows下oppenOffice在安装时候一路确定就可以,

  在linux我在自己的阿里云Centos7.4上安装l选择 【download full installation】,具体步骤如下:

  1、首先linux上安装需要把下面的安装包下载

  2、然后解压运行命令解压文件:tar -xzvfApache_OpenOffice_4.1.5_Linux_x86-64_install-rpm_zh-CN.tar.gz

  3、然后运行安装命令:cd zh-CN/RPMS/ rpm -ivh .rpm*

  图片 6

 四、最后提供大家下载对应的工程demo和对应的jar包,以及oppenoffice下载的安装包

  链接: 密码:ttp4

  再次注意:maven jar 对应直接解压放入到org目录下,然后刷新maven依赖或者重启ide

  

  最后请大家转文章时不要复制粘贴一部分导致别人看不懂。如果我写的哪里有不懂了直接评论刷一下,看到我会及时回复的。

注意事项:无

前端

  图片 7

  把pdfjs-2.0.943-dist下的两个文件夹build、web整体加到项目中,然后把viewer.html改成viewer.jsp,并调整了位置,去掉了默认的pdf文件compressed.tracemonkey-pldi-09.pdf,将来使用我们生成的文件

  viewer.jsp、viewer.js注意点:

  1.引用的js、css路径要修改过来

  2.viewer.jsp中调用pdf/web/viewer.js,viewer.js中配置了默认的pdf文件路径,我们要动态生成pdf,因此需要修改,在jsp中定义一个参数DEFAULT_URL,然后在js中使用它

  3.jsp中写了一个ajax获取pdf流,之后赋值给DEFAULT_URL,然后再让viewer.js去加载,因此需要把/pdf/web/viewer.js放到ajax方法后面

  4.viewer.js中把compressed.tracemonkey-pldi-09.pdf改成我们定义的变量DEFAULT_URL;pdf.worker.js的路径修改成对应路径

图片 8

图片 9

图片 10

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE html><!--Copyright 2012 Mozilla FoundationLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at    http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.Adobe CMap resources are covered by their own copyright but the same license:    Copyright 1990-2015 Adobe Systems Incorporated.See https://github.com/adobe-type-tools/cmap-resources--><html dir="ltr" mozdisallowselectionprint>  <head>    <meta charset="utf-8">    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">    <meta name="google" content="notranslate">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <c:set var="qtpath" value="${pageContext.request.contextPath}"/>    <script>        var qtpath = '${qtpath}';        var fileName = '${fileName}';    </script>        <title>PDF.js viewer</title>    <link rel="stylesheet" href="${qtpath}/res/pdf/web/viewer.css"><!-- This snippet is used in production (included from viewer.html) --><link rel="resource" type="application/l10n" href="${qtpath}/res/pdf/web/locale/locale.properties"><script type="text/javascript" src="${qtpath}/res/js/jquery/jquery-2.1.4.min.js"></script><script type="text/javascript">    var DEFAULT_URL = "";//注意,删除的变量在这里重新定义      var PDFData = "";      $.ajax({          type:"post",          async:false,  //        mimeType: 'text/plain; charset=x-user-defined',          url:'${qtpath}/doc2PdfController/doc2pdf',        data:{'fileName':fileName},        success:function{             PDFData = data;          }      });      var rawLength = PDFData.length;      //转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068      var array = new Uint8Array(new ArrayBuffer(rawLength));        for(i = 0; i < rawLength; i++) {        array[i] = PDFData.charCodeAt & 0xff;      }      DEFAULT_URL = array;</script><script type="text/javascript" src="${qtpath}/res/pdf/build/pdf.js"></script><script type="text/javascript" src="${qtpath}/res/pdf/web/viewer.js"></script>  </head>  ...

step 3:)安装所有 OpenOffice 组件
# rpm -ivh openoffice*.rpm

效果

图片 11

资料来源:
注意事项:应切记千万不可单个软件包安装,否则就一定会陷入太极循环的怪圈

分割线


  本以为完美的实现了doc在线预览,上测试环境后发现了一个大坑,我们的doc文件不是在本地office创建后上传的,是其他同事用freemarker ftl模板生成的,这种生成的doc文件根本不是微软标准的doc,本质是xml数据结构,openoffice拿这种文件去转换pdf文件直接就报错了

图片 12

  上网查资料查了半天也没找到这种问题的解决方案,想想只能是放弃openoffice改用其他方法了(freemarker ftl生成doc这个肯定是不能动的)

  看到一些博客使用word--html--pdf生成pdf,还有的使用freemarker ftl xml 生成pdf感觉还是太繁琐了,我只是想拿现有的doc(虽然是freemarker ftl生成的)转换成pdf啊

  继续看博客查资料,看到一种方法,使用aspose把doc转换成pdf,抱着试一试的心态在本地测试了下,没想到竟然成了,感觉太意外了,aspose方法超级简单,只要导入jar包,几行代码就可以搞定,并且转换速度比openoffice要快很多。很是奇怪,这么好用这么简单的工具为什么没在我一开始搜索word转pdf的时候就出现呢

step 4:)安装 OpenOffice 桌面控制台 desktop-integration
# cd desktop-integration
# rpm -ivh openoffice.org-redhat-menus-2.2-9153.noarch.rpm

aspose doc转pdf

  在maven仓库搜索aspose,然后把依赖加入pom.xml发现jar包下载不下来,没办法,最后在csdn下载aspose jar包,然后mvn deploy到仓库

  pom.xml

<!-- word转pdf maven仓库没有需要本地jar包发布到私服 -->        <dependency>            <groupId>com.aspose.words</groupId>            <artifactId>aspose-words-jdk16</artifactId>            <version>14.9.0</version>        </dependency>

  

import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.net.ConnectException;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.xxx.utils.Doc2PdfUtil;@Controller@RequestMapping("/doc2PdfController")public class Doc2PdfController {        private Logger logger = LoggerFactory.getLogger(Doc2PdfController.class);        @RequestMapping("/doc2pdf")    public void doc2pdf(String fileName,HttpServletResponse response){        File pdfFile = null;        OutputStream outputStream = null;        BufferedInputStream bufferedInputStream = null;        String docPath = fileName + ".doc";        String pdfPath = fileName + ".pdf";        try {            pdfFile = Doc2PdfUtil.doc2Pdf(docPath, pdfPath);            outputStream = response.getOutputStream();            response.setContentType("application/pdf;charset=UTF-8");              bufferedInputStream = new BufferedInputStream(new FileInputStream;              byte buffBytes[] = new byte[1024];              outputStream = response.getOutputStream();              int read = 0;                while ((read = bufferedInputStream.read(buffBytes)) != -1) {                    outputStream.write(buffBytes, 0, read);                }        } catch (ConnectException e) {            logger.info("****调用Doc2PdfUtil doc转pdf失败****");            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }  finally {            if(outputStream != null){                try {                    outputStream.flush();                    outputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }                }            if(bufferedInputStream != null){                try {                    bufferedInputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

  Doc2PdfUtil.java

import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileOutputStream;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.aspose.words.License;import com.aspose.words.SaveFormat;public class Doc2PdfUtil {        private static Logger logger = LoggerFactory.getLogger(Doc2PdfUtil.class);        /**     * doc转pdf     * @param docPath doc文件路径,包含.doc     * @param pdfPath pdf文件路径,包含.pdf     * @return     */    public static File doc2Pdf(String docPath, String pdfPath){        File pdfFile = new File;        try {            String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";            ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes;            License license = new License();            license.setLicense;            com.aspose.words.Document document = new com.aspose.words.Document;            document.save(new FileOutputStream,SaveFormat.PDF);        } catch (Exception e) {            logger.info("****aspose doc转pdf异常");            e.printStackTrace();        }        return pdfFile;    }}

  aspose-words-jdk16-14.9.0.jar下载地址

  

资料来源:

window下正常,linux下乱码的解决方案

  使用com.aspose.words将word模板转为PDF文件时,在开发平台window下转换没有问题,中文也不会出现乱码。但是将服务部署在正式服务器上,转换出来的PDF中文就出现了乱码。在网上找了很久,才找到原因,现将解决办法分享给大家。

注意事项:安装这个桌面配置环境的时候,应注意根据自己的系统选择合理的配置文件包。如:我的系统是 RHEL/5 ,所以我选择的软件包是 openoffice.org-redhat-menus-2.2-9153.noarch.rpm。

一、问题原因分析

在window下没有问题但是在linux下有问题,就说明不是代码或者输入输出流编码的问题,根本原因是两个平台环境的问题。出现乱码说明linux环境中没有相应的字体以供使用,所以就会导致乱码的出现。将转换无问题的windos主机中的字体拷贝到linux平台下进行安装,重启服务器后转换就不会出现乱码了。

 

二、window字体复制到linux环境并安装

按照教程安装完成后重启linux服务器即可搞定乱码问题。

 

1. From Windows

Windows下字体库的位置为C:Windowsfonts,这里面包含所有windows下可用的字体。

 

2. To Linux  

linux的字体库是 /usr/share/Fonts 。

在该目录下新建一个目录,比如目录名叫 windows(根据个人的喜好,自己理解就行,当然这里是有权限要求的,你可以用sudo来执行)。

然后将 windows 字体库中你要的字体文件复制到新建的目录下(只需要复制*.ttc,和*.ttf的文件).

复制所有字体:
sudo cp *.ttc /usr/share/fonts/windows/
sudo cp *.ttf /usr/share/fonts/windows/

更改这些字体库的权限:
sudo chmod 755 /usr/share/fonts/windows/*

然后进入Linux字体库:
cd /usr/share/fonts/windows/

接着根据当前目录下的字体建立scale文件
sudo mkfontscale

接着建立dir文件
sudo mkfontdir

然后运行
sudo fc-cache

重启 Linux操作系统就可以使用这些字体了。

linux下乱码问题解决方案转载自:

在RHEL5中安装Openoffice.org 3.0.0
2008年12月07日 星期日 16:19今天在RHEL5中安装了Openoffice.org 3.0.0,大费周折,到最后原来安装超简单,具体安装方法如下:
1、首先下载Openoffice.org 3.0.0,具体在哪下请在百度中搜,有很多!我下载的安装包名是:OOo_3.0.0_LinuxIntel_install_wJRE_zh-cn.tar.gz,下载到哪你自己定,我是自建了一个download目录,下载的软件都放在这里,找起来很方便。
2、打开终端,运行命令:tar zxvf OOo_3.0.0_LinuxIntel_install_而安装 core01 时提示需要先安装,无需下载到本地然后再打开。wJRE_zh-cn.tar.gz 回车解压缩,直接解压到download目录下即可,安装完了就可以删除安装程序了,安装包留着,省地方。
3、解压完后如何安装呢?我那些大费周章的安装过程就不说了,一点用没有,直接切入正题,进入解压后的目录 cd OOO300_m9_native_packed-1_zh-CN.9358 回车
接下来执行命令./setup 回车
再接下来自已看吧,和windows下安装软件一个样。有一点要注意,就是一定要安装在默认目录里,否则麻烦多多。
4、安装完后到应用程序菜单里的办公下去找。
还有一点需要大家尝试就是安装包里RPMS目录下有一个jre安装程序,要装Openoffice.org 3.0.0必须要先装他,我在终端下先安装了他,我的安装包是jre-6u7-linux-i586.rpm,然后才运行的./setup,我没有尝试不先安装他就运行./setup,请朋友们自行尝试,也许直接就安装了!

 

5,openoffice的安装
1、下载安装包。
OOo_3.2.0_LinuxIntel_install_zh-CN.tar.gz
#wget

# tar -zxvf OOo_3.2.0_LinuxIntel_install_zh-CN.tar.gz

解压后,会得到 OOO320_m12_native_packed-1_而安装 core01 时提示需要先安装,无需下载到本地然后再打开。zh-CN.9483目录。

2、(进入RPMS目录)安装OpenOffice的所有组件

# rpm -ivh openoffice*.rpm

3、(进入RPMS/desktop-integration目录)安装OpenOffice的桌面控制台desktop-integration

# cd desktop-integration

# rpm -ivh openoffice.org3.2-redhat-menus-3.2-9472.noarch.rpm

而安装 core01 时提示需要先安装,无需下载到本地然后再打开。注意:安装这个桌面配置环境的时候,应根据自己的系统选择合理的配置文件包。如:我的系统是CentOS5.5,所以我选择的软件包是 openoffice.org3.2-redhat-menus-3.2-9472.noarch.rpm.

作者 piaoliuxiong

RHEL/4 i386 AS 上使用的 OpenOffice 是系统自带的 1.0.0 的版本,用来办公也还方便,前不久更新系统到 RHEL/5 Server 版本,忽然发现...

本文由威尼斯发布于jave,转载请注明出处:而安装 core01 时提示需要先安装,无需下载到本地

关键词: