Java 去除aspose-cells生成的pdf文件中水印文字

Java 去除aspose-cells生成的pdf文件中水印文字,第1张

 因为使用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();
        }
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/722154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存