Java根據PDF中的關鍵字位置判定PDF文件是否合法


業務中需判定PDF文件是否為指定PDF文件,如果不是則不允許上傳,並且提醒用戶上傳合法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; } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM