gpt4 book ai didi

java - 如何使用 Java 编辑 docx

转载 作者:行者123 更新时间:2023-11-29 05:16:19 24 4
gpt4 key购买 nike

我需要替换 docx 文件中的某些单词或短语,并用另一个名称保存它。我知道我的问题不是 unik,我尝试在网上找到解决方案。但是我仍然得不到我需要的结果。

我找到了两种方法来解决我的任务,但在每种情况下都陷入了僵局。1. 将docx解压成zip文件,将主要内容改成xml,重新打包成archive。但在那次操作之后,我无法在 MS Word 中打开新更改的 docx。这很奇怪,因为我可以手动执行类似的步骤(没有 Java,使用 WinRar)并获得正确的结果文件。那么你能解释一下如何使用 Java 归档 docx 内容以获得正确的文件吗?

  1. 使用外部 API。我得到了使用 docx4j Java 库的建议。但我所能做的就是用任何单词替换模板中的标签(如 ${label})(我使用了 VariableReplace 样本)。但是我想在不使用带标签的模板的情况下更改我想要的词。

希望得到帮助。

最佳答案

我有这个代码。我希望它能帮助你解决你的问题。有了它,您可以从 .docx 中阅读并找到您要更改的词。更改此单词并将新段落保存在新文档中。

 //WriteDocx.java
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class WriteDocx
{
public static void main(String[] args) throws Exception {
int count = 0;
XWPFDocument document = new XWPFDocument();
XWPFDocument docx = new XWPFDocument(new FileInputStream("Bonjour1.docx"));
XWPFWordExtractor we = new XWPFWordExtractor(docx);
String text = we.getText() ;
if(text.contains("SMS")){
text = text.replace("SMS", "sms");
System.out.println(text);
}
char[] c = text.toCharArray();
for(int i= 0; i < c.length;i++){

if(c[i] == '\n'){
count ++;
}
}
System.out.println(c[0]);
StringTokenizer st = new StringTokenizer(text,"\n");

XWPFParagraph para = document.createParagraph();
para.setAlignment(ParagraphAlignment.CENTER);
XWPFRun run = para.createRun();
run.setBold(true);
run.setFontSize(36);
run.setText("Apache POI works well!");

List<XWPFParagraph>paragraphs = new ArrayList<XWPFParagraph>();
List<XWPFRun>runs = new ArrayList<XWPFRun>();
int k = 0;
for(k=0;k<count+1;k++){
paragraphs.add(document.createParagraph());
}
k=0;
while(st.hasMoreElements()){
paragraphs.get(k).setAlignment(ParagraphAlignment.LEFT);
paragraphs.get(k).setSpacingAfter(0);
paragraphs.get(k).setSpacingBefore(0);
run = paragraphs.get(k).createRun();
run.setText(st.nextElement().toString());
k++;
}

document.write(new FileOutputStream("test2.docx"));
}
}

PS: XWPFDocument docx = new XWPFDocument(new FileInputStream("Bonjour1.docx"))

您必须将“Bonjour1.docx”更改为要替换某些单词或短语的文件名。我用 APACHE POI library我从这个网站上获取了一些代码 HANDLING MS WORD DOCUMENTS USING APACHE POI

更新 enter image description here

关于java - 如何使用 Java 编辑 docx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26449664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com