Powershell+PDFSharpでPDFのページ数をカウントしたかったのでやってみたメモ。
PDFSharpはPDFファイルを処理するためのオープンソースの.NETライブラリです。
2020/3/28現在、1.32がstableなんですかね。
http://www.pdfsharp.net/
実行環境
PS C:\Users\hoge> $PSVersionTable Name Value ---- ----- PSVersion 5.1.18362.628 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.18362.628 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 PS C:\Users\hoge>
ソース
DLLについてはあらかじめダウンロードして、同階層に配置しておきます。
param( [string]$filepath # 処理対象パス(ディレクトリでもファイル名でも受け付ける) ) # エラーがあった時点で処理終了 $ErrorActionPreference = "stop" # DLLファイル名 $dll_name = "PdfSharp.dll" function script:LoadDll() { # DLLはスクリプトと同階層に置くことを想定しているためカレントパスを取得 $current_path = (Convert-Path .) $dll_path = Join-Path $current_path $dll_name #DLL読み込み [void][Reflection.Assembly]::LoadFile($dll_path) } function script:Main($filepath) { # 再帰的にファイルを取得 $files = (Get-ChildItem -Recurse $filepath | Where-Object { $_.Attributes -ne "Directory" }) foreach ($file in $files) { # 拡張子がPDF以外であれば後続処理をスキップ if ($file.Extension -ne ".pdf") { continue } $input_pdf = [PdfSharp.Pdf.IO.PdfReader]::Open($file.Fullname, [PdfSharp.Pdf.IO.PdfDocumentOpenMode]::Import); $page_count = $input_pdf.PageCount write-host $file.Fullname "`t" $page_count } } LoadDll Main $filepath
実行例
PS C:\Users\hoge\Documents\powershells\count_pdf_pages> .\count_pdf_pages.ps1 -filepath C:\Users\hoge\Documents\powershells\count_pdf_pages\ C:\Users\hoge\Documents\powershells\count_pdf_pages\sample.pdf 119 PS C:\Users\hoge\Documents\powershells\count_pdf_pages>