由于导出的PDF添加水印的内容有的在表格中有的在文本段落中,所以需要遍历每个段落,判断改段落在哪个位置后插入水印,在表格Cell中插入水印需要进行特殊处理。new Paragraph()后将水印图形添加入段落后,才能将该段落添加到表格中以达到水印添加到表格中。
public static void wordToPdf(File docFile,File pdfFile,String keyword) throws Exception {
//使用aspose需要获取凭证
if (!getLicense()) {
throw new KitException("获取凭证失败!");
}
Document doc = new Document(String.valueOf(docFile));
// 遍历文档中的每个段落
for (Object paragraph : doc.getChildNodes(NodeType.PARAGRAPH, true)) {
Paragraph para = (Paragraph) paragraph;
// 如果找到关键词所在的段落
if (para.getText().contains(keyword)) {
WatermarkProperties watermarkProperties = new WatermarkProperties();
watermarkProperties.setHeight(30);
watermarkProperties.setWidth(300);
Shape shape = WatermarkUtil.shapeMore(doc,watermarkProperties,-50,0);
while (para != null) {
Node parentNode = para.getParentNode();
if (parentNode.getNodeType() == NodeType.BODY) {
para.getParentNode().appendChild(shape);
// 已经到达Body节点,添加后退出循环
break;
} else if (parentNode.getNodeType() == NodeType.CELL) {
// 如果父节点是Cell类型,可以选择处理Cell内的段落或进一步上溯到Row和Table
Cell cell = (Cell) parentNode;
Paragraph nodes = new Paragraph(doc);
nodes.appendChild(shape);
cell.appendChild(nodes);
break;
} else {
// 对于其他类型的节点,直接上溯
para = (Paragraph) parentNode;
}
}
}
}
// 保存文档
doc.save(String.valueOf(pdfFile),SaveFormat.PDF);
}