麻烦给一个性能比较好的,不漏查的检验方式
要查每一个页面里的全部内容是否包含彩色内容
@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);
}