You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pdftools批量加载PDF至R时触发‘Invalid Font Weight’错误

问题分析与解决方案

问题核心

使用R爬取CaixaBank研究报告的PDF文件后,单独读取任意单个PDF无异常,但批量加载为文本时触发「PDF error: Invalid Font Weight」错误。

错误根源

批量处理代码中存在关键逻辑错误:

  • 获取文件列表后,错误执行了strsplit(pdf_files_caixa, "\\s+"),将原本的字符向量拆分为嵌套列表,导致后续循环或sapply向pdf_text传递字符向量而非单个文件路径,这才是批量报错的直接原因(并非PDF字体本身问题,否则单个读取也会失败)。

修正方案

步骤1:修正文件列表获取代码

删除多余的strsplit操作,直接保留list.files的原生结果,同时修正正则匹配避免误判:

# 加载依赖包
library(tidyverse)
library(pdftools)

# 目标文件夹路径
directory_caixa <- "C:/TFM/caixa"

# 获取文件夹内所有PDF的完整路径(转义.避免匹配任意字符)
pdf_files_caixa <- list.files(directory_caixa, pattern = "\\.pdf$", full.names = TRUE)

步骤2:带错误捕获的批量读取方式

即使修正文件列表,个别PDF仍可能存在字体异常,添加错误捕获可避免批量操作中断,同时记录问题文件:

方式一:循环读取(保留全部记录)

text_caixa <- list()

for (i in seq_along(pdf_files_caixa)) {
  file_path <- pdf_files_caixa[i]
  tryCatch({
    # 读取PDF文本
    text <- pdftools::pdf_text(file_path)
    text_caixa[[i]] <- text
    cat(paste0("读取成功: ", basename(file_path), "\n"))
  }, error = function(e) {
    # 捕获错误并标记
    cat(paste0("读取失败 ", basename(file_path), ": ", e$message, "\n"))
    text_caixa[[i]] <- NA
  })
}

方式二:生成数据框(自动过滤失败记录)

# 创建包含文件路径和文本的数据框
text_caixa <- tibble(
  Document = pdf_files_caixa,
  text = sapply(pdf_files_caixa, function(x) {
    tryCatch({
      paste0(pdf_text(x), collapse = ' ')
    }, error = function(e) {
      warning(paste0("读取失败: ", basename(x), " - ", e$message))
      NA_character_
    })
  })
)

# 过滤读取失败的记录
text_caixa_clean <- text_caixa %>% filter(!is.na(text))

补充说明

  • 单个读取正常的原因:单独读取时传递的是单个文件路径,即使某文件有字体问题也仅影响当前操作;批量处理时因路径格式错误,pdf_text批量处理时遇到异常会直接中断整个流程。
  • 若确有PDF存在字体损坏,可尝试用pdftools::pdf_convert转成图片后再OCR提取文本,这是备选方案,优先修正路径格式问题。

内容的提问来源于stack exchange,提问作者DPedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:15:06