网站建设价格标准新闻四川餐饮网站建设
2026/3/25 14:28:51 网站建设 项目流程
网站建设价格标准新闻,四川餐饮网站建设,学生兼职网站开发,书画院网站模板知识库-向量化功能-读取PDF文件内容的方法一、核心逻辑基于Apache PDFBox组件解析PDF文件#xff0c;仅提取原生文本内容#xff08;不处理图片、扫描件#xff0c;也不涉及OCR光学字符识别#xff09;#xff0c;解析后对文本做格式化处理#xff0c;为后续向量化提供干…知识库-向量化功能-读取PDF文件内容的方法一、核心逻辑基于Apache PDFBox组件解析PDF文件仅提取原生文本内容不处理图片、扫描件也不涉及OCR光学字符识别解析后对文本做格式化处理为后续向量化提供干净的数据源。二、依赖配置Maven!-- PDF文本解析核心依赖 -- dependency groupIdorg.apache.pdfbox/groupId artifactIdpdfbox/artifactId version3.0.2/version !-- 稳定版本兼容主流PDF格式 -- /dependency说明PDFBox 3.0.2适配Java 8若项目为低版本Java可降级至2.0.x系列如2.0.32。三、核心实现代码3.1 配置类支持扩展OCRimport org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * PDF解析配置类预留OCR扩展能力默认仅提取原生文本 */ public static class Config { // 核心配置是否提取原生文本默认开启 private boolean extractNativeText true; // OCR扩展配置当前功能未启用仅预留 private String ocrLanguage chi_simeng; // 识别语言中文英文 /** * 设置是否提取原生文本 * param enable 开启/关闭 * return 配置对象链式调用 */ public Config extractNativeText(boolean enable) { this.extractNativeText enable; return this; } /** * 设置OCR识别语言预留配置 * param lang 语言编码如chi_sim简体中文eng英文 * return 配置对象链式调用 */ public Config ocrLanguage(String lang) { this.ocrLanguage lang; return this; } // 配置项getter按需添加 public boolean isExtractNativeText() { return extractNativeText; } public String getOcrLanguage() { return ocrLanguage; } }3.2 结果封装类/** * PDF解析结果封装类 */ public static class OcrResult { // 原生文本内容核心字段 public String nativeText ; // OCR文本预留字段当前未启用 public String ocrText ; // 图片路径预留字段当前未启用 public ListString imagePaths new ArrayList(); /** * 获取合并后的文本当前仅返回原生文本 * return 格式化后的原生文本 */ public String getCombinedText() { return nativeText; } }3.3 核心解析方法/** * 核心PDF处理方法仅提取原生文本 * param pdfFile 待解析的PDF文件 * param config 解析配置 * return 解析结果对象 * throws Exception 文件读取/解析异常 */ public static OcrResult process(File pdfFile, Config config) throws Exception { OcrResult result new OcrResult(); // 资源自动关闭避免文件句柄泄漏 try (PDDocument doc org.apache.pdfbox.Loader.loadPDF(pdfFile)) { // 仅处理原生文本提取核心逻辑 if (config.isExtractNativeText()) { String nativeText extractNativeText(doc); result.nativeText nativeText; // 预留智能触发OCR的逻辑当前功能未启用 // boolean needOcr nativeText.trim().length() 100; // 示例文本过短时触发OCR } // OCR处理逻辑当前功能未启用预留扩展 } return result; } /** * 提取PDF原生文本 * param doc PDF文档对象 * return 原始文本内容 * throws IOException 解析异常 */ private static String extractNativeText(PDDocument doc) throws IOException { PDFTextStripper stripper new PDFTextStripper(); // 可选设置提取页码范围如stripper.setStartPage(1); stripper.setEndPage(5); return stripper.getText(doc); }3.4 文本格式化方法/** * 格式化PDF解析后的文本清理冗余字符 * param content 原始解析文本 * return 格式化后的干净文本 */ public static String trimContent(String content) { if (content null || content.isEmpty()) { return ; } return content .replaceAll(-\\n, ) // 合并PDF断行如文本-\\n换行→文本换行 .replaceAll(\\s{2,}, ) // 压缩连续空格多个空格→单个空格 .replaceAll((?m)^\\d$, ) // 删除纯数字页码行仅匹配整行数字 .replaceAll(\\r\\n|\\r|\\n, ) // 统一换行符为空格 .trim(); // 去除首尾空白 }3.5 统一调用入口/** * 统一读取PDF文件文本内容 * param filePath PDF文件绝对路径 * return 格式化后的纯文本 * throws RuntimeException 解析失败异常 */ public static String getContent(String filePath) { // 初始化配置仅提取原生文本预留OCR语言配置 Config config new Config() .extractNativeText(true) .ocrLanguage(chi_simeng); // 中文英文预留配置 try { File file new File(filePath); // 前置校验文件存在性、合法性 if (!file.exists()) { throw new FileNotFoundException(PDF文件不存在 filePath); } if (!file.isFile() || !filePath.endsWith(.pdf)) { throw new IllegalArgumentException(非合法PDF文件 filePath); } OcrResult result process(file, config); String combinedText result.getCombinedText(); // 格式化文本返回干净数据 return trimContent(combinedText); } catch (Exception e) { throw new RuntimeException(PDF文本提取失败: e.getMessage(), e); } }四、核心设计说明4.1 关键优化点设计点解决的问题仅提取原生文本避免OCR带来的性能损耗聚焦文本向量化核心需求资源自动关闭try-with-resources解决PDF文档对象/文件流未关闭导致的句柄泄漏文本格式化处理清理PDF解析后的断行、冗余空格、页码提升后续向量化准确性前置文件校验提前拦截“文件不存在”“非PDF文件”等基础异常链式配置类便于扩展OCR等功能保持代码可读性4.2 方法调用示例// 调用示例 public static void main(String[] args) { try { String pdfText getContent(D:/test.pdf); System.out.println(PDF解析后的文本 pdfText); } catch (RuntimeException e) { System.err.println(解析失败 e.getMessage()); e.printStackTrace(); } }五、注意事项格式支持范围仅支持原生文本PDF可复制文字的PDF扫描件/图片型PDF解析后无内容需扩展OCR特殊内容处理PDFBox会忽略PDF中的图片、表单、批注仅提取文本若需解析表格需额外适配PDFTextStripperByArea性能优化解析大PDF100MB时建议分页码解析设置startPage/endPage避免内存溢出编码问题PDFBox默认采用UTF-8编码解析乱码时可检查PDF文件本身的编码格式依赖冲突若项目中存在其他PDFBox版本需统一为3.0.2避免NoSuchMethodError权限问题解析网络路径/只读文件时需确保文件读取权限避免AccessDeniedException。六、扩展建议分页码解析在extractNativeText方法中增加页码范围参数支持指定页码提取异步解析结合线程池实现大批量PDF异步解析提升处理效率OCR扩展集成Tesseract OCR实现“原生文本OCR”混合解析适配扫描件PDF进度监控解析大文件时增加进度回调便于前端展示解析进度容错处理对损坏的PDF文件增加重试机制或返回空字符串避免程序崩溃日志记录增加解析日志文件路径、解析耗时、文本长度便于问题排查大小限制在getContent方法中增加文件大小校验如限制最大解析200MB避免内存耗尽。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询