工作中經常會用到pdf,有時候需對pdf檔案進行一些處理卻讓我們束手無策,抓耳撓腮。
比如拆分pdf。
1官方pdf閱讀器
2 列印
這個估計是最常用的方法了。原來把拆分pdf的功能隱藏到這兒了。合併pdf模組是乙個付費專案,為啥拆分pdf也不搞成付費專案。難道工作中合併pdf的需求要遠遠高於拆分pdf的需求?
列印這個方法主要有幾個可調節的引數。
(1) 印表機引數一定要選microsoft print to pdf
(2) 份數,就是自己需求的分數
(3) 列印頁碼,可以根據自己的需求設定。比如:
我只需要第1頁,則表示為1或1-1;
我需要第2頁到第10頁,則表示為2-3
我需要第1頁,第5頁到第10頁,第12頁,則可以表示為2,5-10,12。如圖所示。
這種方法雖然很好用,能滿足我們拆分pdf的大部分需求。不過我覺得還是有一些美中不足的地方。
目前我能感受到的大致2點:
(1) 操作物件是單個pdf檔案,如果我有10個甚至上百個的pdf需要做類似或相同處理,則比較費時費力。
(2) 列印後的檔案是單個pdf檔案,比如我的需求是將原始pdf的第1頁,第5到10頁,第12頁單獨列印乙個檔案,照上圖列印後是乙個第1頁,第5到10頁,第12頁的合併pdf檔案。當然也可以單獨列印這些頁數,但是當原始pdf檔案數量過多時,也是比較費時費力。
總結一句,就是不能很好解決批量拆分的需求。
3以瀏覽器方式開啟pdf檔案執行列印,與2比較類似就不再贅述
4網路工具
網路上有很多關於pdf處理的小工具,也能解決很多我們對於pdf的許多需求。
不過這些工具雖然好用,我卻不願使用。主要基於3個原因:
(1)我窮。這些網路工具基本上都是要收費的。我沒錢
(2)個人隱私洩露。大部分軟體或工具都需要使用者註冊,繫結手機號、郵箱或者社交軟體。有可能會洩露個人資訊。
(3)檔案隱私。網路工具的基本原理大致是使用者上傳pdf檔案給伺服器,伺服器處理資料,伺服器返回處理結果給使用者。這中間伺服器有沒有偷偷備份使用者上傳的資料也不得而知。如果是工作中需要保密的pdf檔案,也有洩露檔案隱私的風險。
前怕狼,後畏虎。那不如換個思路。
沒有滿意的解決辦法,那我們就自己動手實現乙個解決辦法吧。
python第三方庫里有個處理pdf的庫pypdf2,用它實現來解決拆分pdf的需求。
pypdf2庫主要有pdffilereader,pdffilewriter、pdffilemerger、pdffilereader和pageobject這4個常用模組。拆分pdf會用到pdffilereader,pdffilewriter、pageobject
為了方便描述,我就分別稱其為讀取器和寫入器吧。這個庫拆分pdf大致的思路邏輯是:
先在有乙個pdf檔案需要處理,那麼開啟這個pdf,將其以引數的形式傳遞給讀取器模組,例項化乙個pdffilereader物件。這個讀取器物件有乙個頁碼數量numpages的屬性,可以知道pdf有多少頁;也有乙個getpage()的方法,用for迴圈遍,可以獲得pdf的每一頁的pageobject物件例項。然後例項化乙個pdffilewriter物件,這個寫入器有個方法addpage(),將獲得的pageobject例項通過寫入器寫入已指定路徑下建立的檔案裡。
至此,拆分pdf的思路已經完成。下面就是具體的**實現。
其實,**還有很多可以優化和豐富的地方。感興趣的同學可以思考思考,看看我們想的是不是一樣的。後續優化和豐富,以後有時間再分享。
最後碼字不易,如果覺得對大家有幫助,感謝多多支援。
r 拆分檔名
我有乙個這樣的檔案的名稱 name1.csv,我想提取這個字串的兩個子字串。乙個將name1儲存在乙個變數中,另乙個將儲存副檔名csv的另乙個變數儲存在另乙個變數中。方法1使用strsplit r strsplit name1.csv 1 1 name1 csv r 請注意,您a 需要轉義點 因為它...
Linux之split拆分檔案
linux 中split命令可以將乙個大檔案拆分成幾個小檔案。split help version 行數 b 位元組 c 位元組 l 行數 要切割的檔案 輸出檔案字首 注意,在預設情況下將按照每1000行切割成乙個小檔案。wc l data 先檢查一下data有多少行 split l 10000 d...
利用python對CSV檔案分組並拆分檔案
指令碼背景 提取了不同類別下的購買手機號碼,由於資料量巨大,需要對資料進行分組,得到不同類別下的手機號碼,同時自動拆分檔案,按照乙個特定類別輸出檔案。import pandas as pd read data from csv df pd.read csv c users administrator...