因为使用aspose-cells将excel文件生成pdf需要license授权码,网上找了很久都没有,想着直接把水印文字给替换掉或者遮盖掉。
1.引用itextpdf.jar包,如果导出文件包含中文最好引入itext-asian.jar,防止乱码。
com.itextpdf
itextpdf
5.5.10
com.itextpdf
itext-asian
5.2.0
2.以下是实际 *** 作代码
/**
* 替换指定文字为白色的遮罩层
* @param src 需要被转换的带全路径文件名
* @param dest 转换之后pdf的带全路径文件名
* @param replaceStr 指定转换的文字(水印的文字)
*/
public static void replaceStr(String src, String dest, String replaceStr) {
try {
resu = new ArrayList<>();
PdfReader reader = new PdfReader(src);
//获取指定文字的坐标(就是上一步生成的pdf水印)
getKeyWords(reader,replaceStr);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
for (int i = 1; i <= resu.size(); i++) {
String xy = resu.get(i - 1);
PdfContentByte canvas = stamper.getOverContent(i);
canvas.saveState();
//设置颜色
canvas.setColorFill(BaseColor.WHITE);
//解析坐标
double x = Double.valueOf(xy.split("--")[0]);
double y = Double.valueOf(xy.split("--")[1]) - 10;
//后面2个参数分别是宽高
canvas.rectangle(x, y, 450, 100);
canvas.fill();
canvas.restoreState();
}
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取指定文字的坐标
*/
private static void getKeyWords(PdfReader pdfReader,String replaceStr) {
try {
int pageNum = pdfReader.getNumberOfPages();
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(
pdfReader);
for (int i = 1; i <= pageNum; i++) {
pdfReaderContentParser.processContent(i, new RenderListener() {
@Override
public void renderText(TextRenderInfo textRenderInfo) {
String text = textRenderInfo.getText(); // 整页内容
if (null != text && text.contains(replaceStr)) {
Rectangle2D.Float boundingRectange = textRenderInfo
.getBaseline().getBoundingRectange();
String xy = boundingRectange.x + "--" + boundingRectange.y;
resu.add(xy);
}
}
@Override
public void renderImage(ImageRenderInfo arg0) {
// TODO Auto-generated method stub
}
@Override
public void endTextBlock() {
// TODO Auto-generated method stub
}
@Override
public void beginTextBlock() {
// TODO Auto-generated method stub
}
});
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)