PR

【PowerShell】PDFを1ページずつ分ける方法【簡単】

C#
この記事にはアフィリエイト広告および広告が含まれています。

PDFを好きに分割したいなぁ…。と考えることがあり
今回はPowerShellとiTextSharpを使用して作ってみました。

ちなみにオンラインツールでAdobeilovePDFでPDFカットというのがあるようですね!

コードを紹介する前に

みみねこ
みみねこ

itextsharpはライセンスが複雑になってきたそうで、取り扱いに注意する必要があるみたいです。
pdfsharpというのもあるみたいですね!

iTextSharpのライセンスについてはこちらを参考にしました。

みみねこ
みみねこ

今回は作ってみただけなのでこのままコードを紹介します!

フォルダ構成

フォルダ構成はこちらです。

注意点:事前にnewフォルダに同じPDFファイルがある場合は上書きされます。

■どこかのフォルダ
┣■new … 無くても処理中に生成されます
┣・itextsharp.dll
┣・pdf_split.ps1
┗・分割したいPDFファイル

iTextSharpの準備

こちらのページからバージョンを選択します。
ページ下部の「+ Show more」をクリックするとさらにバージョンが出てきます。

「Download package」からインストールしてください。

ファイルが「itextsharp.???.nupkg」でダウンロードされますが、zipファイルなので解凍してください

出来ない場合はitextsharp.???.nupkgをitextsharp.???.zipに名前を変更すると右クリックでも解凍できると思います。
※ ???はバージョンです。

「itextsharp.???\lib\itextsharp.dll」ファイルを使用するので、
powershellのファイルが置いてある場所にコピーしてください。

■どこかのフォルダ
┣■new … 無くても処理中に生成されます
┣・itextsharp.dll
┣・pdf_split.ps1
┗・分割したいPDFファイル

■:フォルダ
・:ファイル

コード

以下がpdf_split.ps1のコードになります。
解説はコメントに記載しました。

$argsというのは引数が入った配列で$args[0]は第1引数になります。
この後実行する際に出てきます。

# 現在のディレクトリを取得
$currentDir = Get-Location
Set-Location $currentDir

# itextsharp.dllのロード
# 絶対パスを記載してください。
[System.Reflection.Assembly]::LoadFrom("C:\???\itextsharp.dll");

# 分割PDFの生成先フォルダパス
if(-! (Test-Path "./new")) {
    New-Item new -ItemType Directory
}
$destFolderPath = Join-Path $currentDir "new"

# inputのPDFパスを設定し、readerを生成
$srcPath = $args[0]
$pdfReader = New-Object iTextSharp.text.pdf.PdfReader($srcPath)

# ファイル名(拡張子なし)
$fileName = [System.IO.Path]::GetFileNameWithoutExtension($srcPath)

# ページ数取得し、ページ単位でfor文を回す
$pages = $pdfReader.NumberOfPages
for($page = 1; $page -le $pages; $page++) {

    # 出力する分割PDFのファイルパスを設定
    $destPath = Join-Path $destFolderPath ($fileName + "_" + $page + ".pdf")

    # ファイル生成に必要なオブジェクトを生成
    $fileStream = New-Object System.IO.FileStream($destPath, [System.IO.FileMode]::Create)
    $document = New-Object iTextSharp.text.Document($pdfReader.GetPageSize($page))
    $pdfWriter = [iTextSharp.text.pdf.PdfWriter]::GetInstance($document, $fileStream)

    # PDFファイルをオープンし、新規ページを作成
    $document.Open()
    $document.NewPage() | Out-Null

    # ページを読み込み、先ほど作成した新規ページに読み込んだページを書き込みます。
    $readPage = $pdfWriter.GetImportedPage($pdfReader, $page)
    $pdfWriter.DirectContent.AddTemplate($readPage, 0, 0)

    # reader以外のオブジェクトをクローズ
    $document.Close()
    $fileStream.Close()
    $pdfWriter.Close()
}
# 全てのページの処理が完了後readerをクローズ
$pdfReader.Close()

実行

Windows Powershellを起動します。

実行コマンド

cdコマンドでカレントディレクトリを変更

cd ps1ファイルがあるディレクトリ

pdfファイルの絶対パスを引数にpdf_split.ps1を実行

./pdf_split.ps1 "pdfファイルの絶対パス"

これでnewフォルダに分割pdfができあがります!

フォルダ

実行後
newフォルダの中身

補足

.Netがないと動かないかもしれませんので、その場合はインストールをお願いします。

タイトルとURLをコピーしました