如何在R中使用pdftools按块而非按行读取PDF文件?
多列PDF读取混乱的解决方法
方法1:通过文本坐标拆分列(pdftools进阶用法)
pdftools的*pdf_data()*函数能提取每个文本块的坐标信息,这是区分多列的核心:
- 读取PDF的结构化数据:
library(pdftools) # 替换为你的PDF路径 pdf_content <- pdf_data("multicolumn_file.pdf")
- 按x坐标划分列边界:
以两列PDF为例,先计算x坐标的分界点(比如中位数):
# 取第一页数据演示,多页可循环处理 page_data <- pdf_content[[1]] # 计算两列的x轴分界值 split_x <- median(page_data$x) # 拆分左右列 left_col <- page_data[page_data$x < split_x, ] right_col <- page_data[page_data$x >= split_x, ]
- 按y坐标排序拼接文本:
同一行的文本y坐标相近,按y分组拼接即可还原整行内容:
library(dplyr) # 处理左列 left_text <- left_col %>% group_by(y) %>% arrange(x) %>% summarise(content = paste(text, collapse = " ")) %>% pull(content) # 处理右列 right_text <- right_col %>% group_by(y) %>% arrange(x) %>% summarise(content = paste(text, collapse = " ")) %>% pull(content) # 合并为规整的两列数据框 result <- data.frame(left_column = left_text, right_column = right_text)
方法2:用tabulizer自动识别列结构
如果PDF布局规整,tabulizer包可以直接提取结构化的列数据:
library(tabulizer) # 提取所有页面的列数据,输出为数据框 col_data <- extract_tables("multicolumn_file.pdf", output = "data.frame") # 合并多页结果 final_result <- do.call(rbind, col_data)
注意:该包依赖Java环境,需提前安装JRE。
方法3:预处理PDF转为单列
若上述方法效果不佳,可先将多列PDF转为单列布局(比如用本地PDF编辑工具或pdftk命令行工具调整),再用pdftools读取,避免列混乱问题。
内容的提问来源于stack exchange,提问作者Grec001
相关产品推荐
相关产品推荐

