java - pdfbox 以什么顺序解析 pdf 文件?(假设一页多于 1 列)
问题描述
如果 pdf 文件的页面上有 2 列,pdfbox 是逐列还是逐行解析它?
解决方案
当您说“解析 PDF 文件”时,我假设您的意思是对其应用文本提取。在 PDFBox 的情况下,通常是通过PDFTextStripper
类来实现的。
在这种情况下,答案是“视情况而定”。
默认情况下,
PDFTextStripper
按内容流中文本绘制指令的顺序提取。这通常对应于内容的逻辑顺序,因为 PDF 生成器通常具有按该顺序排列的输入并相应地生成输出,例如,通常会按列提取多列。但是不能保证这一点;文字绘图指令理论上可以是任何顺序;例如,首先可以绘制页面上的所有 'a',然后绘制所有 'b',...
这样的混乱是非常罕见的。但是,如果 PDF 的内容既包含固定内容又包含动态内容,您可能经常首先看到固定内容,然后是提取文本中的动态内容。例如第一个标签,如“名字”、“姓氏”、“出生日期”……然后是值。
或者,您可以使用
PDFTextStripper.setSortByPosition
将SortByPosition
属性设置为true
。在这种情况下,PDFBox 会忽略绘图顺序并尝试逐行提取 PDF 文本。
推荐阅读
- json - 如何定期将大型 JSON 数据集导入 Cloud Firestore?
- php - simplexml_load_string():实体:第 1 行:解析器错误:字符串未关闭预期问题
- apache-spark - 使用 Spark BigQuery 连接器查询 BigQuery 视图时未启用缓存
- sql-server - 查找给定开始日期和结束日期的可用日期
- c# - NanoFramework 缺少库
- python - 如何使用 python 编辑 S3 文件
- vb.net - Visual basic - 函数内的函数作为变量
- r - 使用 data.table 避免 mget
- reactjs - 在 useEffect 中使用本地 var 进行乱序操作
- r - 基于 selectInput 的 ggplot2 和 Shiny 条件美学?