/* Antenna House PDF Tool API V8.0 .NET Interface sample program 概要:テキスト検索:正規表現での検索 Copyright 2025- Antenna House, Inc. */ using PdfTkNet; using System; using System.Xml; namespace SearchTextRegEx { class Program { static void Main(string[] args) { if (args.Length < 3) { Console.WriteLine("usage: SearchTextRegEx.exe in-pdf-file out-pdf-file keyword"); return; } try { using (PtlParamInput inputFile = new PtlParamInput(args[0])) using (PtlParamOutput outputFile = new PtlParamOutput(args[1])) using (PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); // ページコンテナの取得 using (PtlPages pages = doc.getPages()) { // ページコンテナが空かどうか if (pages.isEmpty()) { Console.WriteLine("ページコンテナが空"); return; } using (PtlParamSearchText paramSearchText = new PtlParamSearchText()) // 検索の為のパラメータ using (PtlColorDeviceRGB colorRed = new PtlColorDeviceRGB(1.0f, 0.0f, 0.0f)) { // 検索設定 paramSearchText.appendTextRegEx(args[2]); paramSearchText.setTextType(PtlParamSearchText.TEXT_TYPE.TEXT_RAW); // 検索実行して検索結果コンテナ取得 using (PtlSearchTextResults results = doc.searchText(paramSearchText)) { int numResults = results.getCount(); for (int i = 0; i < numResults; ++i) { // 検索結果取得 using (PtlSearchTextResult result = results.get(i)) { // 検索に使用したキーワード String keyword = result.getKeyword(); // ヒットしたページ番号 int pageNumber = result.getPageNumber(); using (PtlPage page = pages.get(pageNumber)) using (PtlAnnots annots = page.getAnnots()) { // 検索結果詳細コンテナ取得 using (PtlSearchTextResultDetails details = result.getResultDetails()) { int numDetails = details.getCount(); for (int j = 0; j < numDetails; ++j) { // 検索結果詳細取得 using (PtlSearchTextResultDetail resultDetail = details.get(j)) { // 検索に使用したキーワードの部分文字列 String keywordD = resultDetail.getKeyword(); // 文字列にハイライト注釈を付ける using (PtlAnnotHighlight annot = new PtlAnnotHighlight()) using (PtlQuadPoints quads = annot.getQuadPoints()) { // 検索に使用したキーワードの部分文字列を囲むQuadPoint using (PtlQuadPoint quad = resultDetail.getQuadPoint()) { quads.append(quad); } // 検索に使用したキーワードの部分文字列が縦書きか bool verticalWriting = resultDetail.isVerticalWriting(); annot.setVerticalDirection(verticalWriting); annot.setColor(colorRed); annot.setMarkUpCA(0.5f); annots.append(annot); } } } } } } } } } } // ファイルに保存します。 doc.save(outputFile); } } catch (PtlException pex) { Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP()); pex.Dispose(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.WriteLine("-- 完了 --"); } } } }