Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

基于apache pdfbox的轻量级pdf解析器,支持正则匹配/坐标定位,注解声明式配置,自动映射PDF到Java对象,全流程监听机制可自定义监听操作

Notifications You must be signed in to change notification settings

foldn/pdfparser-lite

Repository files navigation

PDF Parser Lite

一个轻量级、低侵入性的PDF解析工具,支持文本提取、表格识别、OCR等功能。

项目架构

pdfparser-parent/
├── pdfparser-core # 核心解析模块
├── pdfparser-extension # 扩展功能模块
└── pdfparser-test # 测试demo模块

核心模块说明

1. pdfparser-core

  • 实现PDF解析的核心功能
  • 采用构建者模式和工厂模式
  • 提供注解支持,实现声明式PDF解析配置
  • 支持字段映射、解析规则配置等功能
  • 负责格式转换功能
  • 支持JSON、XML等多种输出格式
  • 可扩展的转换器接口设计
  • 主要注解:@PdfField @@PdfProcessor
  • 主要组件:
    • PdfReader: PDF读取接口
    • ParseOptions: 解析配置类
    • ParseContext: 解析上下文
    • ParseEventListener: 事件监听接口
    • PdfProcessor: 指定处理器
    • Converter:格式转化器接口

2. pdfparser-extension

  • 提供额外功能扩展
  • OCR支持
  • 高级表格识别等特性

特性

  • 基本文本提取
  • 注解支持
  • 事件监听机制
  • 可拓展的文本处理器
  • 可扩展的转换器
  • 表格识别与提取
  • 元数据提取
  • 支持加密PDF
  • OCR支持
  • 批量处理支持
  • 异步处理支持

快速开始

Maven依赖

<dependency>
<groupId>com.example.pdfparser</groupId>
<artifactId>pdfparser-core</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

基本使用(详见pdfparser-test模块)

// 定义数据模型类
@Data
@PdfProcessor(processor = InvoiceProcessor.class)
public class Invoice {
 /**
 * 发票号码
 */
 @PdfField(pattern = "发票号码:(\\d+)", group = 1)
 private String invoiceNumber;
 /**
 * 开票信息
 */
 @PdfField(pattern = "开票日期:([\\d]{4}年[\\d]{2}月[\\d]{2}日)", group = 1)
 private String invoiceDate;
 /**
 * 购买方名称
 */
 @PdfField(pattern = "购\\s*名称[::]\\s*(.*?)\\s+销", group = 1)
 private String buyerName;
 /**
 * 购买方统一社会信用代码/纳税人识别号
 */
 @PdfField(prefix = "统一社会信用代码/纳税人识别号:", suffix = "信")
 private String buyerTaxNumber;
}
//特殊文本处理
public class InvoiceProcessor implements DocumentProcessor<Invoice> {
 @Override
 public Invoice process(String text, Class<Invoice> targetClass) {
 Invoice invoice = createInstance(targetClass);
 // 解析基本字段
 processBasicFields(invoice, text);
 // 解析商品明细
 processDetails(invoice, text);
 return invoice;
 }
}
// 创建解析配置
ParseOptions options = ParseOptions.builder()
 .maintainLayout(true) // 保持原始布局
 .build();
// 创建解析事件监听器
ParseEventListener listener = new ParseEventListener() {
 @Override
 public void onBeforeParse(ParseContext context) {
 System.out.println("开始解析PDF");
 }
 @Override
 public void onAfterParse(ParseContext context) {
 System.out.println("PDF解析完成");
 }
 @Override
 public void onError(Exception e, ParseContext context) {
 System.err.println("解析出错: " + e.getMessage());
 }
};
// 创建PDF读取器
PdfReader reader = PdfReaderBuilder.builder()
 .withListener(listener)
 .withOptions(options)
 .build();
 // 读取PDF文件,(该文件为示例,需使用真正的发票pdf)
 File pdfFile = new File("pdfparser-test/src/main/resources/example1.pdf");
 List<Invoice> invoices = reader.read(pdfFile, Invoice.class, options);
 // 创建PdfData对象
 PdfData pdfData = new PdfData();
 pdfData.setData(invoices.get(0));
 pdfData.setMetadata(reader.getContext().getContext());
 pdfData.setText((String) reader.getContext().getAttribute("rawText"));
 // 转换为JSON
 JsonConverter converter = new JsonConverter();
 String json = converter.convert(pdfData);
 // 输出结果
 System.out.println("解析结果:");
 System.out.println(json);

About

基于apache pdfbox的轻量级pdf解析器,支持正则匹配/坐标定位,注解声明式配置,自动映射PDF到Java对象,全流程监听机制可自定义监听操作

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /