openoffice4.1.2把ppt、pptx文件转pdf文件有些东西转不了

发布于 2022-01-05 06:44:39 字数 4955 浏览 784 评论 1

    做一个在线预览的功能,把ppt、pptx文件转成pdf,但是发现ppt文件中的一些形状、图表、还有office的一些模板中的东西无法完美的转换。

public class OpenOffice2PDF {

	/**
     * office中各种格式
     */
    private static final String[] OFFICE_POSTFIXS = { "doc", "docx", "xls",
            "xlsx", "ppt", "pptx" };
    private ArrayList<String> Office_Formats = new ArrayList<String>();

    /**
     * pdf格式
     */
    private static final String PDF_POSTFIX= "pdf";
    
    /**
     * 根据操作系统的名称,获取OpenOffice.org 3的安装目录 如我的OpenOffice.org 3安装在:C:/Program
     * Files/OpenOffice.org 3
     */
    
    public String getOfficeHome() {
        String osName = System.getProperty("os.name");
        if (Pattern.matches("Linux.*", osName)) {
            return "/opt/openoffice.org3";
        } else if (Pattern.matches("Windows.*", osName)) {
            return "C:/Program Files (x86)/OpenOffice 4";
        }
        return null;
    }
    /**
     * 转换文件
     * @param inputFilePath
     * @param outputFilePath
     * @param converter
     */
    public void converterFile(String inputFilePath, String outputFilePath,
            OfficeDocumentConverter converter) {
        File inputFile=new File(inputFilePath);
        File outputFile = new File(outputFilePath);
        // 假如目标路径不存在,则新建该路径
        if (!outputFile.getParentFile().exists()) {
            outputFile.getParentFile().mkdirs();
        }
        converter.convert(inputFile, outputFile);
        System.out.println("文件:" + inputFilePath + "n转换为n目标文件:" + outputFile
                + "n成功!");
    }

    /**
     * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
     * 
     * @param inputFilePath
     *            源文件路径,如:"e:/test.docx"
     * @param outputFilePath
     *            如果指定则按照指定方法,如果未指定(null)则按照源文件路径自动生成目标文件路径,如:"e:/test_docx.pdf"
     * @return
     */
    public boolean openOffice2Pdf(String inputFilePath, String outputFilePath) {
        boolean flag = false;
        /*
         * 连接OpenOffice.org 并且启动OpenOffice.org
         */
        DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
        // 获取OpenOffice.org 3的安装目录
        String officeHome = getOfficeHome();
        config.setOfficeHome(officeHome);
        // 启动OpenOffice的服务
        OfficeManager officeManager = config.buildOfficeManager();
        officeManager.start();
        // 连接OpenOffice
        OfficeDocumentConverter converter = new OfficeDocumentConverter(
                officeManager);
        long begin_time = new Date().getTime();
        File inputFile=new File(inputFilePath);
        Collections.addAll(Office_Formats, OFFICE_POSTFIXS);
        if ((null != inputFilePath) && (inputFile.exists())) {
            // 判断目标文件路径是否为空
            if (Office_Formats.contains(getPostfix(inputFilePath))) {
                if (null == outputFilePath) {
                    // 转换后的文件路径
                    String outputFilePath_new = generateDefaultOutputFilePath(inputFilePath);
                    converterFile(inputFilePath, outputFilePath_new, converter);
                    flag = true;

                } else {
                    converterFile(inputFilePath, outputFilePath, converter);
                    flag = true;
                }
            }

        } else {
            System.out.println("con't find the resource");
        }
        long end_time = new Date().getTime();
        System.out.println("文件转换耗时:[" + (end_time - begin_time) + "]ms");
        officeManager.stop();
        return flag;
    }

    /**
     * 如果未设置输出文件路径则按照源文件路径和文件名生成输出文件地址。例,输入为 D:/fee.xlsx 则输出为D:/fee_xlsx.pdf
     */
    public String generateDefaultOutputFilePath(String inputFilePath) {
        String outputFilePath = inputFilePath.replaceAll("."
                + getPostfix(inputFilePath), "_" + getPostfix(inputFilePath)
                + ".pdf");
        return outputFilePath;
    }

    /**
     * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"
     */
    public String getPostfix(String inputFilePath) {
        String[] p = inputFilePath.split("\.");
        if (p.length > 0) {// 判断文件有无扩展名
            // 比较文件扩展名
            return p[p.length - 1];
        } else {
            return null;
        }
    }
    
    public static void main(String[] args) {

        OpenOffice2PDF office2pdf = new OpenOffice2PDF();
        office2pdf.openOffice2Pdf("e:/yx1.pptx",
                "D:/pdf/" + new Date().getTime() + "."
                        + PDF_POSTFIX);
//        office2pdf.openOffice2Pdf("D:/函件自定义调用字段_20130220_GC.xls",null);
    }


}

转换前:



转换后:

求大神们帮帮忙,我感激不尽!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉酒的小男人 2022-01-07 07:44:02

字体库中缺少中文字体

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文