2011-05-10 43 views
3

我在一個文件夾中有一堆pdf文件,並希望知道通過免費的PDF計數器軟件或編程方式如何計算每個pdf的頁數的最佳方式,並將結果放入一個excel或訪問表。我已經有了填充了pdf文件名的表格。我搜索了「PDF頁面計數器」,並有一些點擊,但我不知道這些工具值得信任。那麼,什麼名字的信任值得稱讚的PDF頁計數工具/軟件,或者,有沒有什麼好的VB.NET代碼樣本試圖這樣做?PDF頁數計數器

謝謝!

+0

[確定PDF文件中的頁數]可能的重複(http://stackoverflow.com/questions/320281/determine-number-of-pages-in-a-pdf-file) – 2016-02-24 08:20:01

+0

問題要求我們推薦或者找到一本書,工具,軟件庫,教程或其他非現場資源,因爲它們傾向於吸引自以爲是的答案和垃圾郵件,因此不適合Stack Overflow。相反,請描述問題以及到目前爲止解決問題所做的工作。 – 2016-02-24 12:45:49

回答

5

我會推薦iText pdf庫。 http://www.itextpdf.com/這是一個java庫,但如果你對此更加熟悉,它也會被移植到C#中。

一旦你導入了該庫,從pdf獲得頁數的java代碼是:

PdfReader pr = new PdfReader("/path/to/yourFile.pdf"); 
return pr.getNumberOfPages(); 
4

我在過去遇到同樣的問題。 我用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的大師:)

1

繼尼克的解決方案做,你可以完全避免使用的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 $_} 
0

一號線:

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 
+2

我編輯了你的答案,因爲你的鏈接指向SourceForge,它現在已經過時。所有iText項目,包括iTextSharp,都在一年前轉移到了GitHub上。 – 2016-02-24 08:22:38

+1

「One Line」解決方案僅適用於某些文檔。名稱** Type **和** Page **可以在它們之間有任何數量和種類的空白,從零開始。這裏也可能有評論。然後可能還有未使用的頁面對象。然後有另外的方法來寫出名字。此外,頁面對象可能被保存在對象流中。等等等等...... – mkl 2016-02-24 09:10:16

+1

ya。你是對的 。 我更喜歡使用第三方庫。比如itextsharp – 2016-02-24 09:28:32