用R语言从多张JPEG图片生成PDF

3
我有一个有多个JPEG文件的文件夹。 我如何在R中从这些JPEG生成PDF文件? 每个JPEG文件对应于PDF文件中的一页。 所有图像大小相同。 非常感谢您的帮助。

我有一个R脚本可以自动下载JPEG文件,想把它们放到PDF中。希望能用一个工具完成所有操作。 - dmitryungurean
使用 system 调用像 Ghostscript 这样的工具算不算使用“一个工具”? ;) - A5C1D2H2I1M1N2O1R2T1
R中没有原生支持PDF生成吗?为什么要使用Ghostscript? - dmitryungurean
@dmitryungurean R中有PDF生成功能,但它只是图形的输出模式,据我所知,它不支持对生成文档结构的任何控制。我建议R脚本调用某种外部工具来完成此任务。 - Jack Aidley
这个问答链接(https://dev59.com/9mkw5IYBdhLWcg3w8fBJ)是否有助于读取JPEG图像?从性能角度来看,@AnandaMahto的建议使用Ghostscript似乎是合理的。 - BenBarnes
显示剩余2条评论
3个回答

1
你可以轻松使用Latex来完成这个任务。这非常好,因为然后你可以使用Sweave来完成整个过程。
你可以按照以下方式进行操作:
% This is some Sweave file
\documentclass{article}
\usepackage{graphicx}
\begin{document}

<<results=tex,echo=FALSE>>=
mypics <- dir('mypics')
for(i in mypics){
cat("\\includegraphics{", i, "}\n\n", sep = "")
}
@
\end{document}

好的,你需要设置Sweave管道,但稍加调整即可轻松自动化整个过程。


谢谢 Joris,我会尝试使用Latex + Sweave。这对我来说是全新的 :) - dmitryungurean

1
如果您坚持使用 R(其他工具更适合),可以尝试类似于以下的方法(速度较慢,未经测试):
   lf = list.files(pattern = "jpeg") # image filenames

   library(jpeg)
   jpegs = lapply(lf, readJPG)

   library(grid)
   pdf("output.pdf", width=8, height=4)
   grid.raster(jpegs[[1]])
   lapply(jpegs[-1], function(x) {grid.newpage() ; grid.raster(x)} ) -> bquiet
   dev.off()

0
如果您坚持使用R来完成此任务,那么您可以打开一个pdf绘图设备,使用par设置边距(默认可能太大且不居中),然后在循环中使用plot.new开始新页面和plot.window设置坐标等等,而不绘制轴等,使用ReadImages包中的read.jpeg函数(或其他读取工具/包,EBImage是另一种可能性),然后使用rasterImage将jpeg绘制到pdf设备上(或用其他图像绘制函数替换其中的某些步骤,例如ReadImages中的plot方法)。
但总体而言,使用更适合此类任务的工具可能更容易/更快/更好/...。 ImageMagick套件程序是一个选择,LaTeX也被提及,可能还有其他工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接