我有一个 300 页的 PDF 文档。我需要将此文件拆分为 150 个文件,每个文件包含 2 页。例如,第一个文档将包含原始文件的第 1 页和第 2 页,第二个文档包含第 3 页和第 4 页,依此类推。
也许我可以使用“pdftools”包,但我不知道如何使用。
最佳答案
1) pdftools 假设输入 PDF 在当前目录中,输出要进入同一目录,更改下面的输入,然后获取页数 num
,计算起始页码和结束页码的 st
和 en
向量,并重复调用 pdf_subset
。请注意,pdf_length
和 pdf_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
,然后计算起始页码和结束页码 st
和 en
,以及然后重复调用 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/