R 語言操作 PDF 文件
PDF 格式的示例文件 pandoc-beamer.pdf 是一個(gè) LaTeX 編譯出來的幻燈片,一共有 8 頁。下面的操作都在這個(gè)文件上進(jìn)行。
qpdf
統(tǒng)計(jì) PDF 文件的頁數(shù)
qpdf::pdf_length(input = "data/pandoc-beamer.pdf")
## [1] 8
計(jì)數(shù)正確。
按頁拆分 PDF 文件
qpdf::pdf_split() 將一個(gè)含有多頁的 PDF 文檔逐頁拆分。執(zhí)行如下操作,拆分后變成 8 個(gè) PDF 文件,每個(gè)文件是一頁。
qpdf::pdf_split(input = "data/pandoc-beamer.pdf", output = "data/")
## [1] "data/_1.pdf" "data/_2.pdf" "data/_3.pdf" "data/_4.pdf" "data/_5.pdf" ## [6] "data/_6.pdf" "data/_7.pdf" "data/_8.pdf"
提取 PDF 的部分頁面
設(shè)置參數(shù) pages = c(1,3,5) 表示提取原 PDF 文檔中的第 1、3 和 5 頁。
qpdf::pdf_subset(input = "data/pandoc-beamer.pdf", pages = c(1,3,5), output = "data/pdf_subset.pdf")
## [1] "/Users/xiangyun/Downloads/Document/xiangyun/content/post/2025-03-17-pdf/data/pdf_subset.pdf"
合并 PDF 文件
將多個(gè) PDF 文件合并成一個(gè)文件。
qpdf::pdf_combine( input = c("data/_1.pdf", "data/_1.pdf","data/_1.pdf"), output = "data/pdf_combine.pdf")
## [1] "/Users/xiangyun/Downloads/Document/xiangyun/content/post/2025-03-17-pdf/data/pdf_combine.pdf"
旋轉(zhuǎn) PDF 文件
將示例 PDF 文件的第 1,3,5 頁旋轉(zhuǎn) 90 度。
qpdf::pdf_rotate_pages( input = "data/pandoc-beamer.pdf", pages = c(1,3,5), angle = 90, output = "data/pdf_rotate_pages.pdf" )
## [1] "/Users/xiangyun/Downloads/Document/xiangyun/content/post/2025-03-17-pdf/data/pdf_rotate_pages.pdf"
壓縮 PDF 文件
qpdf::pdf_compress(input = "data/pandoc-beamer.pdf", output = "data/pdf_compress.pdf")
## [1] "/Users/xiangyun/Downloads/Document/xiangyun/content/post/2025-03-17-pdf/data/pdf_compress.pdf"
pdftools
相比于 qpdf 包,pdftools 包提供更多的功能。
PDF 文檔轉(zhuǎn)圖片
受支持的圖片轉(zhuǎn)化格式如下
pdftools::poppler_config()
## $version ## [1] "23.04.0" ## ## $can_render ## [1] TRUE ## ## $has_pdf_data ## [1] TRUE ## ## $has_local_font_info ## [1] TRUE ## ## $supported_image_formats ## [1] "png" "jpeg" "jpg" "tiff" "pnm"
將 PDF 文檔中的部分頁面轉(zhuǎn)化為圖片
pdftools::pdf_convert( pdf = "data/pandoc-beamer.pdf", pages = c(1, 3, 5), format = "png", # supported_image_formats dpi = 72, # 值越大圖片越清晰 filenames = c("data/pdf_convert_1.png", "data/pdf_convert_2.png", "data/pdf_convert_3.png") )
## Converting page 1 to data/pdf_convert_1.png... done! ## Converting page 3 to data/pdf_convert_2.png... done! ## Converting page 5 to data/pdf_convert_3.png... done!
## [1] "data/pdf_convert_1.png" "data/pdf_convert_2.png" "data/pdf_convert_3.png"
讀取 PDF 的元數(shù)據(jù)
PDF 文檔有自己的元數(shù)據(jù),元數(shù)據(jù)中記錄了誰什么時(shí)間用什么軟件創(chuàng)建的等信息。
pdftools::pdf_info(pdf = "data/pandoc-beamer.pdf")
## $version ## [1] "1.5" ## ## $pages ## [1] 8 ## ## $encrypted ## [1] FALSE ## ## $linearized ## [1] FALSE ## ## $keys ## $keys$Author ## [1] "張三, 李四" ## ## $keys$Title ## [1] "Quarto 幻燈片模版" ## ## $keys$Subject ## [1] "" ## ## $keys$Creator ## [1] "LaTeX via pandoc" ## ## $keys$Keywords ## [1] "" ## ## $keys$Producer ## [1] "LuaTeX-1.17.0" ## ## $keys$Trapped ## [1] "" ## ## $keys$PTEX.FullBanner ## [1] "This is LuaHBTeX, Version 1.17.0 (TeX Live 2023)" ## ## ## $created ## [1] "2023-09-01 23:37:06 CST" ## ## $modified ## [1] "2023-09-01 23:37:06 CST" ## ## $metadata ## [1] "" ## ## $locked ## [1] FALSE ## ## $attachments ## [1] FALSE ## ## $layout ## [1] "no_layout"
讀取 PDF 文檔中的文本
分頁提取 PDF 文檔中的文本數(shù)據(jù),返回一個(gè)與 PDF 文檔頁數(shù)相同的字符串向量。
pdftools::pdf_text(pdf = "data/pandoc-beamer.pdf")
## [1] "In the morning In the eveningnnnnn Quarto 幻燈片模版nn 張三 李四nn XX 大學(xué)nn XX 學(xué)院n" ## [2] "In the morning In the eveningnnnn 目錄 In In the morningnnn In the eveningn" ## [3] "In the morning In the eveningnnnnn In the morningn" ## [4] "In the morning In the eveningnnnn Getting upnnnnn ? Turn off alarmn ? Get out of bedn" ## [5] "In the morning In the eveningnnnn Breakfastnnnnn ? Eat eggsn ? Drink coffeen" ## [6] "In the morning In the eveningnnnnn In the eveningn" ## [7] "In the morning In the eveningnnnn Dinnernnnnn ? Eat spaghettin ? Drink winen" ## [8] "In the morning In the eveningnnnn Going to sleepnnnnn ? Get in bedn ? Count sheepn"
可見返回 8 個(gè)字符串,每個(gè)字符串的內(nèi)容來自 PDF 文檔的相應(yīng)頁面。
讀取 PDF 文檔中使用的字體
pdftools::pdf_fonts(pdf = "data/pandoc-beamer.pdf")
## name type embedded file ## 1 VSAGHM+LMSans10-Bold cid_type0c TRUE ## 2 CESELI+FandolHei-Bold cid_type0c TRUE ## 3 RLLOJF+FandolHei-Regular cid_type0c TRUE ## 4 FBPCKK+LMSans8-Regular cid_type0c TRUE ## 5 ALCPBK+LatinModernMath-Regular cid_type0c TRUE ## 6 UNGCGM+LMSans10-Regular cid_type0c TRUE
讀取 PDF 文檔中包含的附件
pdftools::pdf_attachments(pdf = "data/pandoc-beamer.pdf")
## list()
我的這個(gè)示例文件不含附件
讀取 PDF 文檔中的目錄
pdftools::pdf_toc(pdf = "data/pandoc-beamer.pdf")
## $title ## [1] "" ## ## $children ## $children[[1]] ## $children[[1]]$title ## [1] "In the morning" ## ## $children[[1]]$children ## list() ## ## ## $children[[2]] ## $children[[2]]$title ## [1] "In the evening" ## ## $children[[2]]$children ## list()
讀取 PDF 文檔的頁面大小
pdftools::pdf_pagesize(pdf = "data/pandoc-beamer.pdf")
## top right bottom left width height ## 1 0 362.8 272.1 0 362.8 272.1 ## 2 0 362.8 272.1 0 362.8 272.1 ## 3 0 362.8 272.1 0 362.8 272.1 ## 4 0 362.8 272.1 0 362.8 272.1 ## 5 0 362.8 272.1 0 362.8 272.1 ## 6 0 362.8 272.1 0 362.8 272.1 ## 7 0 362.8 272.1 0 362.8 272.1 ## 8 0 362.8 272.1 0 362.8 272.1
示例文檔一共 8 頁,每頁的長寬都一樣大。示例文檔是一個(gè) LaTeX 制作的 beamer 幻燈片,長寬比為 4:3,正好是 362.8 / 272.1 = 4/3.
magick
magick 包配合 tesseract 包可以做 OCR 識別,比如提取 PDF(掃描圖片) 或圖片文件中的文本。國家統(tǒng)計(jì)局的統(tǒng)計(jì)年鑒是以 JPEG 格式的圖形發(fā)布的。為了快一點(diǎn)整理數(shù)據(jù),我用到了 OCR 識別。
library(magick)
## Linking to ImageMagick 7.1.1.38 ## Enabled features: fontconfig, freetype, ghostscript, heic, lcms, raw, webp ## Disabled features: cairo, fftw, pango, rsvg, x11
## Using 11 threads
input <- image_read("data/C02-26.jpeg") # 去掉背景 text <- input %>% image_resize("2000x") %>% image_convert(type = 'Grayscale') %>% image_trim(fuzz = 40) %>% image_write(format = 'png', density = '300x300') # OCR 識別 text_ocr <- text %>% tesseract::ocr() # 輸出文本(主要是數(shù)字) cat(text_ocr,sep = "\n")
## 2-26 FHKE AIT ISS RUALCM BAO (2020) ## b2R XB MBAOA ## “A x WA B x ADRS Es x ## %) ## ## 2B 1156394786 586822815 569571971 37750200 9518082 28232118 3.26 1.62 4.96 ## dt me 19301588 9847962 9453626 172244 38270 133974 0.89 0.39 1.42 ## KX # 11997953 6162151 5835802 169973 41646 128327 1.42 0.68 2.20 ## sl 4k 59521267 29691311 29829956 1128423 260881 867542 1.90 0.88 2.91 ## & 29205721 14857263 14348458 422524 123823 298701 1.45 0.83 2.08 ## ARA 20671482 10519559 10151923 793074 216560 576514 3.84 2.06 5.68 ## Ne ap 37853468 18801024 19052444 382208 105686 276522 1.01 0.56 1.45 ## a at 21254730 10556023 10698707 321318 96020 225298 1.51 0.91 241 ## PHL 28563622 14253881 14309741 437943 132119 305824 1.53 0.93 2.14 ## + 8 22434599 11600663 10833936 401585 81132 320453 1.79 0.70 2.96 ## I 71856068 36156582 35699486 2211291 460758 1750533 3.08 1.27 4.90 ## af I 55885807 29069882 26815925 1754402 437933 1316469 3.14 1.51 4.91 ## zh 49284489 24775087 24509402 2739952 668212 2071740 5.56 2.70 8.45 ## ia 2 33514861 17115416 16399445 970202 174482 795720 2.89 1.02 4.85 ## a) 35266271 17908471 17357800 876897 179241 697656 249 1.00 4.02 ## wy FR 82464815 41142117 41322698 3308280 735197 2573083 4.01 1.79 6.23 ## a 76376565 37582340 38794225 2228594 544348 1684246 2.92 1.45 4.34 ## $A dk 48332080 24601435 23730645 1341340 294484 1046856 2.78 1.20 441 ## 4h 53475342 27071624 26403718 1137340 287428 849912 2.13 1.06 3.22 ## DOR 102262628 54125030 48137598 1826344 394059 1432285 1.79 0.73 2.98 ## a) 38284303 19595172 18689131 1188381 248888 939493 3.10 1.27 5.03 ## 88 8067507 4244519 3822988 327406 77970 249436 4.06 1.84 6.52 ## BRK 26955796 13541057 13414739 521169 138879 382290 1.93 1.03 2.85 ## Jil 70203754 35298112 34905642 3330733 954914 2375819 4.74 2.71 6.81 ## BON 29320110 14772958 14547152 2574322 604189 1970133 8.78 4.09 13.54 ## zB 37971803 19601151 18370652 2193281 641814 1551467 5.78 3.27 8.45 ## Ae 2753235 1457393 1295842 773442 297954 475488 28.09 20.44 36.69 ## BE 32676794 16632837 16043957 1088905 313163 775742 3.33 1.88 4.84 ## HOR 20166288 10168955 9997333 1680299 474829 1205470 8.33 467 12.06 ## #8 4691001 2398640 2292361 470197 147534 322663 10.02 6.15 14.08 ## 7s 5734650 2906355 2828295 291030 77018 214012 5.07 2.65 7.57 ## iE 20046189 10367845 9678344 687101 268651 418450 3.43 2.59 4.32 ## S$: RE“VWBAO” HSS Bisse EHXOSROSPRDAOS
最后,邊核對邊手動整理一下,去掉一些亂碼。
其它
放大 PDF 文檔
用 LaTeX 放大 pdf 文檔,使用場景是將一些電子版書籍去掉白邊、適當(dāng)放大,在電子設(shè)備上觀看起來體驗(yàn)更好。
documentclass[a4paper,12pt]{report} usepackage[final]{pdfpages} begin{document} includepdf[pages=19-26, scale=1.3, delta=0mm 5mm, frame]{quarto-chinese.pdf} end{document}
生成 PDF 文檔
編輯 PDF 中的文本和圖像。
LaTeX 源碼編輯(LaTeX 語法) Makdown + Pandoc + LaTeX (Markdown 語法) R Markdown / R Sweave(R Markdown 語法) 寫輪眼 / pagedown 網(wǎng)頁轉(zhuǎn)化(R Markdown 語法) Office Word / PowerPoint 轉(zhuǎn)化運(yùn)行環(huán)境
R 軟件及 R 包的版本信息
sessionInfo(package = c( "qpdf", "pdftools", "magick" ))
## R version 4.4.3 (2025-02-28) ## Platform: x86_64-apple-darwin20 ## Running under: macOS Sequoia 15.3.2 ## ## Matrix products: default ## BLAS: /Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/lib/libRblas.0.dylib ## LAPACK: /Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0 ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## time zone: Asia/Shanghai ## tzcode source: internal ## ## attached base packages: ## character(0) ## ## other attached packages: ## [1] qpdf_1.3.4 pdftools_3.5.0 magick_2.8.5 ## ## loaded via a namespace (and not attached): ## [1] cli_3.6.4 knitr_1.49 rlang_1.1.5 xfun_0.51 ## [5] promises_1.3.2 jsonlite_1.9.1 tesseract_5.2.2 askpass_1.2.1 ## [9] htmltools_0.5.8.1 httpuv_1.6.15 sass_0.4.9 methods_4.4.3 ## [13] rappdirs_0.3.3 datasets_4.4.3 rmarkdown_2.29 evaluate_1.0.3 ## [17] jquerylib_0.1.4 fastmap_1.2.0 yaml_2.3.10 lifecycle_1.0.4 ## [21] utils_4.4.3 bookdown_0.42 compiler_4.4.3 Rcpp_1.0.14 ## [25] rstudioapi_0.17.1 base_4.4.3 stats_4.4.3 graphics_4.4.3 ## [29] later_1.4.1 blogdown_1.20 digest_0.6.37 R6_2.6.1 ## [33] servr_0.32 magrittr_2.0.3 bslib_0.9.0 tools_4.4.3 ## [37] grDevices_4.4.3 cachem_1.1.0
相關(guān)知識
在閱讀中促進(jìn)嬰幼兒語言能力的發(fā)展.pdf全文
詳解R語言中生存分析模型與時(shí)間依賴性ROC曲線可視化
德昂族語言文字
言語治療,其他圖文簡介
語言的生命在于應(yīng)用——簡評《語言文字應(yīng)用研究》叢書
已知R[EAX]=80706050H,R[EBX]=40302010H,R[ED
語言軟件哪個(gè)好
免費(fèi)語言學(xué)習(xí)軟件
4.3 嬰兒言語的發(fā)展
必備語言學(xué)習(xí)App推薦
網(wǎng)址: R 語言操作 PDF 文件 http://m.u1s5d6.cn/newsview1651821.html
推薦資訊
- 1發(fā)朋友圈對老公徹底失望的心情 12775
- 2BMI體重指數(shù)計(jì)算公式是什么 11235
- 3補(bǔ)腎吃什么 補(bǔ)腎最佳食物推薦 11199
- 4性生活姿勢有哪些 盤點(diǎn)夫妻性 10428
- 5BMI正常值范圍一般是多少? 10137
- 6在線基礎(chǔ)代謝率(BMR)計(jì)算 9652
- 7一邊做飯一邊躁狂怎么辦 9138
- 8從出汗看健康 出汗透露你的健 9063
- 9早上怎么喝水最健康? 8613
- 10五大原因危害女性健康 如何保 7828