我在一個文件夾中有一堆pdf文件,並希望知道通過免費的PDF計數器軟件或編程方式如何計算每個pdf的頁數的最佳方式,並將結果放入一個excel或訪問表。我已經有了填充了pdf文件名的表格。我搜索了「PDF頁面計數器」,並有一些點擊,但我不知道這些工具值得信任。那麼,什麼名字的信任值得稱讚的PDF頁計數工具/軟件,或者,有沒有什麼好的VB.NET代碼樣本試圖這樣做?PDF頁數計數器
謝謝!
我在一個文件夾中有一堆pdf文件,並希望知道通過免費的PDF計數器軟件或編程方式如何計算每個pdf的頁數的最佳方式,並將結果放入一個excel或訪問表。我已經有了填充了pdf文件名的表格。我搜索了「PDF頁面計數器」,並有一些點擊,但我不知道這些工具值得信任。那麼,什麼名字的信任值得稱讚的PDF頁計數工具/軟件,或者,有沒有什麼好的VB.NET代碼樣本試圖這樣做?PDF頁數計數器
謝謝!
我會推薦iText pdf庫。 http://www.itextpdf.com/這是一個java庫,但如果你對此更加熟悉,它也會被移植到C#中。
一旦你導入了該庫,從pdf獲得頁數的java代碼是:
PdfReader pr = new PdfReader("/path/to/yourFile.pdf");
return pr.getNumberOfPages();
我在過去遇到同樣的問題。 我用pdftk tool內的PowerShell
dir c:\ *.pdf | foreach-object {
$pdf = pdftk.exe $_.FullName dump_data
$NumberOfPages = [regex]::match($pdf,'NumberOfPages: (\d+)').Groups[1].Value
New-Object PSObject -Property @{
Name = $_.Name
FullName = $_.FullName
NumberOfPages = $NumberOfPages
}
} | select name,fullname,numberofpages | export-csv -notypeinformation d:\list.txt
一些測試,我意識到,我有問題,當我保護的PDF文件後。 使用itextsharp我解決了他們
[void][System.Reflection.Assembly]::LoadFrom("c:\itextsharp\itextsharp.dll")
gci -path c:\ *.pdf | foreach-object{
$itext = new-object itextsharp.text.pdf.PdfReader($_.fullname)
if (-not $itext.IsEncrypted()) {
$pdf = pdftk.exe $_.FullName dump_data
$NumberOfPages = [regex]::match($pdf,'NumberOfPages: (\d+)').Groups[1].Value
New-Object PSObject -Property @{
Name = $_.Name
FullName = $_.FullName
NumberOfPages = $NumberOfPages
}
}
else {
New-Object PSObject -Property @{
Name = $_.Name
FullName = $_.FullName
NumberOfPages = "encrypted"
}
}
} |Select-Object name,fullname,numberofpages | export-csv -notypeinformation d:\list2.txt
希望它幫助。
編輯。請注意,腳本的是很大一部分已經被吉文利維,PowerShell的大師:)
繼尼克的解決方案做,你可以完全避免使用的pdftk只iTextSharp的。
你爲什麼要這麼做?那麼事實證明,pdftk無法讀取(返回一個java.NulPointerException)itextsharp可以的一些pdf文件。事實上,我設法使用pdftk和正則表達式創建一個函數,但由於這種例外,我不得不切換到itextsharp。
功能是以下(和非常簡單的遵循):
function Count-PdfPages{
Param([System.IO.FileSystemInfo]$file)
# loads itextsharp
[void][System.Reflection.Assembly]::LoadFrom("C:\Users\me\Desktop\itextsharp-all-5.3.4\itextsharp.dll")
$itext = new-object itextsharp.text.pdf.PdfReader($file.fullname)
if (-not $itext.IsEncrypted()) {
$NumberOfPages = $itext.NumberOfPages
return $numberOfPages
}
else{
return "The file $($file.fullname) is encrypted"
}
}
# Example
Set-Location 'C:\Users\me\Desktop\Nueva carpeta'
Get-ChildItem | Where-object{$_.extension -eq '.pdf'} | ForEach-Object{Count-PdfPages $_}
一號線:
Dim pdfPageCount As Integer = System.IO.File.ReadAllText("example.pdf").Split(New String() {"/Type /Page"}, StringSplitOptions.None).Count() - 2
推薦: iTextSharp
進口iTextSharp.text.pdf
Dim pdfPath As String = "test.pdf"
Dim pdfReader As New PdfReader(pdfPath)
Dim numberOfPages As Integer = pdfReader.NumberOfPages
我編輯了你的答案,因爲你的鏈接指向SourceForge,它現在已經過時。所有iText項目,包括iTextSharp,都在一年前轉移到了GitHub上。 – 2016-02-24 08:22:38
「One Line」解決方案僅適用於某些文檔。名稱** Type **和** Page **可以在它們之間有任何數量和種類的空白,從零開始。這裏也可能有評論。然後可能還有未使用的頁面對象。然後有另外的方法來寫出名字。此外,頁面對象可能被保存在對象流中。等等等等...... – mkl 2016-02-24 09:10:16
ya。你是對的 。 我更喜歡使用第三方庫。比如itextsharp – 2016-02-24 09:28:32
[確定PDF文件中的頁數]可能的重複(http://stackoverflow.com/questions/320281/determine-number-of-pages-in-a-pdf-file) – 2016-02-24 08:20:01
問題要求我們推薦或者找到一本書,工具,軟件庫,教程或其他非現場資源,因爲它們傾向於吸引自以爲是的答案和垃圾郵件,因此不適合Stack Overflow。相反,請描述問題以及到目前爲止解決問題所做的工作。 – 2016-02-24 12:45:49