首页 > 其他分享 >解析pdf去掉水印内容

解析pdf去掉水印内容

时间:2023-10-19 16:22:07浏览次数:24  
标签:iterator text 水印 new pdf textPositions 解析 Math

因为水印内容一般是由倾斜度的,所以判断内容的倾斜度就可以去掉水印内容了。
PDFTextStripper.getText(document)底层是通过writeString(String text, List textPositions)来获取内容的,所以可以通过重写writeString()方法来实现。

public class MyPDFTextStripper extends PDFTextStripper {
    /**
     * Instantiate a new PDFTextStripper object.
     *
     * @throws IOException If there is an error loading the properties.
     */
    public DepPDFTextStripper() throws IOException {
    }

    @Override
    protected void writeString(String text, List<TextPosition> textPositions) throws IOException {
        Iterator<TextPosition> iterator = textPositions.iterator();
        while (iterator.hasNext()) {
            TextPosition position = iterator.next();
            int angle = getAngle(position);
            if (Math.abs(angle) > 10) {
                iterator.remove();
            }
        }
        text = textPositions.stream().filter(elm->!Objects.isNull(elm)).map(TextPosition::getUnicode).collect(Collectors.joining());
        super.writeString(text, textPositions);
    }

    /**
     * 获取字体倾斜度
     *
     * @param text 当前字符对象
     * @return 倾斜度
     */
    public static int getAngle(TextPosition text) {
        Matrix m = text.getTextMatrix().clone();
        m.concatenate(text.getFont().getFontMatrix());
        return (int) Math.round(Math.toDegrees(Math.atan2(m.getShearY(), m.getScaleY())));
    }
}

获取pdf内容

        try (FileInputStream inputStream=new FileInputStream(new File("test.pdf"));PDDocument doc = PDDocument.load(inputStream)) {
            PDFTextStripper textStripper = new DepPDFTextStripper();
            int numberOfPages = doc.getNumberOfPages();
            log.info("Current pdf have {} page", numberOfPages);
            //解析的pdf内容
            String psText = textStripper.getText(doc);
        } catch (Exception e) {
            e.printStackTrace();
            log.info("parse PDF error {}", e.getMessage());
        }

标签:iterator,text,水印,new,pdf,textPositions,解析,Math
From: https://www.cnblogs.com/lyuSky/p/17774999.html

相关文章

  • react项目中预览pdf文件
    最近需求,要在b端展示上传的pdf文件。实现方式有很多,记录一下我们最常用的pdf.js//安装"pdfjs-dist":"2.0.402"//引入import*aspdfjsfrom'pdfjs-dist'import*aspdfjsWorkerfrom'pdfjs-dist/build/pdf.worker.entry'//定义初始值letpdfDoc=null;......
  • vue2和vue3导出页面为PDF格式:jspdf和html2canvas
    一、vue2导出PDF使用步骤1、安装html2canvas,将页面html转换成图片npminstall--savehtml2canvas卸载:npmuninstallhtml2canvas指定版本安装:[email protected]、安装jspdf,将图片生成pdfnpminstalljspdf--save3、定义全局函数在指......
  • 一篇文章解密如何轻松实现移动应用的电子和手绘PDF签名功能!
    对PDF文件签名是移动设备上越来越普遍的使用需求,本文将描述自动生成/“手绘”签名与如何使用DevExpressOfficeFileAPI组件来实现在.NETMAUI应用程序中快速合并签名/签名支持之间的区别。DevExpressOfficeFileAPI是一个专为C#,VB.NET和ASP.NET等开发人员提供的非可视化......
  • Spring源码解析——事务的回滚和提交
    正文上一篇文章讲解了获取事务,并且通过获取的connection设置只读、隔离级别等,这篇文章讲解剩下的事务的回滚和提交。最全面的Java面试网站回滚处理之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非是对于程序没有按照我们期待的那样进行,也就是出现特定......
  • 去水印网站推荐
    1.问题我们在平时从网上获取一些图片或者想要入手一些壁纸时,角落里的水印总会影响到整个图片的美感,自己用PS去除又会比较耗费时间,所以这里我推荐几个好用的去水印网站,可以迅速去除水印。2.推荐网站2.1佐糖优点是无需注册即可使用,方便迅捷,但可能一定程度上破坏原图链接:https:......
  • 反向解析
    #通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数 先给路由与视图函数其一个别名url(r'^func/',views.func,name='ooo') #反向解析后端反向解析:#导入reverse模块fromdjango.shortcutsimportreversereverse('ooo')  前端反向解析:......
  • 《机器学习与优化》PDF高质量正版电子书
    下载:https://pan.quark.cn/s/5fb461be1a45......
  • 《Java 8实战》PDF高清高质量电子书
    下载:https://pan.quark.cn/s/c6c7603af158......
  • 《深入理解SVG》高品质PDF电子书
    下载:https://pan.quark.cn/s/3eb5231d5cf3......
  • 【专题】2022年中国跨境电商行业研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32044近年来,我国的跨境电子商务发展迅速,在过去五年中,其贸易额增长率达到了16.2%,已经成为稳定对外贸易的一支重要力量。阅读原文,获取专题报告合集全文,解锁文末52份跨境电商行业相关报告。一方面,随着跨境电子商务的发展,跨境电子商务的监管政策得到了......