r - 在R中每2页将PDF文件拆分为多个文件

标签 r pdf pdftools

我有一个 300 页的 PDF 文档。我需要将此文件拆分为 150 个文件,每个文件包含 2 页。例如,第一个文档将包含原始文件的第 1 页和第 2 页,第二个文档包含第 3 页和第 4 页,依此类推。

也许我可以使用“pdftools”包,但我不知道如何使用。

最佳答案

1) pdftools 假设输入 PDF 在当前目录中,输出要进入同一目录,更改下面的输入,然后获取页数 num,计算起始页码和结束页码的 sten 向量,并重复调用 pdf_subset。请注意,pdf_lengthpdf_subset 函数来自 qpdf R 软件包,但也可以通过 pdftools R 软件包导入和导出来使用。

library(pdftools)

# inputs
infile <- "a.pdf"  # input pdf
prefix <- "out_"  # output pdf's will begin with this prefix

num <- pdf_length(infile)
st <- seq(1, num, 2)
en <- pmin(st + 1, num)

for (i in seq_along(st)) {
  outfile <- sprintf("%s%0*d.pdf", prefix, nchar(num), i)
  pdf_subset(infile, pages = st[i]:en[i], output = outfile)
}

2) pdfbox Apache pdfbox 实用程序可以拆分为每个 2 页的文件。从 pdfbox 下载 .jar 命令行实用程序文件并确保你已经安装了java。然后运行此假设您的输入文件是 a.pdf 并且位于当前目录中(或者直接从命令行运行带引号的部分,不带引号且不带 R)。如果要使用更高版本,则可能需要更改下面的 jar 文件名。下面列出的是当前最新的版本(不包括 alpha 版本)。

system("java -jar pdfbox-app-2.0.26.jar PDFSplit -split 2 a.pdf")

3)animation/pdftk 另一种选择是安装 pdftk程序,更改下面脚本顶部的输入并运行。使用 pdftk 获取输入中的页数 num,然后计算起始页码和结束页码 sten,以及然后重复调用 pdftk,每对 st/en 调用一次,将这些页面提取到另一个文件中。

library(animation)

# inputs
PDFTK <- "~/../bin/pdftk.exe"  # path to pdftk
infile <- "a.pdf"  # input pdf
prefix <- "out_"  # output pdf's will begin with this prefix

ani.options(pdftk = Sys.glob(PDFTK))

tmp <- tempfile()
dump_data <- pdftk(infile, "dump_data", tmp)
g <- grep("NumberOfPages", readLines(tmp), value = TRUE)
num <- as.numeric(sub(".* ", "", g))

st <- seq(1, num, 2)
en <- pmin(st + 1, num)

for (i in seq_along(st)) {
  outfile <- sprintf("%s%0*d.pdf", prefix, nchar(num), i)
  pdftk(infile, sprintf("cat %d-%d", st[i], en[i]), outfile)
}

关于r - 在R中每2页将PDF文件拆分为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72289280/

相关文章:

r - 如何在R中提取杂乱PDF的特定部分?

r - 根据另一个变量在 R 中按组创建日期序列

c# - 将 PDF 文件从 Fiddler 上传到 WebAPI 方法导致 415 Unsupported Media Type

java - 无法在 pdf :grails 中渲染图像

r - 根据以 ocr'd 图像结尾的段落将字符串拆分为列

c++ - 引用其他对象作为引用类字段

r - 在不规则网格上绘制和着色数据

R 向量系列的最大值

java - itext 和点阵打印机