抽象类
package 坐标;
import org.apache.commons.lang.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.text.PDFTextStripperByArea;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @filename AbBankBillAnalysis
* @description 银行流水解析抽象类
* @author natsu
* @date 2022/3/7 9:16
*/
public abstract class AbstractBankBillAnalysis {
public static final String SEPARATOR = "\001";
public static final String PDF_LINE_FEED = "\r\n";
/**
* 功能描述 解析银行流水
* @param filePathName 文件路径名称
* @param filePassWord 文件密码
* @author natsu
* @date 2022/3/7 9:32
*/
protected List<String[]> analysisBankBill(String filePathName, String filePassWord) throws Exception {
PDDocument pdDocument = readBankBillContent(filePathName, filePassWord);
return analysisBankBillContent(pdDocument);
}
/**
* 功能描述 读取银行流水内容
* @param filePathName 文件路径名称
* @param filePassWord 文件密码
* @return java.lang.String
* @author natsu
* @date 2022/3/7 9:19
*/
protected PDDocument readBankBillContent(String filePathName, String filePassWord) throws IOException {
//加载PDF文件
return PDDocument.load(new File(filePathName), filePassWord);
}
/**
* 功能描述 解析银行流水内容
* @param pdDocument 文档对象
* @return java.util.List<java.lang.String [ ]>
* @author natsu
* @date 2022/3/11 17:48
*/
protected abstract List<String[]> analysisBankBillContent(PDDocument pdDocument) throws Exception;
/**
* 功能描述 计算单页横坐标
* @param page 当前页对象
* @param startY 起始Y坐标
* @param column 列数
* @param startX 起始X坐标
* @param locators 起始X坐标
* @param pageWidth 页面宽度
* @return java.util.List<java.lang.Integer>
* @author natsu
* @date 2022/3/11 17:48
*/
public List<Integer> reckonColumnSpace(PDPage page, int startY, int column, int startX, String[] locators,
int pageWidth) throws IOException {
List<Integer> columnSpaces = new ArrayList<>(column);
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
for (int i = 0; i < pageWidth; i += 5) {
Rectangle rectangle = new Rectangle(i + startX, sta