上面的代码有问题
时间: 2023-08-13 12:06:00 浏览: 108
非常抱歉,您提到的代码确实存在问题,感谢您指出。以下是经过修改后的代码:
```java
import org.apache.poi.xwpf.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
public class WordFontConverter {
public static void main(String[] args) {
try {
// 读取Word文档
FileInputStream fis = new FileInputStream(new File("example.docx"));
XWPFDocument document = new XWPFDocument(fis);
// 获取所有段落
List<XWPFParagraph> paragraphs = document.getParagraphs();
// 遍历所有段落
for (XWPFParagraph paragraph : paragraphs) {
// 获取段落中的所有Run元素
List<XWPFRun> runs = paragraph.getRuns();
// 遍历所有Run元素
for (XWPFRun run : runs) {
// 获取Run元素的字体名称
String fontName = run.getFontFamily(run.getParagraph().getCTP());
// 如果是英文字体,则设置为固定字体(比如Arial)
if (fontName.matches("[A-Za-z]+")) {
run.setFontFamily("Arial");
}
}
}
// 保存修改后的Word文档
FileOutputStream fos = new FileOutputStream(new File("example_modified.docx"));
document.write(fos);
fos.close();
document.close();
System.out.println("字体转换完成!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
```
此次修改主要是在获取字体名称时加入了`run.getParagraph().getCTP()`参数,避免了原来代码中获取字体名称为空的问题。同时,原来代码中的正则表达式也做了一些调整,使其能够正确匹配英文字体名称。非常感谢您的提醒,希望这次修改能够解决问题。
阅读全文