为有中文需求的客户提供多渠道中文技术支持.

Fri Nov 04, 2022 9:35 am

从本地文件读取word,word本身字体是仿宋,读取之后怎么将整个word 文字设置为宋体或自定义的某个字体呢?
在后续保存为pdf 时如何指定字体?可以加载系统字体吗?

baijue.wml1
 
Posts: 2
Joined: Fri Nov 04, 2022 9:31 am

Fri Nov 04, 2022 10:05 am

您好,

感谢您的留言。
1.读取之后怎么将整个word 文字设置为宋体或自定义的某个字体呢?
请参考下面的代码:
Code: Select all
String inputFile="data/Template_Docx_1.docx";
        String outputFile="output/setFont.docx";
        String fontFile="data/PT_Serif-Caption-Web-Regular.ttf";

        Document doc = new Document();
        doc.loadFromFile(inputFile);

        //设置字体和大小
        CharacterFormat format = new CharacterFormat(doc);
        format.setFontName("宋体");
        format.setFontSize(16);

        //设置自定义字体
        CharacterFormat customFormat = new CharacterFormat(doc);
        //允许在word文档中嵌入字体
        doc.setEmbedFontsInFile(true);
        //嵌入自定义字体在word文档中
        doc.getPrivateFontList().add(new PrivateFontPath("PT Serif Caption",fontFile));
        customFormat.setFontName("PT Serif Caption");
        customFormat.setFontSize(16);

        //遍历文档每个section
        for (int i = 0; i < doc.getSections().getCount(); i++) {
            Section section = doc.getSections().get(i);
            //遍历section的每个段落
            for (int k = 0; k < section.getBody().getParagraphs().getCount(); k++) {
                Paragraph paragraph = section.getParagraphs().get(k);
                //遍历段落的每个子对象
                for (int j = 0; j < paragraph.getChildObjects().getCount(); j ++)
                {
                    if ( paragraph.getChildObjects().get(j) instanceof TextRange)
                    {
                        TextRange tr = (TextRange) paragraph.getChildObjects().get(j);
                        //Apply character format
                        tr.applyCharacterFormat(format);
                    }
                }
            }
        }
        //保存文档
        doc.saveToFile(outputFile, FileFormat.Docx);

2.在后续保存为pdf 时如何指定字体?可以加载系统字体吗?
在保存为pdf时,
a.默认会在系统中找word文档中对应的字体,然后设置给pdf文档;
b.如果没有找到对应的字体,就会在系统中找相似的字体,然后设置给pdf文档。
c.如果相似的字体都没有找到,pdf文档就会乱码。
在执行word转pdf时,可以通过代码将字体嵌入pdf文档,代码如下:
Code: Select all
String inputFile="data/convertedTemplate.docx";
        String fontFile="data/PT_Serif-Caption-Web-Regular.ttf";
        String outputFile="output/embedNoninstalledFonts.pdf";

        Document document = new Document();
        document.loadFromFile(inputFile);

        //嵌入字体到pdf文档中
        ToPdfParameterList parms = new ToPdfParameterList();
        List<PrivateFontPath> fonts = new ArrayList<PrivateFontPath>();
        fonts.add(new PrivateFontPath("PT Serif Caption", fontFile));
        parms.setPrivateFontPaths(fonts);

        //保存文档
        document.saveToFile(outputFile, parms);


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Thu Nov 17, 2022 9:06 am

您好,

请问我提供的代码满足您的需求了吗?期待在您有空的时候能给出反馈。希望你有美好的一天。 :)

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Return to 中文技术支持