在对文档生成统一页眉时,在不同节有些页的不会添加生成页眉

 private static void addPageFooter(Document doc, String testTaskNo, List<byte[]> checkUsers, String checkDate
    ) {
        System.out.println("文档节:" + doc.getSections().getCount());
        for (Section section : doc.getSections()) {
            // 检查当前节的页眉是否已经存在
            HeaderFooter existingHeader = section.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.FOOTER_PRIMARY);
            if (existingHeader != null) {
                // 如果存在,移除已存在的页眉
                section.getHeadersFooters().remove(existingHeader);
            }
            // 设置当前节的起始页码
            section.getPageSetup().setPageStartingNumber(1);

            // 创建新的页脚
            HeaderFooter header = new HeaderFooter(doc, HeaderFooterType.FOOTER_PRIMARY);
            section.getHeadersFooters().add(header);

            // 使用DocumentBuilder添加内容
            DocumentBuilder builder = new DocumentBuilder(doc);
            builder.moveToSection(doc.getSections().indexOf(section));
            builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);


            builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
            Font font = builder.getFont();
            font.setSize(10);
            font.setName("Times New Roman");
            builder.write("GQI检测单号:" + testTaskNo);
            builder.write("\t\t\t\t");
            double left = 185; // 不额外偏移
            //设置检测员,插入签名图片
            builder.write("检测员:");
            for (byte[] checkUser : checkUsers) {
                Shape shape = builder.insertImage(new ByteArrayInputStream(checkUser), ConvertUtil.millimeterToPoint(21.0),
                    ConvertUtil.millimeterToPoint(10.0));
                shape.setLeft(left + ConvertUtil.millimeterToPoint(21.0));
                left += ConvertUtil.millimeterToPoint(21.0);
                shape.setWrapType(WrapType.SQUARE);
            }
            builder.write("\t\t\t\t\t\t\t\t\t\t");
            builder.write("第 ");
            builder.insertField("PAGE ", null);
            builder.write(" 页");

            builder.writeln();
            builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
            font.setSize(10);
            font.setName("Times New Roman");
            builder.write("实施日期:" + "2019-06-10");
            builder.write("\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
            //设置检测日期
            builder.write("检测日期:" + checkDate);
            doc.updatePageLayout();
            doc.updateFields();
        }
    }

在对文档生成统一页眉时,有些页的不会添加生成页眉

有的节生成,有的节不生成

@321227850 你能提供你使用的文件吗?它可以在文档中使用不同的页眉/页脚类型,当您仅为FOOTER_PRIMARY添加数据时,它不能在其他FOOTER_EVENFOOTER_FIRST中使用。

    public static void main(String[] args) {
        try {
            Document doc = new Document("./检测记录_1050e32f-9d1d-4e2a-b20c-f3210eb2a599.docx");
            byte[] bytes1 = FileUtil.readBytes
                ("./signature_image_168.png");
            addPageFooter(doc, "YDY12/345678", Arrays.asList(bytes1), "2019-06-10");
            doc.save("./test1.docx");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

signature_image_168.png (74.0 KB)

检测记录_1050e32f-9d1d-4e2a-b20c-f3210eb2a599.docx (269.1 KB)

有没有办法保证所有的页脚都有

请问有解决方法吗!!!!!

@321227850 在文档中,有些部分的首页不同,因此有些页面与 HeaderFooterType.FOOTER_FIRST相关。您可以修改代码,例如像这样获取章节中可用的页脚:

System.out.println("文档节:" + doc.getSections().getCount());
ArrayList<Integer> availableFooters = new ArrayList<>();
availableFooters.add(HeaderFooterType.FOOTER_PRIMARY);
for (Section section : doc.getSections()) {
    PageSetup pageSetup = section.getPageSetup();
    if (pageSetup.getDifferentFirstPageHeaderFooter())
        availableFooters.add(HeaderFooterType.FOOTER_FIRST);
    if (pageSetup.getOddAndEvenPagesHeaderFooter())
        availableFooters.add(HeaderFooterType.FOOTER_EVEN);

    for (int footerType : availableFooters) {
        // 检查当前节的页眉是否已经存在
        HeaderFooter existingHeader = section.getHeadersFooters().getByHeaderFooterType(footerType);
        if (existingHeader != null) {
            // 如果存在,移除已存在的页眉
            section.getHeadersFooters().remove(existingHeader);
        }
        // 设置当前节的起始页码
        section.getPageSetup().setPageStartingNumber(1);

        // 创建新的页脚
        HeaderFooter header = new HeaderFooter(doc, footerType);
        section.getHeadersFooters().add(header);

        // 使用DocumentBuilder添加内容
        DocumentBuilder builder = new DocumentBuilder(doc);
        builder.moveToSection(doc.getSections().indexOf(section));
        builder.moveToHeaderFooter(footerType);


        builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
        Font font = builder.getFont();
        font.setSize(10);
        font.setName("Times New Roman");
        builder.write("GQI检测单号:" + testTaskNo);
        builder.write("\t\t\t\t");
        double left = 185; // 不额外偏移
        //设置检测员,插入签名图片
        builder.write("检测员:");
        for (byte[] checkUser : checkUsers) {
            Shape shape = builder.insertImage(new ByteArrayInputStream(checkUser), ConvertUtil.millimeterToPoint(21.0),
                    ConvertUtil.millimeterToPoint(10.0));
            shape.setLeft(left + ConvertUtil.millimeterToPoint(21.0));
            left += ConvertUtil.millimeterToPoint(21.0);
            shape.setWrapType(WrapType.SQUARE);
        }
        builder.write("\t\t\t\t\t\t\t\t\t\t");
        builder.write("第 ");
        builder.insertField("PAGE ", null);
        builder.write(" 页");

        builder.writeln();
        builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
        font.setSize(10);
        font.setName("Times New Roman");
        builder.write("实施日期:" + "2019-06-10");
        builder.write("\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
        //设置检测日期
        builder.write("检测日期:" + checkDate);
        doc.updatePageLayout();
        doc.updateFields();
}

添加页眉的时候,有没有办法判断当前页是横板的纸张还是竖版的

@321227850 您可以使用 if (section.getPageSetup().getOrientation() == Orientation.LANDSCAPE)