Aspose.word for java 如何判断word文档的每一页是否含有彩色内容

麻烦给一个性能比较好的,不漏查的检验方式

@zchong

请问您能否提供更多关于您想要检查的彩色内容的具体信息?例如,您是想检查文本、图像还是其他类型的内容?

要查每一个页面里的全部内容是否包含彩色内容

@zchong 您可以使用此代码作为示例,并根据需要对其进行改进:

Document doc = new Document();

// 创建一个 LayoutCollector,将节点映射到页面。
LayoutCollector layoutCollector = new LayoutCollector(doc);
// 更新版面,确保页码正确。
doc.updatePageLayout();

int pageCount = doc.getPageCount();
System.out.println("Total pages: " + pageCount);

// 创建一个 DocumentVisitor 来检查颜色。
ColorCheckingVisitor colorVisitor = new ColorCheckingVisitor(layoutCollector);
for (int page = 0; page <= pageCount; page++) {
    colorVisitor.setCurrentPage(page);
    colorVisitor.reset();

    // 遍历文档中的所有节点。
    NodeCollection nodes = doc.getChildNodes(NodeType.PARAGRAPH, true);

    for (Node node : (Iterable<Node>) nodes) {
        // 检查该节点是否出现在当前页面上。
        int startPage = layoutCollector.getStartPageIndex(node);
        int endPage = layoutCollector.getEndPageIndex(node);

        if (startPage <= page && page <= endPage) {
            node.accept(colorVisitor);
        }
    }

    // 如果文档有页眉页脚内容,第一页就是页眉页脚。
    System.out.println("Page " + (page + 1) +
            " contains colored content: " + colorVisitor.hasColoredContent());
}

class ColorCheckingVisitor extends DocumentVisitor {
    private final LayoutCollector layoutCollector;
    private int currentPage;
    private boolean hasColoredContent;

    public ColorCheckingVisitor(LayoutCollector layoutCollector) {
        this.layoutCollector = layoutCollector;
    }

    public void setCurrentPage(int page) {
        this.currentPage = page;
    }

    public void reset() {
        this.hasColoredContent = false;
    }

    public boolean hasColoredContent() {
        return hasColoredContent;
    }

    @Override
    public int visitRun(Run run) {
        Color fontColor = run.getFont().getColor();
        if (!isBlackOrNull(fontColor)) {
            hasColoredContent = true;
        }
        return VisitorAction.CONTINUE;
    }

    @Override
    public int visitParagraphStart(Paragraph paragraph) {
        if (paragraph.getParagraphFormat().getShading().getBackgroundPatternColor() != Color.WHITE &&
                !paragraph.getParagraphFormat().getShading().getBackgroundPatternColor().equals(new Color(0, 0, 0, 0))) {
            hasColoredContent = true;
        }
        return VisitorAction.CONTINUE;
    }

    private boolean isBlackOrNull(Color color) {
        return color == null || (color.getRed() == 0 && color.getGreen() == 0 && color.getBlue() == 0);
    }
}

有办法把文档每一页单独保存成图片吗,尽量一次性保存,而不是一页一页的保存,帮忙提供示例

如果是彩色图片,彩色图形该代码可以检查出来吗,目前是要检查word的每一页任何地方都不能包含有彩色内容

@zchong 您可以使用

Document doc = new Document("input.docx");
        
// Create an ImageSaveOptions object.
ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);
options.setResolution(300); // Set DPI resolution.

// Loop through each page and save as image.
for (int page = 0; page < doc.getPageCount(); page++) {
    options.setPageSet(new PageSet(page));
    
    // Save each page as PNG image.
    doc.save(String.format("output_page_%d.png", page + 1), options);
}

@zchong 要检查图像,您需要使用不同的库来检查色差。