我有一個 300 頁的 PDF 檔案。我需要將此檔案拆分為 150 個檔案,每個檔案包含 2 頁。例如,第一個檔案將包含原始檔案的第 1 頁和第 2 頁、第 2 個檔案、第 3 頁和第 4 頁等等。
也許我可以使用“pdftools”包,但我不知道如何。
uj5u.com熱心網友回復:
1) pdftools 假設輸入的PDF在當前目錄,輸出到同一個目錄,改變下面的輸入得到頁數num,計算起始頁碼和結束頁碼的st向量en,反復呼叫pdf_subset。請注意,pdf_lengthandpdf_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)
}
uj5u.com熱心網友回復:
既不pdftools也不qpdf(第一個依賴于)不支持除“每一頁”之外的拆分 PDF 檔案。您可能需要依賴外部程式,我相信您可以通過為每個 2 頁輸出呼叫一次pdftk來做到這一點。
quux.pdf我在當前作業目錄中有一個 36 頁的 PDF 。
str(pdftools::pdf_info("quux.pdf"))
# List of 11
# $ version : chr "1.5"
# $ pages : int 36
# $ encrypted : logi FALSE
# $ linearized : logi FALSE
# $ keys :List of 8
# ..$ Producer : chr "pdfTeX-1.40.24"
# ..$ Author : chr ""
# ..$ Title : chr ""
# ..$ Subject : chr ""
# ..$ Creator : chr "LaTeX via pandoc"
# ..$ Keywords : chr ""
# ..$ Trapped : chr ""
# ..$ PTEX.Fullbanner: chr "This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) kpathsea version 6.3.4"
# $ created : POSIXct[1:1], format: "2022-05-17 22:54:40"
# $ modified : POSIXct[1:1], format: "2022-05-17 22:54:40"
# $ metadata : chr ""
# $ locked : logi FALSE
# $ attachments: logi FALSE
# $ layout : chr "no_layout"
我也已pdftk安裝并在頁面中可用,
Sys.which("pdftk")
# pdftk
# "C:\\PROGRA~2\\PDFtk Server\\bin\\pdftk.exe"
有了這個,我可以運行一個外部腳本來創建 2 頁 PDF:
list.files(pattern = "pdf$")
# [1] "quux.pdf"
pages <- seq(pdftools::pdf_info("quux.pdf")$pages)
pages <- split(pages, (pages - 1) %/% 2)
pages[1:3]
# $`0`
# [1] 1 2
# $`1`
# [1] 3 4
# $`2`
# [1] 5 6
for (pg in pages) {
system(sprintf("pdftk quux.pdf cat %s-%s output out_i-i.pdf",
min(pg), max(pg), min(pg), max(pg)))
}
list.files(pattern = "pdf$")
# [1] "out_01-02.pdf" "out_03-04.pdf" "out_05-06.pdf" "out_07-08.pdf"
# [5] "out_09-10.pdf" "out_11-12.pdf" "out_13-14.pdf" "out_15-16.pdf"
# [9] "out_17-18.pdf" "out_19-20.pdf" "out_21-22.pdf" "out_23-24.pdf"
# [13] "out_25-26.pdf" "out_27-28.pdf" "out_29-30.pdf" "out_31-32.pdf"
# [17] "out_33-34.pdf" "out_35-36.pdf" "quux.pdf"
str(pdftools::pdf_info("out_01-02.pdf"))
# List of 11
# $ version : chr "1.5"
# $ pages : int 2
# $ encrypted : logi FALSE
# $ linearized : logi FALSE
# $ keys :List of 2
# ..$ Creator : chr "pdftk 2.02 - www.pdftk.com"
# ..$ Producer: chr "itext-paulo-155 (itextpdf.sf.net-lowagie.com)"
# $ created : POSIXct[1:1], format: "2022-05-18 09:37:56"
# $ modified : POSIXct[1:1], format: "2022-05-18 09:37:56"
# $ metadata : chr ""
# $ locked : logi FALSE
# $ attachments: logi FALSE
# $ layout : chr "no_layout"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/480246.html
