在 XWPFDocument 中使用阿拉伯语和波斯语

used arabic and persian in XWPFDocument

我想把word转成带有阿拉伯字母的pdf, 经过一些研发,我决定使用

org.apache.poi.xwpf.converter.pdf.PdfConverter

但是当我写下面的代码时,最后的结果是从左到右,而且单词很杂乱,例如对于“سعید”,pdf 中的结果是“سعید”,我的docx 很大而且没有一个段落:

public class ConvertWord {
    public static void ConvertToPDF(String docPath, String pdfPath) {
        try {
            InputStream doc = new FileInputStream(new File(docPath));
            XWPFDocument document = new 


            PdfOptions options = PdfOptions.create();
            options.fontEncoding("UTF-8")

            OutputStream out = new FileOutputStream(new File(pdfPath));

            PdfConverter.getInstance().convert(document,out,options);

        } catch (FileNotFoundException ex) {

        } catch (IOException ex) {

        }
    }

    public static void main(String[] args) {
        ConvertWord cwoWord=new ConvertWord();
        cwoWord.ConvertToPDF("D://" + "usc.docx","D://test12.pdf");

    }



   }

本帖:Creating PDF document from Word document using java api, contains other libraries you could use. I dont think this library, you are using, will support the layout options; it is also contains many bugs and doesn't support tables, graphs, page numbers as mentioned here: https://github.com/opensagres/xdocreport/wiki/XWPFConverterPDFViaIText

有解决此问题的解决方法。 您需要使用 ICU4J 库。 那么:

String shaped = new StringBuilder(new ArabicShaping(ArabicShaping.LETTERS_SHAPE).shape(s))
.reverse().toString();

尽管您可能对波斯语 Unicode 有一些疑问。有一个问题,有人通过修补 ArabicShaping 解决了这个问题。我没有找到它的 link 但是 here 是补丁代码。 (我不得不将文件上传到我的 google 驱动器中,这样它就不会随着时间的推移而被删除)

此外,here是对代码的link及其与主代码的区别。

为了方便起见,我将 class 名称更改为 PersianShaping