R语言tabulizer包读取PDF日期时出现编码/安全异常求助
解决tabulizer提取PDF日期时的乱码问题
这看起来是公司内部PDF使用了特殊嵌入字体或者非标准字符编码导致的提取乱码,我之前处理过类似的情况,给你几个针对性的解决思路:
调整tabulizer的提取参数
首先试试指定不同的编码格式,或者精准定位日期区域提取,避免干扰其他内容:library(tabulizer) # 先通过交互模式定位日期区域(运行后会弹出PDF页面让你框选) date_area <- locate_areas("your_company_pdf.pdf") # 用指定编码提取区域文本,常用编码有UTF-8、ISO-8859-1 date_text <- extract_text("your_company_pdf.pdf", area = date_area, encoding = "ISO-8859-1")转成图片后用OCR识别
如果直接文本提取失效,把PDF页面转成图片再用OCR工具识别是个靠谱的备选方案:library(magick) library(tesseract) # 读取目标PDF页面为图片 pdf_page <- image_read_pdf("your_company_pdf.pdf", pages = 1) # 裁剪出右上角的日期区域(需要根据实际页面调整坐标,格式为"widthxheight+x+y") date_region <- image_crop(pdf_page, "300x50+700+50") # 用OCR识别文本,可指定语言包 date_result <- ocr(date_region, engine = tesseract("eng"))手动修复字符映射
从你给出的乱码示例来看,字符是有规律替换的(比如0→t,M→r,2→8),可以先整理出替换规则,用字符替换修复:# 根据你的乱码示例整理的映射表,需要根据实际情况调整 char_map <- c( "t" = "0", "r" = "a", "8" = "2", ":" = "S", " " = "t", "E" = "n", "d" = "d" ) # 假设messy_text是你复制得到的乱码文本 messy_text <- ":tttt: 11-rrr-8118 tt:: 11-rrr-8118" fixed_date <- chartr(paste(names(char_map), collapse = ""), paste(char_map, collapse = ""), messy_text)检查PDF字体嵌入情况
用Adobe Acrobat这类工具打开PDF,查看右上角日期文本的字体属性,如果字体是未嵌入的自定义字体,可能需要先用PDF编辑工具重新嵌入标准字体(比如Arial、Times New Roman)后再尝试提取。
内容的提问来源于stack exchange,提问作者Hakki
相关产品推荐
相关产品推荐

