如何在RStudio中导入EPS(PostScript/矢量格式)并转换为机器编码文本?
解决EPS导入R并转换为机器编码文本的方案
我之前折腾EPS导入R的时候也踩过不少坑,结合你说的只能读PDF/SVG的情况,给你几个实际可行的解决方案,亲测有效:
1. 先搞定核心依赖:Ghostscript
不管是magick还是grImport2,处理EPS都离不开Ghostscript,大部分导入失败的根源都是这个工具没装好或者没配置对:
- 先在R控制台跑
system("gs --version"),如果弹出版本号就没问题;要是报错,说明你得先装Ghostscript,并且把它的bin目录加到系统环境变量PATH里,装完记得重启R再试。
2. 用magick打通EPS → PDF/SVG → 文本的流程
既然你已经能读取PDF/SVG,那可以先把EPS转成这两种格式,再提取文本,分两种场景:
场景A:EPS是矢量格式(文本可编辑)
这种情况转成SVG后直接解析XML就能提取文本:
library(magick) library(xml2) # 读取EPS并转存为SVG eps_image <- image_read("你的文件路径.eps") image_write(eps_image, "临时文件.svg", format = "svg") # 解析SVG提取所有文本节点 svg_doc <- read_xml("临时文件.svg") text_nodes <- xml_find_all(svg_doc, "//text") extracted_text <- xml_text(text_nodes) # 查看提取的文本 print(extracted_text)
场景B:EPS是 raster 化的(文本是图片像素)
这种就得用OCR工具来识别文本,推荐tesseract包:
library(magick) library(tesseract) # 读取EPS转成PNG(OCR识别效果更好) eps_image <- image_read("你的文件路径.eps") png_image <- image_convert(eps_image, format = "png") # 调用tesseract提取文本 extracted_text <- ocr(png_image) # 输出识别结果 cat(extracted_text)
3. 重新尝试grImport2(如果偏好这个工具)
确认Ghostscript正常后,试试这个代码导入EPS并提取文本:
library(grImport2) # 导入EPS为Picture对象 eps_pic <- readPicture("你的文件路径.eps") # 筛选出所有文本元素并提取内容 text_elements <- eps_pic@content[sapply(eps_pic@content, function(x) inherits(x, "TextContent"))] extracted_text <- sapply(text_elements, function(x) x@label) print(extracted_text)
最后一招:手动用Ghostscript转格式
如果上面的方法都不行,直接用Ghostscript命令行把EPS转成PDF,再用你熟悉的image_read_pdf读取:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=输出文件.pdf 输入文件.eps
内容的提问来源于stack exchange,提问作者TofuTofuTofu
相关产品推荐
相关产品推荐

