PDF页面计数器

时间:2011-05-10 16:14:38

标签: vb.net pdf counter

我在一个文件夹中有一堆pdf文件,想知道通过免费的PDF计数器软件或以编程方式如何计算每个pdf的页数并将结果放在excel或者excel中的最佳方法访问表。我已经在表格中填充了pdf文件名。我用谷歌搜索了“PDF页面计数器”并且有很多点击,但是我不确定这些工具值得信任。那么,有些值得信赖的名称是pdf页面计数工具/软件,还是有什么好的VB.NET代码样本可以尝试这个吗?

谢谢!

4 个答案:

答案 0 :(得分:5)

我会推荐iText pdf库。 http://www.itextpdf.com/这是一个java库,但如果您对此感到满意,它也已被移植到C#。

一旦你导入了这个库;从pdf获取页面数的java代码是:

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

答案 1 :(得分:4)

过去我遇到过同样的问题。 我在powershell中使用了pdftk tool

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 

希望它有所帮助。

修改。请注意,剧本的很大一部分是由权威大师Shay Levy完成的:)

答案 2 :(得分:1)

根据Nick的解决方案,你可以完全避免使用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 $_}

答案 3 :(得分: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