SDKからのPDFの開き方が現状?変わっているようです。
以下コードにてPDFファイルを開くことが可能な模様ですが、いかがでしょうか?
当方製品版のAcrobatを使用していないためかCOMエラーとなり検証できておりませんが。。。
var avDoc = new AcroPDDoc();
avDoc.Open("");
本当に質問を削除しますか?
質問が解決した場合は、クローズをすることができます。
解決した質問を削除せずに残しておくことで、他の方の役に立つかもしれません!
ぜひご活用ください!
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アプリケーションから利用可能かが明記されている文献を探せずにおります。
2件の回答
テキスト抽出は出来るかどうかに関しては、Excel VBAでやっているサンプルが見つかったので、COMを扱えるC#でも出来る可能性はあります。ただ、呼び出すクラスやメソッド名くらいは参考になるかもしれませんが、別言語なので当然サンプルがそのまま使える訳ではないので、そのへんはSDKのドキュメント調べながら試行錯誤するしかないかもしれませんね。有償版のAcrobatをC#で操作しようという人はそうそう居ないと思うので、C#だけで情報を探すのは困難でしょう。
エラーコード"CS1752"については、ググったら下記のページが引っかかりましたが。
参照したCOMの、相互運用型の埋め込みをFalseに設定したら解消されるかもしれません。