DioDocs for PDF
テキストの検索、置換および削除
機能 > テキストの検索、置換および削除

テキストの検索

DioDocs for PDF を使用して、PDF ドキュメント内を検索し、指定したテキストが出現する箇所をすべて取得することができます。正規表現、大文字・小文字を区別した検索など、一般的なテキスト検索のオプションにすべて対応しています。また、改行をまたいで検索できるので、異なる行にありながら論理的にはつながっているテキストも検索できます。 GcPdfDocument の FindText メソッドを使用して、PDF ドキュメントのテキスト検索を行います。 このメソッドは、FindTextParams と OutputRange クラスのオブジェクトをパラメータとして受け取り、読み込まれたドキュメント内にて指定されたテキストを検索しすべての出現箇所を取得します。FindTextParams クラスは、対象とする検索テキストを表します。このクラスには、後述する他の便利な検索オプションを組み込むこともできます。

テキストの検索と強調表示

FindText メソッドは、検索されたテキストのすべての出現箇所のリストを返します。 GcGraphics クラスの FillPolygon および DrawPolygon メソッドを使用して、リストを反復処理し、検索結果を強調表示できます。

テキストの検索 

次のサンプルコードは、PDFドキュメント内のテキストを検索して強調表示する方法を示します。

C#
コードのコピー
public void CreatePDF(Stream stream)
{
    //ファイルをロードします
    var doc = new GcPdfDocument();
    using var fs = File.OpenRead("TimeSheet.pdf");
    doc.Load(fs);

    //テキスト境界を定義します
    var findText = new FindTextParams("HOURS", true, false);

    //テキストを検索します
    IList<FoundPosition> findTextList = doc.FindText(findText);

    //テキストを強調表示します
    foreach (FoundPosition text in findTextList)
    {
        //見つかったテキストの各出現の境界を取得します
        var g = doc.Pages[text.PageIndex].Graphics;
        Quadrilateral[] pos = text.Bounds;

        //テキストを強調表示します
        g.DrawPolygon(pos[0], Color.Yellow, 1);
        g.FillPolygon(pos[0], Color.FromArgb(100, Color.OrangeRed));
    }

    //pdfへ保存します 
    var newDoc = new GcPdfDocument();
    newDoc.Load(fs);
    doc.Save("FindText.pdf");

}

 

大文字・小文字を区別した検索

大文字と小文字の区別は、テキストを検索する際の基準の 1 つです。DioDocs for PDF を使用すると、大文字と小文字を区別して検索するかどうかを指定することができます。大文字と小文字を区別したテキストを検索するには、FindTextParams メソッドの matchCase パラメータを true に設定します。

Case Sensitive Search 

PDF ドキュメントにて大文字と小文字を区別してテキストを検索する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
//「time」という単語を検索すると、「Time」または「TIME」という単語は無視されます。
var findWord = new FindTextParams("time", false, true);
var findText = doc.FindText(findWord);

単語単位での検索

DioDocs for PDF では、単語単位で検索したり、PDF ドキュメントに存在する特定の単語のサブセットであるインスタンスを検索したりすることができます。単語単位で検索するには、FindTextParams メソッドの wholeWord パラメータを true に設定します。

whole word search

PDF ドキュメントにて単語単位で検索する方法については、次のサンプルコードを参照してください。

C#
コードのコピー
//「time」という単語を検索すると、「overtime」という単語は無視されます。
var findWord = new FindTextParams("Time", true, false);
var findText = doc.FindText(findWord);

正規表現での検索

正規表現は、特定のテキストや語句を検索するのではなく、日付、時刻、メールアドレスなど、共通のパターンを使用する可変テキストを検索したい場合に便利です。正規表現を使用して検索するには、FindTextParams メソッドに文字列パラメータとして正規表現を渡し、regex パラメータを true に設定します。

whole word search

C#
コードのコピー
//正規表現を使用して、PDF ドキュメントに存在するすべての日付を検索します
var findWord = new FindTextParams(@"\d+[/-]\w+[/-]\d\d", false, false, 72, 72, false, true);
var findText = doc.FindText(findWord);

DioDocs for PDF を使用したテキスト検索の実装方法については、DioDocs for PDF サンプルブラウザを参照してください。

テキストの置換

DioDocs for PDFでは、GcPdfDocument クラス、Page クラス、および ITextMap インタフェースの ReplaceText メソッドを使用して、ドキュメント全体または特定のページのテキストを置き換えることができます。このメソッドは、FindTextParams クラスのオブジェクトと新しいテキスト文字列とともに他のパラメータを受け取り、置換対象のテキストをすべて検索して置換します。置換対象のテキストを検索し、置換されるテキストを収容するために必要なスペースを調整しながら、新しいテキストに置換します。

次のサンプルコードは、ドキュメント全体でテキストを置換する方法を示します。

C#
コードのコピー
// ドキュメント内の単語「.NET Standard 2.0」を「.NET 6」に置き換えます
using (FileStream fs = new FileStream(@"..\..\..\DotnetFramework.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
{
    GcPdfDocument doc = new GcPdfDocument();
    doc.Load(fs);
    FindTextParams ftp = new FindTextParams(".NET Standard 2.0", true, false);
    doc.ReplaceText(ftp, ".NET 6", null, null, null);
    doc.Save("DotnetFramework_Document.pdf");
}

テキストの削除

DioDocs for PDF ではGcPdfDocument クラス、Page クラス、および ITextMap インターフェイスの DeleteText メソッドを使用して、ドキュメント全体または特定のページのテキストを削除できます。このメソッドは、FindTextParams クラスおよび DeleteTextMode 列挙体のオブジェクトを受け取ります。 DeleteTextMode 列挙体では、「Standard」と「PreserveSpace」の2つのオプションがあり、PDF ドキュメント内のテキストを削除する2つのモードを表します。

Standard モードでテキストを削除すると、削除されたテキストによって作成された空白を埋めるように、削除されたテキストの後のテキストが移動されます。ただし、PreserveSpace モードでは、ドキュメントが削除されたテキストの場所に空白を保持し、削除されたテキストの後のテキストが移動されません。

次のサンプルコードは、Standardモードを使用して PDF ドキュメントの最初のページからテキストを削除する方法を示します。

C#
コードのコピー
// DeleteTextMode.Standard を使用して、最初のページから単語「wetlands」を削除します
using (FileStream fs = new FileStream(@"..\..\..\Wetlands.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
{
    GcPdfDocument doc = new GcPdfDocument();
    doc.Load(fs);
    FindTextParams ftp = new FindTextParams("wetlands", true, false);
    doc.Pages[0].DeleteText(ftp, DeleteTextMode.Standard);
    doc.Save("wetlands_deleted.pdf");
}