使用 R 合并现有的 PDF 文件

sts*_*sts 7 pdf r

我想使用 R 合并已经存在(已经保存在我的电脑中)的 PDF 文件。

我已经尝试使用开源软件来合并它们并且它工作正常但是由于我有数百个文件要合并在一起,我希望找到更快的东西(我的目标是自动创建文件 - 或更新,只需运行 R 命令)。

我习惯了 R 所以我想找到一种方法来使用这个程序创建这个新的多页 PDF。有什么功能可以为我做到这一点吗?

谢谢!

Ral*_*lph 27

对于不system()依赖于使用or调用底层操作系统 的基于 R 的解决方案system2(),我建议使用{qpdf} 包。

您可以将此软件包安装为:

install.packages("qpdf")
Run Code Online (Sandbox Code Playgroud)

然后您将想要使用该pdf_combine()功能。检查其文档如下:

?qpdf::pdf_combine
Run Code Online (Sandbox Code Playgroud)

然后您可以合并任意数量的 pdf。在这里,我将file.pdf, file2.pdf合并file3.pdf到一个名为 的新文件中output.pdf:

qpdf::pdf_combine(input = c("file.pdf", "file2.pdf", "file3.pdf"),
                  output = "output.pdf")
Run Code Online (Sandbox Code Playgroud)


bsc*_*idr 2

如果您安装pdftk(在此处找到),那么您可以使用以下功能:

concatenate_pdfs <- function(input_filepaths, output_filepath) {
  # Take the filepath arguments and format them for use in a system command
  quoted_names <- paste0('"', input_filepaths, '"')
  file_list <- paste(quoted_names, collapse = " ")
  output_filepath <- paste0('"', output_filepath, '"')
  # Construct a system command to pdftk
  system_command <- paste("pdftk",
                          file_list,
                          "cat",
                          "output",
                          output_filepath,
                          sep = " ")
  # Invoke the command
  system(command = system_command)
}
Run Code Online (Sandbox Code Playgroud)

可以这样调用:

concatenate_pdfs(input_filepaths = c("My First File.pdf", "My Second File.pdf"),
                 output_filepath = "My Combined File.pdf")
Run Code Online (Sandbox Code Playgroud)

这只是调用以下系统命令的用户友好方式:

pdftk "My First File.pdf" "My Second File.pdf" cat output "My Combined File.pdf"
Run Code Online (Sandbox Code Playgroud)