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

R语言使用pdftools读取PDF文本如何获取字符串类型结果

R中使用pdftools读取PDF获取字符串类型内容的实现方法

现有实现代码

install.packages("pdftools")
library("pdftools")
pdf.file <- "https://eparlib.nic.in/bitstream/123456789/809853/1/pms_16_17_07-02-2019_eng.pdf"
setwd("D:/Assignment 1/")
download.file(pdf.file, destfile = "speech1.pdf", mode = "wb")
pdf.text <- pdftools::pdf_text("speech1.pdf")
cat(pdf.text[[2]])
typeof(pdf.text)

核心原因说明

首先明确R的类型规则:R底层没有独立的string基础类型,所有字符串的底层存储类型都是character,你需要的“字符串类型”实际是长度为1的character向量(单文本标量)。
pdf_text()默认返回的是和PDF页数等长的character向量,每个元素对应单页的文本内容,因此直接调用typeof()只会返回character,但对象是多元素向量,不是单块字符串。

可行实现方案

方案1:获取原生R格式的单字符串

直接用paste()将多页文本拼接为单元素character向量,页与页之间用换行符分隔,这就是R原生支持的标准字符串格式:

# 拼接所有页面为完整单字符串
pdf_text_string <- paste(pdf.text, collapse = "\n\n")

# 验证
typeof(pdf_text_string) # 底层类型为character,符合R字符串存储规则
length(pdf_text_string) # 返回1,说明是单个字符串标量
cat(pdf_text_string) # 可直接输出完整文本

如果只需要指定页面作为字符串,直接提取对应下标的元素即可,单元素提取的结果本身就是长度为1的字符串:

# 提取第2页为单独字符串
page2_string <- pdf.text[[2]]

方案2:适配tidyverse生态的显式string类

如果你需要和stringr、dplyr等tidyverse生态的函数适配,想要显式带string类属性的对象,可以借助stringr包转换,转换后的对象兼容所有R原生字符串操作函数:

# 安装加载stringr
install.packages("stringr")
library(stringr)

# 转换为显式string类对象
pdf_text_string <- as_string(paste(pdf.text, collapse = "\n\n"))

# 验证
class(pdf_text_string) # 类属性包含"string",可被tidyverse函数直接识别为字符串
typeof(pdf_text_string) # 底层仍为character,由R底层类型规则决定,不存在其他存储形式

注意:不存在能让typeof()返回"string"的转换方法,R的底层类型定义里就没有对应枚举值,所有声称返回string类型的R包,本质都是在character类型基础上加了类属性,底层存储逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:27:24