在不更改docx文件格式的情况下替换XWPFParagraph中的文本

问题描述

我正在开发字体转换器应用程序,它将把 Unicode 字体文本转换为 Krutidev / Shree Lipi (Marathi / hindi)字体文本。在原始docx文件中,包含格式化的单词(即颜色,字体,文本大小,超链接等)。 在将单词从Unicode转换为另一种字体后,我想使最终docx的格式与原始docx相同。

PFA。

Input docx

Current Output

这是我的代码

try {
    fileInputStream = new FileInputStream("StartDoc.docx");
    document = new XWPFDocument(fileInputStream);
    XWPFWordExtractor extractor = new XWPFWordExtractor(document);
    List<XWPFParagraph> paragraph = document.getParagraphs();
    Converter data = new Converter() ;
    for(XWPFParagraph p :document.getParagraphs())
    {           
        for(XWPFRun r :p.getRuns())
        {           
            String string2 = r.getText(0);
            data.uniToShree(string2);
            r.setText(string2,0);
        }
    }
    //Write the Document in file system

    FileOutputStream out = new FileOutputStream(new File("Output.docx");
    document.write(out);
    out.close();
    System.out.println("Output.docx written successully");

} 
catch (IOException e) {
    System.out.println("We had an error while reading the Word Doc");
}

解决方法

谢谢您的回答。 几年前,我曾使用POI,但在excel-books上却使用过POI,但我仍然会尽力帮助您找到错误的根本原因。

Java编译器足够聪明,可以建议自己很好的调试信息! 消除错误的一个很好的第一步是不要覆盖通过编译器投诉提供给您的异常消息。

尝试打印e.getLocalizedMessage()或e.getMessage()的结果,然后看看得到了什么。 通常,使用printStackTrace方法获取堆栈跟踪信息也很有用,以查明您的错误所在!

分享您从上述方法调用中获得的发现,以进一步帮助您解决问题。

[编辑1:]

如此看来,就数据的字体转换而言,您可以恰好处理该文件,但无法在转换后的数据文件中重建原始数据的格式。 (因此,“我们在阅读Word Doc时出错”,这是一个骗人的谎言;))

现在,Word文档有2个元素:

  1. 内容
  2. 结构或架构

仅在处理各自文档文件的内容时,您就可以转换数据。 为了能够保留内容的格式,您的解决方案还需要注意doc文件的格式并加以注意。

定义文档文件及其扩展名(.docx)的

MS Word遵循一组特定的模式,这些模式定义了格式设置规则。这些架构在Microsoft的XML命名空间包[1]中定义。

您可以很容易地获得想要的文档文件的XML(HTML)格式(请参阅[1]中的步骤或链接[2]中的代码),甚至可以基于以下内容应用不同的架构或您自己的架构定义MS命名空间提供的定义(以编程方式提供),您需要熟悉XML,XSL和XSLT概念(w3schools [3]是一个很好的起点),但是此方法的复杂程度不亚于编写自己的MS-Word版本;或使用[1]中所示的MS-Word内置工具。

[1]。 https://www.microsoftpressstore.com/articles/article.aspx?p=2231769&seqNum=4#:~:text=During%20conversion%2C%20Word%20tags%20the,you%20can%20an%20HTML%20file

[2]。 https://svn.apache.org/repos/asf/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/converter/TestWordToHtmlConverter.java

[3]。 https://www.w3schools.com/xml/

我的答案为您提供了如何实现目标的粗略概述,但是取决于您的意愿和时间,在决定选择一条路径而不是另一条路径之前,您可能需要使用自己的判断力。 希望对您有帮助!

,

上面的代码现在可以正常工作。但是最多只有2页的文字会被翻译成所需的格式。如果我超过3页或更多页,代码将引发空指针异常。我认为此错误是由于XWPFRun。