/* Antenna House PDF Tool API V7.0 .NET Interface sample program 概要:画像抽出 Copyright 2018-2021 Antenna House, Inc. */ using System; using PdfTkNet; namespace ExtractImage { class Program { static void Main(string[] args) { if (args.Length < 3) { Console.WriteLine("usage: ExtractImage.exe in-pdf-file out-image-file 出力フォーマット\n"); Console.WriteLine("出力フォーマット\n0 : 自動 1 : BMP 2 : JPEG 3 : PNG\n"); return; } String kind = args[2]; switch (kind) { case "0": case "1": case "2": case "3": break; default: Console.WriteLine("usage: ExtractImage.exe in-pdf-file out-image-file 出力フォーマット\n"); Console.WriteLine("出力フォーマット\n0 : 自動 1 : BMP 2 : JPEG 3 : PNG\n"); return; } try { using (PtlParamInput inputFile = new PtlParamInput(args[0])) //元PDF using (PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); using (PtlPages pages = doc.getPages()) { //ページコンテナが空かどうか if (pages.isEmpty()) { Console.WriteLine("ページコンテナが空"); return; } using (PtlPage page = pages.get(0)) // 先頭ページ { // 画像抽出 ExtractImage(page, args[1], kind); } } } } catch (PtlException pex) { Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP()); pex.Dispose(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.WriteLine("-- 完了 --"); } } static void ExtractImage(PtlPage page, String imagefilename, String kind) { int numImage = 0; using (PtlContent content = page.getContent()) // ページコンテントの取得 using (PtlEditElements elems = content.getEditElements(PtlContent.GET_ELEMENT.GET_IMAGE)) // 画像エレメントの取得 { int numElems = elems.getCount(); if (numElems == 0) return; PtlEditImage.OUTPUT_FORMAT format = PtlEditImage.OUTPUT_FORMAT.FORMAT_AUTO; switch (kind) { case "1": format = PtlEditImage.OUTPUT_FORMAT.FORMAT_BMP; break; case "2": format = PtlEditImage.OUTPUT_FORMAT.FORMAT_JPEG; break; case "3": format = PtlEditImage.OUTPUT_FORMAT.FORMAT_JPEG; break; } for (int i = 0; i < numElems; ++i) { // 画像エレメントの取得 using (PtlEditElement elem = elems.get(i)) { PtlEditElement.ELEMENT_TYPE type = elem.getType(); switch (type) { case PtlEditElement.ELEMENT_TYPE.TYPE_IMAGE: { ++numImage; PtlEditImage elemImage = (PtlEditImage)elem; string pathImage = ""; switch (format) { case PtlEditImage.OUTPUT_FORMAT.FORMAT_AUTO: pathImage = String.Format("{0}{1}", imagefilename, numImage); break; case PtlEditImage.OUTPUT_FORMAT.FORMAT_BMP: pathImage = String.Format("{0}{1}.bmp", imagefilename, numImage); break; case PtlEditImage.OUTPUT_FORMAT.FORMAT_JPEG: pathImage = String.Format("{0}{1}.jpg", imagefilename, numImage); break; case PtlEditImage.OUTPUT_FORMAT.FORMAT_PNG: pathImage = String.Format("{0}{1}.png", imagefilename, numImage); break; } using (PtlParamOutput outputImage = new PtlParamOutput(pathImage)) { // 画像出力 elemImage.writeFile(outputImage, format); } } break; default: break; } } } } } } }