C#でPDF内のテキストと画像の座標を取得する

PDFドキュメントで指定されたテキストまたは画像の座標を取得すると、指定された領域を迅速に抽出できる要素の位置を特定できます。また、この操作は、PDFへの追加注釈、マーク、または自動スタンピングにも有益です。この記事では、C＃のPDFで指定されたテキストまたは画像の座標を抽出する方法を説明するための2つの例を示します。
* [C# で PDF 内の指定テキス ト の座標を取得](#cでpdf内の指定テキストの座標を取得)
* [C#でPDF内の指定した画像の座標を取得](#cでpdf内の指定した画像の座標を取得)

## .NET PDF ライブラリ
この記事で導入された例では、3番目のパーティライブラリ[**Spire.PDF for .NET**](https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html)が必要です。以下のリンクを介して製品パッケージをダウンロードしてから、DLLを手動で追加するか、[**Nuget**](http://www.nuget.org/packages/Spire.PDF/)を介して直接インストールできます。

https://www.e-iceblue.com/Download/download-pdf-for-net-now.html

## 背景情報
開始する前に、最初にライブラリの座標系に関する情報を理解します。
Spire.PDF for .NETで指定された座標系の起源は、PDFページの左上隅にあります。 x軸は、元のポイントの先頭にある元のポイントから右に伸びています。 y軸は、原点から垂直に伸びています（下の図に示すように）。
![pdfCoordinate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/32970244-8d34-8d4b-a8db-fb61bb764b3d.png)


xおよびy軸座標を指定することにより、PDFページの指定された位置でテキスト、写真、テーブル、その他の要素を描画できます。


## C#でPDF内の指定テキストの座標を取得
テキストの座標を指定するには、以下の2つの主な手順に従ってください。

1\. まず、PDFファイルに指定されたすべてのテキストを見つけるには、**`PdfTextFinder.Find()`** メソッドを使用する必要があります；
2\. テキストを見つけた後、**`PdfTextFragment.Positions`** を呼び出して（x、y）座標情報を取得します。

>**C# コード：**
```csharp
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Drawing;

namespace GetCoordinatesOfText
{
    class Program
    {
        static void Main(string[] args)
        {
            //PDFファイルの読み込み
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("蝶.pdf");

            //すべてのページを反復処理する
            foreach (PdfPageBase page in pdf.Pages)
            {
                //PdfTextFinderオブジェクトの作成
                PdfTextFinder finder = new PdfTextFinder(page);

                //検索オプションの設定
                PdfTextFindOptions options = new PdfTextFindOptions();
                options.Parameter = TextFindParameter.IgnoreCase;
                finder.Options = options;

                //ページ上の指定されたテキストをすべて検索する
                List<PdfTextFragment> fragments = finder.Find("成虫");

                //見つかったすべてのテキストを反復処理する
                foreach (PdfTextFragment fragment in fragments)
                {
                    //テキストの座標情報を取得する
                    PointF found = fragment.Positions[0];
                    Console.WriteLine(found);
                }
            }
        }
    }
}
```
![TextCordinate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/e003dad5-e841-451f-e14d-d1c01348e697.png)


## C#でPDF内の指定した画像の座標を取得 
テキスト座標を取得するのと同様に、画像座標を取得するには下記の2つの主な手順に従っ てください：

1\. まず **`PdfImageHelper.GetImagesInfo()`** メソッドを使って、PDF ページ上のすべての画像情報を取得します；
2\. 画像を取得した後、**`PdfImageInfo.Bounds`** プロパティを呼び出して(x, y)座標情報を取得します。

>**C# コード：**
```csharp
using Spire.Pdf;
using Spire.Pdf.Utilities;


namespace GetCoordinatesOfText
{
    class Program
    {
        static void Main(string[] args)
        {
            //PDFファイルの読み込み
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("蝶.pdf");

            //指定したページを取得する
            PdfPageBase page = pdf.Pages[0];

            //PdfImageHelperオブジェクトの作成
            PdfImageHelper helper = new PdfImageHelper();

            //ページの画像情報を取得する
            PdfImageInfo[] images = helper.GetImagesInfo(page);

            //最初の画像のX座標とY座標を取得する
            float xPos = images[0].Bounds.X;
            float yPos = images[0].Bounds.Y;
            Console.WriteLine("画像の座標は（{0},{1}）", xPos, yPos);
        }
    }
}
```

![ImageCoordinate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/8d99288c-3391-9e62-ce1c-fa2c81b21278.png)

* * *

**:pencil: ネットPDFライブラリのAPIリファレンス:**

https://www.e-iceblue.com/apireference/net/Spire.Pdf/html/N_Spire_Pdf.htm