首页 > 解决方案 > DOCX Apache POI - 内部带有文本的形状/图像/艺术字未转换为 PDF

问题描述

我使用了以下代码:

    package com.allianz.re.gim.service.util;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;

    import org.apache.poi.xwpf.usermodel.XWPFDocument;

    import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
    import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;

    public class PDF {
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            String inputFile = "C:/TEMP/question.docx";
            String outputFile = "C:/TEMP/question.pdf";
            if ((args != null) && (args.length == 2)) {
                inputFile = args[0];
                outputFile = args[1];
            }
            System.out.println("inputFile:" + inputFile + ",outputFile:" + outputFile);
            FileInputStream in = new FileInputStream(inputFile);
            XWPFDocument document = new XWPFDocument(in);
            File outFile = new File(outputFile);
            OutputStream out = new FileOutputStream(outFile);
            PdfOptions options = null;
            PdfConverter.getInstance().convert(document, out, options);
        }
    }

使用的依赖:

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>fr.opensagres.poi.xwpf.converter.pdf</artifactId>
        <version>2.0.1</version>
    </dependency>

输入:

下面的 docx 在文本上放置了一个矩形,矩形的布局选项在“文本后面”,您可以从图像中看到它

输入文档

pdf输出,我只有文字。矩形形状不存在。放置在文本后面的图像或放置在图像上的文字艺术也会发生同样的情况:

PFD 输出

在使用这些依赖项和代码片段时,我能够
1.convert 使用相同字体的 docx 中的图像。
2.将简单的文本转换为 docx 相同的字体。

但有几个缺点是:
1. 无法转换图像,文本后面的布局选项(在图像顶部显示文本)无法正常工作。仅在 PDF 中转换文本。
2.同样的问题发生在艺术字或里面有一些文字的形状上。只有测试被转换。

有人能帮我吗?

标签: pdfapache-poidocxpdf-conversionxwpf

解决方案


推荐阅读