PDF Tool APIサンプル集:テキストエレメント情報取得の例
PDF出力する元ファイル(入力ファイル)パス、PDFの出力先となるファイルパスを指定して
各ページのコンテンツからテキストエレメントの情報を取得して
1ページ目は指定したテキストの位置にスタンプを追加
2ページ目は指定したテキストの位置にエレメントの情報を記入した注釈を追加
3ページ目は指定したテキストの位置へのブックマークを追加して出力するコンソールアプリケーションです。
概要
コマンドラインでの実行例
sample.exe c:\test\test.pdf c:\sav\out.pdf
ダウンロード
出力結果イメージ
サンプルコード
/* Antenna House PDF Tool API 7.0 C# Interface sample program 概要:テキストエレメント情報取得サンプル Copyright 2021 Antenna House,Inc. */ using System; using PdfTkNet; namespace sample07cs { class Program { static void Main(string[] args) { Console.WriteLine("PDF Tool API V7.0 C# サンプル"); // 入出力ファイル名と設定ファイル名の初期値を設定 string inFilePath = @"C:\test\gongitsune.pdf"; string outFilePath = @"C:\sav\out.pdf"; // 入力ファイル名 if (args.Length > 0) { inFilePath = args[0]; } // 出力ファイル名 if (args.Length > 1) { outFilePath = args[1]; } try { using (PtlParamInput input = new PtlParamInput(inFilePath)) using (PtlParamOutput output = new PtlParamOutput(outFilePath)) using (var doc = new PtlPDFDocument()) { doc.load(input); using (var pages = doc.getPages()) { using (var page = pages.get(0)) //1ページ目 { //「ごん狐」の箇所にスタンプを置く例 addStamp(page); } //「兵十」に注釈を置く例 using (var page = pages.get(1)) //2ページ目 { addAnnot(page); } //文字列を元にしおりを作成する例 int pg = 2; using (var page = pages.get(pg)) //3ページ目 using (PtlOutline outlineRoot = doc.getRootOutline()) { addOutline(page, outlineRoot, pg); } } doc.save(output); } } catch (PtlException pex) { Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP()); pex.Dispose(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } static void addStamp(PtlPage page) { //「ごん狐」の箇所にスタンプを置く例 using (var content = page.getContent()) using (PtlEditElements elements = content.getEditElements()) { int elemCnt = elements.getCount(); for (int i = 0; i < elemCnt; i++) { PtlEditElement element = elements.get(i); // テキストエレメント if (element.getType() == PtlEditElement.ELEMENT_TYPE.TYPE_TEXT) { PtlEditText textObj = (PtlEditText)element; PtlEditTextItems items = textObj.getTextItems(); int itemCnt = items.getCount(); for (int j = 0; j < itemCnt; j++) { PtlEditTextItem item = items.get(j); PtlFontInfo fontInfo = item.getFontInfo(); // "ごん狐"の位置にスタンプを追加する if (item.getText().Equals("ごん狐")) { using (PtlAnnots annots = page.getAnnots()) using (PtlAnnotStamp stampAnnot1 = new PtlAnnotStamp()) { // テキストの位置を取得 PtlRect recB = item.getBBox(); stampAnnot1.setRect(recB); stampAnnot1.setIconType(PtlAnnotStamp.ICON_TYPE.ICON_APPROVED); stampAnnot1.setAnnotFlags(PtlAnnot.ANNOT_FLAGS.FLAG_PRINT); annots.append(stampAnnot1); } } } } } } } static void addAnnot(PtlPage page) { //「兵十」に注釈を置く例 using (var content = page.getContent()) using (PtlEditElements elements = content.getEditElements()) { int elemCnt = elements.getCount(); for (int i = 0; i < elemCnt; i++) { PtlEditElement element = elements.get(i); // テキストエレメント if (element.getType() == PtlEditElement.ELEMENT_TYPE.TYPE_TEXT) { PtlEditText textObj = (PtlEditText)element; PtlEditTextItems items = textObj.getTextItems(); int itemCnt = items.getCount(); for (int j = 0; j < itemCnt; j++) { PtlEditTextItem item = items.get(j); //注釈を追加する例 if (item.getText().Equals("兵十")) { //注釈コンテナの取得 using (PtlAnnots annots = page.getAnnots()) { //PDFのテキスト注釈 using (PtlAnnotText annottext = new PtlAnnotText()) { //アイコンタイプ設定 ICON_COMMENT = 1, /* コメント */ annottext.setIconType(PtlAnnotText.ICON_TYPE.ICON_COMMENT); //矩形座標にテキストの位置を設定 annottext.setRect(item.getBBox()); // テキストの位置を取得 PtlRect recB = item.getBBox(); string str = "Rect (" + recB.getLeft() + ", " + recB.getBottom() + ", " + recB.getRight() + ", " + recB.getTop() + ")" + Environment.NewLine; PtlQuadPoint qpoint = item.getQuadPoint(); str += "QuadPoint : TopLeft (" + qpoint.getTopLeft().getX() + ", " + qpoint.getTopLeft().getY() + ")" + Environment.NewLine; str += "QuadPoint : TopRight (" + qpoint.getTopRight().getX() + ", " + qpoint.getTopRight().getY() + ")" + Environment.NewLine; str += "QuadPoint : BottomLeft (" + qpoint.getBottomLeft().getX() + ", " + qpoint.getBottomLeft().getY() + ")" + Environment.NewLine; str += "QuadPoint : BottomRight (" + qpoint.getBottomRight().getX() + ", " + qpoint.getBottomRight().getY() + ")" + Environment.NewLine; // フォント情報を取得 PtlFontInfo fontInfo = item.getFontInfo(); str += "FontName : " + fontInfo.getFontName() + Environment.NewLine; if (fontInfo.isEmbedded()) { // 文字の埋め込みを取得 str += "isEmbedded : true" + Environment.NewLine; } else { str += "isEmbedded :false" + Environment.NewLine; } // ペイントフラグ str += "ペイントフラグ:" + Environment.NewLine; if (item.getPaintFlags().HasFlag(PtlEditTextItem.PAINT_FLAGS.PAINT_FILL)) { //塗りつぶしの色 PtlColor clr = item.getFillColor(); str += " PAINT_FILL" + writeColor(clr) + Environment.NewLine; } if (item.getPaintFlags().HasFlag(PtlEditTextItem.PAINT_FLAGS.PAINT_STROKE)) { //輪郭色 PtlColor clr = item.getStrokeColor(); str += " PAINT_STROKE" + writeColor(clr) + Environment.NewLine; } //内容をを設定 annottext.setTextContents(str); //日時の設定 DateTime dt = DateTime.Now; using (PtlDate date = new PtlDate(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second)) { annottext.setDate(date); } //注釈フラグを設定 annottext.setAnnotFlags(PtlAnnotText.ANNOT_FLAGS.FLAG_NOROTATE); //色を設定 if (item.getFillColor().getType() == PtlColor.COLOR_TYPE.TYPE_DEVICE_RGB) { using (PtlColorDeviceRGB color = (PtlColorDeviceRGB)item.getFillColor()) { annottext.setColor(color); } } //境界線スタイルを設定 annottext.setBorderStyle(PtlAnnotText.BORDER_STYLE.BORDER_SOLID); //境界線幅を設定 annottext.setBorderWidth(PtlAnnotText.BORDER_LINE_WIDTH.BORDER_WIDTH_THIN); //------ //ポップアップウィンドウのタイトル文字列設定 annottext.setMarkUpTitle(item.getText()); //サブジェクトの短い説明設定 annottext.setMarkUpSubj(item.getPaintFlags().ToString()); //注釈生成日時の設定 using (PtlDate dateMarkup = new PtlDate(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second)) { annottext.setMarkUpDate(dateMarkup); } //不透明度を設定 annottext.setMarkUpCA(0.6f); //注釈の追加 annots.append(annottext); } } } } } } } } static void addOutline(PtlPage page, PtlOutline outlineRoot, int pg) { //赤と青の文字列を元にしおりを作成する例 using (var content = page.getContent()) using (PtlEditElements elements = content.getEditElements()) { int elemCnt = elements.getCount(); for (int i = 0; i < elemCnt; i++) { PtlEditElement element = elements.get(i); // テキストエレメント if (element.getType() == PtlEditElement.ELEMENT_TYPE.TYPE_TEXT) { PtlEditText textObj = (PtlEditText)element; PtlEditTextItems items = textObj.getTextItems(); int itemCnt = items.getCount(); for (int j = 0; j < itemCnt; j++) { PtlEditTextItem item = items.get(j); if (item.getFillColor().getType() == PtlColor.COLOR_TYPE.TYPE_DEVICE_RGB) { using (PtlOutline outline = new PtlOutline()) using (PtlColorDeviceRGB color = (PtlColorDeviceRGB)item.getFillColor()) { // テキストの塗りつぶし色が青か赤のとき if ((color.getR() == 0.0f && color.getG() == 0.0f && color.getB() == 1.0f) || (color.getR() == 1.0f && color.getG() == 0.0f && color.getB() == 0.0f)) { // アウトラインタイトルの色にテキストの塗りつぶし色を設定 outline.setColor(color); // テキストエレメントの内容をアウトラインに設定 outline.setTitle(item.getText()); // PtlActionGoTo : GoToアクション<現在のドキュメント内の宛先へ移動> using (PtlActionGoTo actiongoto = new PtlActionGoTo()) // PtlDestXYZ 宛先にテキストエレメントの位置を設定 using (PtlDestXYZ destxyz = new PtlDestXYZ()) { destxyz.setPageNumber(pg); //ページ指定 PtlRect recB = item.getBBox(); // テキストの位置 destxyz.setBottom(recB.getBottom()); destxyz.setTop(recB.getTop()); destxyz.setLeft(recB.getLeft()); destxyz.setRight(recB.getRight()); // 宛先の設定 actiongoto.setDest(destxyz); // アクションの設定 outline.setAction(actiongoto); } // アウトラインフラグを設定 outline.setFlags(PtlOutline.ITEM_FLAG.FLAG_NORMAL); // PDF表示時の子アウトラインをオープンするかどうかの設定 outline.setOpen(true); // 子アウトラインの追加 outlineRoot.appendLastChild(outline); } } } } } } } } static string writeColor(PtlColor clr) { // 色の文字列を取得 string str = ""; switch (clr.getType()) { case PtlColor.COLOR_TYPE.TYPE_DEVICE_RGB: str += " : DEVICE_RGB : "; PtlColorDeviceRGB rgbColor = (PtlColorDeviceRGB)clr; str += "(" + rgbColor.getR() + ", " + rgbColor.getG() + ", " + rgbColor.getB() + ")"; break; case PtlColor.COLOR_TYPE.TYPE_DEVICE_CMYK: str += " : DEVICE_CMYK"; PtlColorDeviceCMYK cmykColor = (PtlColorDeviceCMYK)clr; str += "(" + cmykColor.getC() + ", " + cmykColor.getM() + ", " + cmykColor.getY() + ", " + cmykColor.getK() + ")"; break; case PtlColor.COLOR_TYPE.TYPE_DEVICE_GRAY: str += " : DEVICE_GRAY"; PtlColorDeviceGray gryColor = (PtlColorDeviceGray)clr; str += "(" + gryColor.getGray() + ")"; break; case PtlColor.COLOR_TYPE.TYPE_NONE: str += " : COLOR_TYPE.TYPE_NONE"; break; case PtlColor.COLOR_TYPE.TYPE_UNKNOWN: str += " : COLOR_TYPE.TYPE_UNKNOWN"; break; } return str; } } }