背景
PDFを開いて「ファイル」-「プロパティ」-「フォント」を見ると「CIDFont」なるものが設定されており、これが原因であるツール上でPDFを表示することが出来なかった。
PDFを開いて「Microsoft print to PDF」で印刷しPDFを再作成すると、当該フォントが無くなることが判明した。
前提
1.通常使うプリンタを「Microsoft Print to PDF」にする
2.キーボード入力を自動化させたプログラムをPower Shellで作成し実行する
3.outputフォルダは空にしておくこと
※上書き保存確認ダイアログが表示されないようにする為
4.プログラム実行中はパソコン操作を行わない
※アクティブウィンドウが変わらないようにする為
手順
1.Power Shellを管理者権限で起動する
2.以下を実行し「実行ポリシーの変更」を行う
┗Set-executionpolicy remotesigned
┗y
3.任意のinputフォルダに印刷対象のPDFを格納する
4.サンプルプログラムを流用してプログラムを作成する
┗inputフォルダとoutputフォルダを修正
5.作成したスクリプトを絶対パス or 相対パスで実行する
●sample.ps1
Add-Type -AssemblyName System.Windows.Forms
# inputフォルダを指定
$inputFolder = "C:\Users\user\Desktop\input"
# outputフォルダを指定
$outputFolder = "C:\Users\user\Desktop\output"
# 対象ファイルのリストを取得
$fileList = Get-ChildItem $inputFolder -Filter *.pdf | Select-Object Name
foreach($fileName in $fileList){
# 開始日時を出力
$date = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$message = $date + " 開始 " + $fileName.Name
echo $message
# ファイルを開く
$inputFileFullName = $inputFolder + "\" + $fileName.Name
Invoke-Item $inputFileFullName
Start-Sleep -s 2
# 印刷ダイアログを開く
[System.Windows.Forms.SendKeys]::SendWait("^p")
Start-Sleep -s 2
# ENTERで印刷ボタンをクリック ※サイズが大きいファイルはここで時間が掛かる。念のため15秒とする
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
Start-Sleep -s 15
# 出力するPDFファイル名を指定
$file = $outputFolder + "\" + $fileName.Name
[System.Windows.Forms.SendKeys]::SendWait("$file")
Start-Sleep -s 2
# ENTERで保存ボタンをクリック
[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
Start-Sleep -s 2
# 「Microsoft Print to PDF」のプリンタジョブが無くなるまで待つ ※サイズが大きいファイルはここで時間が掛かる。
do
{
$printJobId = Get-PrintJob -PrinterName "Microsoft Print to PDF" | Select-Object Id
$date = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$message = $date + " 印刷中 " + $file
echo $message
Start-Sleep -s 1
}
while (([int]::TryParse($printJobId.Id,[ref]$null)))
# ファイルを閉じる
[System.Windows.Forms.SendKeys]::SendWait("^q")
Start-Sleep -s 2
# 終了日時を出力
$date = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
$message = $date + " 終了 " + $fileName.Name
echo $message
}
実行
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\user> C:\Users\user\Desktop\temp\sample.ps1