在R中合并(绑定)已有的pdf文件

3
下面的函数是由@Tyler Rinker提供的,可以在这里找到:这里 我正在苦苦挣扎的函数:
  mergePDF <-  function(..., file, gsversion = NULL, in.file = NULL) {
                        if (is.null(in.file)) {
                        in.file <- substitute(...())
                        } 
                      infiles <- paste(unlist(lapply(file.folder, function(y) as.character(y))), 
                      collapse = " ")
                      if (is.null(gsversion)) {
                      gsversion <- names(which(Sys.which(c("gswin64c")) != paste("C:/Program Files/gs9.15/bin/gswin64c.exe",sep="")))
                          }   
                      pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="
                     system(paste(paste(gsversion, pre, file, sep = ""), infiles, collapse=""))
                          }

我希望将多个现有的pdf文件合并成一个pdf文件。我有多个按照id命名的文件,例如:doc_123232.pdf、doc_434324.pdf等。
如何设置in.file
理想情况下,我只想设置存储文件的文件夹,类似于:Sys.glob("C:/Path/doc*.pdf") 编辑:目前我只尝试了1个pdf页面,而不是多个文件。
mergePDF(file="C:/1pagepdf.pdf",in.file="C:/path/doc_123232.pdf")

我遇到了错误:had status 127,很明显我不理解参数in.file

你尝试过什么?默认情况下,in.file会根据...中的参数自动构建,但你也可以显式地将字符向量传递给in.file参数。 - Richie Cotton
我尝试了将其作为char向量传递,但仍然出现错误127。 - Maximilian
我会使用 @agstudy 的答案,而不是构建一个R函数来调用系统(Ghostscript)。这样会容易得多。 - Thomas
当然,但如果该函数对@Tyler Rinker有效,则通常也应该有效。 - Maximilian
1个回答

7

以下是如何使用一个最小化可重现的示例进行操作。我相信你能够分解它,并找出如何应用于你的pdf文件。虽然 reports 包不是必需的,但我喜欢我的工作流程中使用 folderdelete,所以我在这里使用了它:

library(plotflow)
library(reports)

## make a folder to store the pdfs
folder(deleteMe)

## create a bunch of various sized pdfs
lapply(1:3, function(i) {
    pdf(sprintf("deleteMe/test%s.pdf", i), width=sample(4:7, 1))
    plot(1:10, 1:10, main = sprintf("Title: test%s.pdf", i))
    dev.off()
})

## paste the paths to pdfs together in one string w/ spaces
plotflow:::mergePDF(
    in.file=paste(file.path("deleteMe", dir("deleteMe")), collapse=" "),
    file="merged.pdf"
)

## delete MWE
delete('deleteMe')

这是用于 plotflow 中的辅助函数,帮助在 R 中进行工作。如果我已经有了 PDF 文件,我可能会直接使用 ghostscript。


非常感谢您!这是in.file缺失的部分。 - Maximilian

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