Jichen

Back

poi&poi-tl实现填充上下角标Blur image

poi&poi-tl实现填充上下角标

    /**
     * poi填充上下角标
     */
    @Test
    public void poiFillSubscript() {
        XWPFDocument document = new XWPFDocument();
        // 输出文档的路径
        String outputFilePath = "C:\\Users\\15106\\Desktop\\subscript-output.docx";

        // 添加段落
        XWPFParagraph paragraph = document.createParagraph();

        // 添加上标
        XWPFRun run1 = paragraph.createRun();
        run1.setText("这是上标文本。");
        run1.setSubscript(VerticalAlign.SUPERSCRIPT); // 设置为上标

        // 添加正常文本
        XWPFRun run2 = paragraph.createRun();
        run2.setText("这是正常文本。");
        run2.setSubscript(VerticalAlign.BASELINE); // 设置为正常文本

        // 添加下标
        XWPFRun run3 = paragraph.createRun();
        run3.setText("这是下标文本。");
        run3.setSubscript(VerticalAlign.SUBSCRIPT); // 设置为下标

        // 保存文档
        try (FileOutputStream out = new FileOutputStream(outputFilePath)) {
            document.write(out);
            System.out.println("文档创建成功: " + outputFilePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * poi-tl填充上下角标
     */
    @Test
    public void poitlFillSubscript() {
        // 使用模板文档的路径
        String templateFilePath = "C:\\Users\\15106\\Desktop\\subscript-template.docx";
        // 输出文档的路径
        String outputFilePath = "C:\\Users\\15106\\Desktop\\subscript-output.docx";

        // 创建 Word 模板对象
        try (FileInputStream in = new FileInputStream(templateFilePath);
             XWPFTemplate template = XWPFTemplate.compile(in)) {

            // 创建样式
            Style normalStyle = new Style();
            normalStyle.setVertAlign("baseline"); // 正常样式

            Style superscriptStyle = new Style();
            superscriptStyle.setVertAlign("superscript"); // 上标样式

            Style subscriptStyle = new Style();
            subscriptStyle.setVertAlign("subscript"); // 下标样式

            // 创建文本渲染数据
            TextRenderData normalText = new TextRenderData("这是正常文本。");
            normalText.setStyle(normalStyle);
            TextRenderData superscriptText = new TextRenderData("这是上标文本。");
            superscriptText.setStyle(superscriptStyle);
            TextRenderData subscriptText = new TextRenderData("这是下标文本。");
            subscriptText.setStyle(subscriptStyle);

            // 将文本渲染数据放入模板
            template.render(
                new HashMap<String, Object>() {{
                    put("normalText", normalText);
                    put("superscriptText", superscriptText);
                    put("subscriptText", subscriptText);
                }}
            );

            // 保存文件
            try (FileOutputStream out = new FileOutputStream(outputFilePath)) {
                template.write(out);
                System.out.println("文档创建成功: " + outputFilePath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
java

点我下载模板文件

poi&poi-tl实现填充上下角标
https://shujichen.com/blog/poifillmarkers
Author Jichen
Published at March 10, 2024
Comment seems to stuck. Try to refresh?✨