WedX - журнал о программировании и компьютерных науках

Счетчик страниц PDF

У меня есть куча файлов PDF в папке, и я хотел бы узнать, как лучше всего использовать бесплатное программное обеспечение счетчика PDF или программно, как подсчитать количество страниц для каждого PDF-файла и поместить результат либо в Excel, либо в таблицу доступа. У меня уже есть таблица, заполненная именами файлов PDF. Я погуглил «счетчик страниц PDF», и было несколько совпадений, однако я не уверен, насколько заслуживают доверия эти инструменты. Итак, какие имена достойных доверия инструментов/программного обеспечения для подсчета страниц в формате PDF и, в качестве альтернативы, есть ли какие-либо хорошие образцы кода VB.NET, которые пытаются это сделать?

Благодарю вас!

10.05.2011

  • Возможный дубликат Определить количество страниц в файле PDF 24.02.2016
  • Вопросы, в которых нас просят порекомендовать или найти книгу, инструмент, программную библиотеку, учебное пособие или другой сторонний ресурс, не относятся к теме Stack Overflow, поскольку они, как правило, привлекают самоуверенные ответы и спам. Вместо этого опишите проблему и то, что уже было сделано для ее решения. 24.02.2016

Ответы:


1

Я бы порекомендовал библиотеку iText pdf. https://www.itextpdf.com/ Это библиотека Java, но она также была перенесена на C#. если вам так удобнее.

Как только вы импортируете эту библиотеку; код Java для получения количества страниц из PDF:

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

2

У меня была такая же проблема в прошлом. Я использовал инструмент pdftk внутри 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 :)

10.05.2011

3

Следуя решению Ника, вы можете вообще избежать pdftk, используя только itextsharp.

Зачем тебе это? Что ж, получается, что pdftk не может читать (возвращая java.NulPointerException) некоторые файлы PDF, которые может itextsharp. На самом деле мне удалось создать функцию, используя 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 $_}
26.11.2012

4

Одна линия:

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
24.02.2016
  • Я отредактировал ваш ответ, потому что ваша ссылка указывает на SourceForge, который сейчас устарел. Все проекты iText, включая iTextSharp, год назад переехали на GitHub. 24.02.2016
  • Решение One Line работает только для некоторых документов. Между именами Тип и Страница может быть любое количество пробелов любого типа, начиная с нуля. Между ними также могут быть комментарии. Тогда могут быть и неиспользуемые объекты страницы. Тогда есть альтернативные способы написания имен. Кроме того, объекты страницы могут храниться в потоках объектов. И т. д. и т. д. и т. д. 24.02.2016
  • я. Ты прав . Я предпочитаю использовать стороннюю библиотеку, например, itextsharp. 24.02.2016
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]