You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI保存阿拉伯语文本时出现镜像反转问题求助

问题分析与解决方案

这个问题很典型——阿拉伯语是RTL(从右到左)语言,你当前的代码只设置了段落的右对齐,但没有明确标记段落为RTL文本方向,导致Word渲染时把RTL文本当成LTR(从左到右)处理,出现镜像反转的情况。而粘贴纯文本时Word会自动识别文本的语言方向,所以能恢复正常。

修复步骤:

  1. 为段落设置RTL文本方向:除了设置右对齐,还要调用段落的setBidirectional(true)方法,告诉Word这是从右到左的文本。
  2. 使用支持阿拉伯语的字体:确保你设置的字体能正确渲染阿拉伯文字符,避免出现乱码或排版异常。
  3. 统一段落属性设置:你的代码里先把标题段落设为LEFT对齐又改成RIGHT,建议统一设置逻辑。

修改后的代码示例:

public class SavingStringAsWordDoc { 
    File f = theGUI.toBeSavedWord; 
    public void saveAsWorddd (){ 
        String st = TesseractPerformer.toBeShown; 
        try(FileOutputStream fout = new FileOutputStream(f); 
            XWPFDocument docfile = new XWPFDocument()){ 
            
            // 标题段落设置(RTL方向+右对齐)
            XWPFParagraph paraTit = docfile.createParagraph();
            paraTit.setAlignment(ParagraphAlignment.RIGHT);
            paraTit.setBidirectional(true); // 关键:标记为RTL文本
            XWPFRun paraTitRun = paraTit.createRun();
            paraTitRun.setBold(true);
            paraTitRun.setFontSize(15);
            paraTitRun.setFontFamily("Arial Unicode MS"); // 选用支持阿拉伯语的字体
            
            // 内容段落设置
            XWPFParagraph contentPara = docfile.createParagraph();
            contentPara.setAlignment(ParagraphAlignment.RIGHT);
            contentPara.setBidirectional(true); // 同样标记RTL属性
            XWPFRun contentRun = contentPara.createRun();
            contentRun.setText(st);
            contentRun.setFontFamily("Arial Unicode MS");
            
            docfile.write(fout); 
        } catch(IOException e){ 
            System.out.println("IO ERROR:"+e); 
        } 
    }
}

额外排查点:

  • 确认Tesseract提取的文本toBeShown没有混入LTR控制字符(比如\u200E左到右标记),可以打印文本的Unicode编码进行排查。
  • 如果还是有异常,可以尝试在文本开头添加RTL强制标记字符\u200F,让Word明确识别文本方向:contentRun.setText("\u200F" + st);

内容的提问来源于stack exchange,提问作者Ebdulmomen1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:36:19