yuuty
@yuuty

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

C#のWindowsアプリケーションからAdobe Acrobat SDKを参照してPDFのテキスト抽出はできるのか?

解決したいこと

C#のWindowsアプリケーションからAdobe Acrobat SDKを参照してPDFのテキスト抽出はできるのか?

例)
C#のWindowsアプリケーションでPDFから全ページのテキストを抽出する必要があり、
Aspose.PDF for .NETやiTextSharpでは抽出できたのですが
Adobe Acrobat SDKを使用して抽出できるのか知りたいです。

開発環境

Visual Studio 2022
.NET Framework 4.8
Windowsアプリケーション

試したこと

※AcrobatのCOMオブジェクトを使用するために、プロジェクトに"Acrobat"という名前のCOM参照を追加
Visual Studioのソリューションエクスプローラーでプロジェクトを右クリックし、"参照の追加"を選択します。次に、"COM"タブに移動し、"AAdobe Acrobat 10.0 Type Libraryといったエントリを見つけて選択

using Acrobat;

static string ExtractTextFromPdf(string filePath)
{
    string extractedText = string.Empty;

    // AcrobatのApplicationオブジェクトを作成します。
    AcroAppClass acroApp = new AcroAppClass();

    try
    {
        // PDFを開きます。
        acroApp.OpenDocument(filePath);

        // ページ数を取得します。
        int pageCount = acroApp.GetNumPages();

        // 各ページのテキストを抽出します。
        for (int i = 0; i < pageCount; i++)
        {
            // ページを取得します。
            AcroAVDoc avDoc = acroApp.GetActiveDoc();
            AcroPDDoc pdDoc = (AcroPDDoc)avDoc.GetPDDoc();
            AcroPDPage pdPage = (AcroPDPage)pdDoc.AcquirePage(i);

            // テキストを抽出します。
            AcroPDPageContent pageContent = (AcroPDPageContent)pdPage.GetContents();
            extractedText += pageContent.GetText();
        }
    }
    catch (Exception ex)
    {
        // エラーハンドリングを行います。
        Console.WriteLine("テキストの抽出中にエラーが発生しました: " + ex.Message);
    }
    finally
    {
        // リソースを解放します。
        acroApp.CloseAllDocs();
        acroApp.Exit();
    }

    return extractedText;
}

発生している問題・エラー

上記のコードだと以下のようなエラーが出てビルドが通らないです。
そもそもWindowsアプリケーションからAdobe Acrobat SDKの参照は可能なのかを知りたいです。
Adobe Acrobat SDKについて文献を漁っているのですがWindowsアプリケーションから利用可能かが明記されている文献を探せずにおります。

image.png

image.png

image.png

0

3Answer

テキスト抽出は出来るかどうかに関しては、Excel VBAでやっているサンプルが見つかったので、COMを扱えるC#でも出来る可能性はあります。ただ、呼び出すクラスやメソッド名くらいは参考になるかもしれませんが、別言語なので当然サンプルがそのまま使える訳ではないので、そのへんはSDKのドキュメント調べながら試行錯誤するしかないかもしれませんね。有償版のAcrobatをC#で操作しようという人はそうそう居ないと思うので、C#だけで情報を探すのは困難でしょう。

エラーコード"CS1752"については、ググったら下記のページが引っかかりましたが。
参照したCOMの、相互運用型の埋め込みをFalseに設定したら解消されるかもしれません。

2Like

Comments

  1. @yuuty

    Questioner

    ありがとうございます。
    エラーコード"CS1752"については、相互運用型の埋め込みをFalseに設定したら解消されました。

    有償版のAcrobatをC#で操作しようという人はそうそう居ないと思うので、C#だけで情報を探すのは困難でしょう。

    そうですよね。なので、Acrobatのフォーラムに問いあわせてみました。
    OLEの機能を使えばWindowsアプリからもSDK参照してPDF操作可能なようですが、C#のサンプルや参考文献が少なすぎるので今回は業務での使用は見送りました。

SDKからのPDFの開き方が現状?変わっているようです。
以下コードにてPDFファイルを開くことが可能な模様ですが、いかがでしょうか?
当方製品版のAcrobatを使用していないためかCOMエラーとなり検証できておりませんが。。。
var avDoc = new AcroPDDoc();
avDoc.Open("");

1Like

Comments

  1. @yuuty

    Questioner

    ありがとうございます。
    Acrobatのフォーラムにも問い合わせしてみて、WindowsアプリからもSDK参照してPDF操作可能なようなのですが、C#のサンプルや参考文献が少なすぎるので今回は業務での使用は見送りました。

既に見送りになってしまってしまったとのことなので、手遅れなのですが、もし今後利用ができるように、少しだけコメントさせてください。

文書を開くには、こんな感じで行います。

CAcroPDDoc pddoc = new AcroPDDoc();
pddoc.open(filePath);

C#からもAcrobat SDKを操作することはできますが、直接的に呼び出せる機能が少ないです。ただし、Acrobat内で利用できるjavascriptの機能は多いので、ここで関数としてロジックを組んで、外側のC#からは、

Object jso = pddoc.GetJSObject();

Object? obj = jso.GetType().InvokeMember("hogeFunc",                 
             BindingFlags.InvokeMethod, null, jso, null);
System.Diagnostics.Debug.WriteLine(obj);
pddoc.Close();

という感じで呼び出すことができます。

別の方法では、Acrobat Services APIのExtract APIを利用するのもあり、こちらは簡単です。https://qiita.com/azblueground/items/75a37112e22ee289e722

1Like

Your answer might help someone💌