Подсчет номеров страниц PDF в папке с помощью VBA Excel: изучены различные методы

В этой статье мы рассмотрим различные методы подсчета количества страниц в PDF-файлах в определенной папке с помощью VBA Excel. Независимо от того, управляете ли вы большой коллекцией PDF-документов или вам необходимо отслеживать количество страниц в конкретном проекте, эти методы сэкономят вам время и усилия. Мы предоставим простые для понимания примеры кода и объясним каждый метод в разговорной форме.

Метод 1: библиотека Adobe Acrobat
Первый метод предполагает использование библиотеки Adobe Acrobat в VBA Excel. Эта библиотека предоставляет мощные функции для взаимодействия с файлами PDF. Для начала нам нужно добавить ссылку на библиотеку Adobe Acrobat в наш проект VBA. После добавления мы можем использовать методы и свойства библиотеки для доступа к количеству страниц каждого PDF-файла в папке.

Вот пример фрагмента кода:

Sub CountPDFPages_AcrobatLibrary()
    Dim objAcroApp As Object
    Dim objAcroDoc As Object
    Dim folderPath As String
    Dim filePath As String
    Dim pageCount As Integer

    folderPath = "C:\Path\To\Folder\"
    filePath = Dir(folderPath & "*.pdf")

    Set objAcroApp = CreateObject("AcroExch.App")

    Do While filePath <> ""
        Set objAcroDoc = CreateObject("AcroExch.PDDoc")
        objAcroDoc.Open folderPath & filePath
        pageCount = objAcroDoc.GetNumPages()
        objAcroDoc.Close
        Set objAcroDoc = Nothing

        ' Do something with the page count
        ' For example, display it in the Immediate window
        Debug.Print filePath & ": " & pageCount

        filePath = Dir
    Loop

    objAcroApp.Exit
    Set objAcroApp = Nothing
End Sub

Метод 2: внешний инструмент командной строки.
Другой подход заключается в использовании внешнего инструмента командной строки, например pdftk(PDF Toolkit) или qpdf. вместе с функцией ShellVBA Excel. Эти инструменты позволяют извлекать информацию о PDF-файлах, включая количество страниц. Мы можем вызвать эти инструменты из VBA и записать их выходные данные, чтобы получить количество страниц для каждого PDF-файла в папке.

Вот пример фрагмента кода с использованием pdftk:

Sub CountPDFPages_PDFtk()
    Dim folderPath As String
    Dim filePath As String
    Dim command As String
    Dim output As String

    folderPath = "C:\Path\To\Folder\"
    filePath = Dir(folderPath & "*.pdf")

    Do While filePath <> ""
        command = "pdftk """ & folderPath & filePath & """ dump_data | findstr /C:NumberOfPages"
        output = VBA.CreateObject("WScript.Shell").Exec("cmd /c " & command).StdOutput.ReadAll

        ' Parse the output to extract the page count
        ' For example, if the output is "NumberOfPages: 10", extract "10"
        pageCount = Val(Split(output, ":")(1))

        ' Do something with the page count
        ' For example, display it in the Immediate window
        Debug.Print filePath & ": " & pageCount

        filePath = Dir
    Loop
End Sub

Метод 3: библиотека PDFium
Библиотека PDFium представляет собой легкое решение с открытым исходным кодом для работы с PDF-файлами. Мы можем использовать эту библиотеку в VBA Excel, используя функции Windows API для вызовов DLL. Загрузив PDFium DLL и используя ее функции, мы можем получить количество страниц для каждого PDF-файла в папке.

Вот пример фрагмента кода:

Private Declare PtrSafe Function FPDF_LoadLibrary Lib "pdfium.dll" () As LongPtr
Private Declare PtrSafe Function FPDF_InitLibrary Lib "pdfium.dll" () As Boolean
Private Declare PtrSafe Function FPDF_NewDocument Lib "pdfium.dll" (ByVal filePath As String, ByVal password As String) As LongPtr
Private Declare PtrSafe Function FPDF_GetPageCount Lib "pdfium.dll" (ByVal doc As LongPtr) As Long
Private Declare PtrSafe Function FPDF_CloseDocument Lib "pdfium.dll" (ByVal doc As LongPtr) As Boolean
Private Declare PtrSafe Function FPDF_DestroyLibrary Lib "pdfium.dll" () As Boolean
Sub CountPDFPages_PDFium()
    Dim folderPath As String
    Dim filePath As String
    Dim doc As LongPtr
    Dim pageCount As Long

    FPDF_LoadLibrary ' Load PDFium DLL
    FPDF_InitLibrary ' Initialize PDFium library

    folderPath = "C:\Path\To\Folder\"
    filePath= Dir(folderPath & "*.pdf")

    Do While filePath <> ""
        doc = FPDF_NewDocument(folderPath & filePath, "")
        pageCount = FPDF_GetPageCount(doc)
        FPDF_CloseDocument doc

        ' Do something with the page count
        ' For example, display it in the Immediate window
        Debug.Print filePath & ": " & pageCount

        filePath = Dir
    Loop

    FPDF_DestroyLibrary ' Clean up PDFium library
End Sub

В этой статье мы рассмотрели различные методы подсчета количества страниц в PDF-файлах в определенной папке с помощью VBA Excel. Мы рассмотрели методы с использованием библиотеки Adobe Acrobat, внешних инструментов командной строки, таких как pdftk, и библиотеки PDFium. Каждый метод имеет свои преимущества и особенности, поэтому выберите тот, который лучше всего соответствует вашим требованиям. Внедрив эти методы, вы сможете автоматизировать процесс подсчета страниц и оптимизировать рабочий процесс.

Не забудьте адаптировать фрагменты кода к вашим конкретным потребностям, например изменить путь к папке и обработать результаты подсчета страниц в соответствии с желаемыми действиями. Приятного кодирования!