[日誌] 特許出願図面取り込み自動化に向けて(2)
図面取り込み(2)~図面切り取り及び貼り付け~
やりたいこと
前回の画像フォーマットに関する考察に続き、今回は、図面を自動で切り抜きする作業に関して考察してみます。これができれば後はWord文書に張り込むだけなので、飛躍的な進歩だと思います。「こスキャンした書籍や書類の余白をImageMagickで除去する」というページをたまたま目にして思いつきました。
前提条件
図面の取り込みを自動化するにあたって前提を以下のように設定します。
・図面は、たて向きA4のPDFファイル
・1ページにつき1図面
・解像度は300dpi(前回の設定と同じ)
Word以外で必要なソフト
Word以外で必要なソフトは、ImageMagickとXpdfとGPL版のGhostScriptです。ImageMagickは、イメージ変換や加工に使用し、Xpdf(pdf2ppm)は、PDFを切り出すときに使用されます。ImageMagickもppm系のソフトも1990年代最初からあるものです。私が大学生のときに触った記憶があり、それから機能が拡張され、今も脈々と引き継がれているようです。旧友に会うような懐かしい感じです。
ImageMagickは、インストーラーが用意されているので、[次へ][次へ]と進めていけばOKです。
Xpdfは、zipで提供されているので、展開して、環境設定の[PATH]をそのフォルダーに追加してください。
PDFからの画像切り出し
実は上記取り消し線で引いたGhostScriptを用いたPDF変換も試したのですが、解像度の指定が正しく動かず、きれいな画質が得られませんでした。いろいろと試した結果、Xpdfのpdf2ppmが300dpiを保持したまま変換できることがわかりました。コマンドラインは次の通りです。
> magick {ファイル名}.pdf -scale 2480 -dither FloydSteinberg -colors 2 png8:{ファイル名}.png
> pdf2ppm -r 300 {ファイル名}.pdf {PPM出力名}
コマンドの解説〜PDF→PNG変換〜
まず数式・図面を1図面1ページで作成します。Illustratorでも、Visioでも、花子でも、Inkscapeでも、Microsoft Officeの図形枠での作図でもかまいません。PDFに書き出しておきます。上記図は、Inkscapeで描き、3ページ分くっつけたものです。そして、Windowsのコマンドツール(cmd.exeでもPowerShell.exeでも可)で、上記コマンドを入力します。
{ファイル名}.pdfに準備したPDFを指定します。{PPM出力名}は、ppmのファイル名の共通名称部分です。PDFファイルが複数ページある場合、{出力名}-00001.ppm等になります。引数の「-r 300」は、解像度(resolution)を300dpiにするためのものです。
コマンドの解説〜PNG切り抜き〜
> magick {PPM出力名}*.ppm -dither FloydSteinberg -colors 2 -level 0%,75%,0.8 -trim -bordercolor white -border 1%x2% png8:{PNG中間名}.png
ImageMagickのmagickコマンドを呼び出します。(参照したページではなぜか、「convert」という名前です。Windowsだけmagick?!) PNG8:{PNG中間名}は、PNGの256色でのpngのファイルに出力されます。その他の引数は、フロイド-スタインバーグという形式のディザーをかけて2値化し、レベル補正をして、トリミング後に、横1%縦2%の白色の余白を付けるという処理です。不要となったppmファイルはこの段階で削除して大丈夫です。
そして、8階調で1339x2dotsの画像(small.bmp)と組み合わせします。
> magick small.bmp {PNG中間名}.png -append {PNG出力名}.png
この1339x2dotsの横長のイメージと組み合わせるのがポイントです。インターネット出願ソフトが、これより小さいファイルは、200dpiだと勘違いして、300dpiの画像を200dpiで表示し、1.5倍大きい画像で表示するからです。上の例ですと、丸と四角の図は、横幅が1338dots以内なので、組み合わせる必要があるのです。
Word文書への取り込み
画像ファイルのWord文書への取り込みマクロは、ホームページの「【コード】画像とファイルパスを挿入するWordマクロ」を参照して作成してください。このページは、お客様からの依頼を受けてと書いてありますが、jpegとgifだけ張り込むこと、サンプル文書の形式をみると、特許事務所が依頼したのではないかと思われるマクロです。公開されているので使ってしまいましょう。
そして、前回紹介したように取り込んだ図面は、32%の縮小をして表示するマクロを追加してください。これで、Word文書とインターネット出願ソフトが吐き出すPDF文書とが整合できます。32%に縮小するところを書いておきます。
Dim shpInLine As InlineShape
Set shpInLine = Selection.InlineShapes.AddPicture(filename:=”{ファイル名}”, LinkToFile :=False, SaveWithDocument:=True)
With shpInLine
.LockAspectRatio = msoTrue
.ScaleHeight = 32
.ScaleWidth = 32
End With
まとめ
GhostScript→Xpdfと右往左往し、最後は、竜頭蛇尾になりましたが、十分なヒントにはなっていると思います。SEさんを抱える事務所であれば、このヒントで十分、図面取り込みの自動化ができるものと考えます。次回は、最後で、Word文書からインターネット出願ソフトに読み込ませるHTML文書作りです。落ちが見えてますね。