Java根据PDF中的关键字位置判定PDF文件是否合法

Wesley13
• 阅读 822

业务中需判定PDF文件是否为指定PDF文件,如果不是则不允许上传,并且提醒用户上传合法PDF文件

此贴需要参考我的上上篇帖子,定位PDF中关键字的位置

测试结果:

Java根据PDF中的关键字位置判定PDF文件是否合法

maven配置

<!-- 引入pdf -->
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.5.13</version>
    </dependency>

校验PDF是否包含指定关键字Java文件CheckPdfHelper.java

package com.alphajuns.util;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;

import java.io.IOException;

/**
 * @ClassName CheckPdfHelper
 * @Description 校验PDF是否为指定文件
 * @Author AlphaJunS
 * @Date 2020/3/7 19:31
 * @Version 1.0
 */
public class CheckPdfHelper {
    // 定义PDF中关键字及其坐标位置,用于判断校验上传的PDF文件是否合法
    private static String KEY_WORD = "ANPQP";
    private static float POINT_X = (float) 36.0;
    private static float POINT_Y = (float) 810.2003;

    /**
     * 检验PDF是否合格
     * @param filePath
     * @return
     */
    public static int checkPdf(String filePath) {
        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
        if ("pdf".equals(suffix.toLowerCase())) {
            return checkSinglePdf(filePath);
        } else {
            return 1;
        }
    }

    /**
     * 检验单个pdf是否合格
     * @param filePath
     * @return
     */
    private static int checkSinglePdf(String filePath) {
        float[] point = getKeyWordsByPath(filePath);
        if (point != null) {
            if(isEqualOfFloat(point[0], POINT_X) && isEqualOfFloat(point[1], POINT_Y)) {
                return 0;
            } else {
                return 1;
            }
        }
        return 1;
    }

    /**
     * @Author AlphaJunS
     * @Date 18:01 2020/3/7
     * @Description 根据路径获取pdf中关键字的坐标
     * @param  filepath
     * @return float[]
     */
    private static float[] getKeyWordsByPath(String filepath) {
        float[] coordinate = null;
        try{
            PdfReader pdfReader = new PdfReader(filepath);
            coordinate = getKeyWords(pdfReader);       pdfReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return coordinate;
    }

    /**
     * @Author AlphaJunS
     * @Date 18:02 2020/3/7
     * @Description 根据pdfreader获取pdf中关键字的坐标
     * @param pdfReader
     * @return float[]
     */
    private static float[] getKeyWords(PdfReader pdfReader) {
        float[] coordinate = null;
        int page = 0;
        try{
            int pageNum = pdfReader.getNumberOfPages();
            PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(pdfReader);
            CustomRenderListener renderListener = new CustomRenderListener();
            renderListener.setKeyWord(KEY_WORD);
            for (page = 1; page <= pageNum; page++) {
                renderListener.setPage(page);
                pdfReaderContentParser.processContent(page, renderListener);
                coordinate = renderListener.getPcoordinate();
                if (coordinate != null) break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return coordinate;
    }

    /**
     * @Author AlphaJunS
     * @Date 18:05 2020/3/7
     * @Description 判断两个浮点数是否一致
     * @param a
     * @param b
     * @return boolean
     */
    public static boolean isEqualOfFloat(float a, float b){
        if(Math.abs(Math.floor(a) - Math.floor(b)) <= 0) {
            return true;
        } else {
            return false;
        }
    }
}
点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java向PDF模板写入数据
项目需要生成PDF文件,在浏览器实现打印功能。这里只说明如何利用PDF文件模板写入数据整个写入过程我分11步演示,演示过程中的PDF文件我打了马赛克(显示的PDF是公司项目文件),但不影响演示过程。首先安装Adobe AcrobatDC。下载地址:https://pan.baidu.com/s/1BxjHtK5zAWBBsrOGZbEtdw1.
Wesley13 Wesley13
3年前
PDF编辑软件哪个好 如何给PDF文件添加页眉页脚
   上班都要用文件的,WPS文件,PDF文件,有些页面是不好看的,PDF编辑软件(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbianji.xjpdf.com%2F)哪个好,如何给PDF文件添加页眉页脚?很多人不知道呢,下面简单分享下方法。1、要在百度打开工具迅捷PDF编辑
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
3年前
PDF编辑器加入超链接怎么操作
想要在网站上下载的PDF文件中添加一些超链的话,该如何去操作呢?想要知道一个轻快省事,又不会耽误太多时间的办法吗?那就和我一起来看一下吧!迅捷PDF编辑器。这款迅捷PDF编辑器能给用户提供完整的PDF编辑功能,不单只能够对PDF文件当中的文本部分进行修改,更可以针对图像、样式、多媒体内容进行编辑。用户可以在任何PDF文件页面当中,随意修改、删除或者插入页
Wesley13 Wesley13
3年前
PDF文件在电脑上如何进行编辑
PDF文件是比较常见的文件保存格式,因为PDF文件的保存格式受到很多人的欢迎。它的文件真实性很高,但是电脑上很少有软件来打开PDF文件,更何况是打开PDF文件来进行对文件的编辑。PDF编辑软件下载http://bianji.xjpdf.com/(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Wesley13 Wesley13
3年前
PDF文件在线转换成PPT
  有多少人做过PDF文件的转换,还是PDF在线转换成PPT的转换,不用说转换成PPT了,连最基本的转换都没有做过吧。PDF文件支持多种文件之间的转换,如果你连PDF怎么转换成别的文件你都不了解,你的领导或者上司会满意你的工作效率吗?其实PDF在线转换成其他格式的文件很简单,转换成PPT文件也不难,需要用到一款在线转换器——迅捷PDF在线转换器。这种在线转换
Wesley13 Wesley13
3年前
Java_swing_打开文件目录
经过百度,千篇一律的内容,如下:1.java自带的API打开文件:FilefilenewFile("c://test.pdf");java.awt.Desktop.getDesktop().open(file);打开目录:FilefilenewFile("c://test.pdf");java.awt.Deskto
绣鸾 绣鸾
1年前
PDF Search for Mac(pdf文件搜索工具)
是一款Mac平台上的PDF文件搜索工具,可以帮助用户快速地搜索和查找Mac电脑上的PDF文件。该软件提供了快速、准确、可靠的搜索和查找功能,可以让用户轻松地搜索和查找PDF文档中的关键字、短语和其他内容。此外,PDFSearch还提供了一些实用的特性,例如
京东云开发者 京东云开发者
8个月前
移动端提高pdf预览清晰度
背景:移动端预览PDF文件,通用的解决方案是使用vuepdf插件,其内置pdf.js,原理是基于HTML5的标签,通过将PDF文件转换为图片或来实现对PDF文件的预览,插件好使没毛病😆,但是如果我们的需求是要在移动端预览内容很密集的文件时,预览效果就不理