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