PDF からテキストや画像を抽出すると、Word 文書、Web ページ、プレゼンテーションなど、他の種類のファイルでこれらのコンテンツをすばやく再利用できます。この方法は、情報を最初から入力するなど、煩雑で時間のかかるプロセスを回避することができます。そのため、多くの時間と労力を節約するのに役立ちます。この記事では、Spire.PDF for C++ を使用して C++ で PDF からテキストと画像を抽出する方法について説明します。
Spire.PDF for C++ をインストールします
Spire.PDF for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。
Spire.PDF for C++ を C++ アプリケーションに統合する方法
PDF からテキストを抽出する
Spire.PDF for C++ には、PDF ページからテキストを抽出するための PdfTextExtractor クラスが用意されています。詳細な手順は次のとおりです:
- PdfDocument クラスのインスタンスを初期化します。
- PdfDocument->LoadFromFile() メソッドを使用して PDF ファイルをロードします。
- ファイル内のすべてのページをループします。
- 各ページに対して PdfTextExtractor オブジェクトを作成し、その ExtractText() メソッドを使用してテキストを抽出します
- 抽出したテキストを .txt ファイルに保存します。
- C++
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
using namespace std;
int main()
{
// PdfDocument クラスの新しいインスタンスを作成します
intrusive_ptr<PdfDocument> doc = new PdfDocument();
// 入力ファイルから PDF ドキュメントを読み込みます
doc->LoadFromFile(L"Input.pdf");
// 抽出後のテキストを保持する変数
wstring buffer = L"";
// ファイル内のすべてのページを繰り返し処理します
for (int i = 0; i < doc->GetPages()->GetCount(); i++)
{
// 現在のページを取得します
intrusive_ptr<PdfPageBase> page = doc->GetPages()->GetItem(i);
// 指定されたページ用のテキスト抽出オブジェクトを作成します
intrusive_ptr<PdfTextExtractor> textExtractor = new PdfTextExtractor(page);
// テキスト抽出用のオプションを作成します
intrusive_ptr<PdfTextExtractOptions> textExtractorOption = new PdfTextExtractOptions();
// ページからテキストを抽出します
buffer += textExtractor->ExtractText(textExtractorOption);
}
// 抽出後のテキストを .txt ファイルに保存します
wofstream write(L"ExtractText.txt");
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << buffer;
write.close();
doc->Close();
}
PDF の特定のページ領域からテキストを抽出する
Spire.PDF for C++ の PdfTextExtractor クラスと PdfTextExtractOptions を使用して、PDF ページ上の特定の矩形領域からテキストを抽出できます。詳細な手順は次のとおりです:
- PdfDocument クラスのインスタンスを初期化します。
- PdfDocument->LoadFromFile() メソッドを使用して PDF ファイルをロードします。
- ドキュメント内のすべてのページを繰り返し処理する、またはインデックスを使用して特定のページにアクセスします。
- 指定されたページに対して PdfTextExtractor オブジェクトを作成します。
- RectangleF を使用して抽出範囲を定義し、PdfTextExtractOptions の SetExtractArea() メソッドを使用してその範囲を設定します。
- PdfTextExtractor->ExtractText() メソッドを使用して、指定された領域からテキストを抽出します。
- 抽出したテキストを.txtファイルに保存します。
- C++
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
using namespace std;
int main()
{
// PdfDocument クラスの新しいインスタンスを作成します
intrusive_ptr<PdfDocument> doc = new PdfDocument();
// 入力ファイルから PDF ドキュメントを読み込みます
doc->LoadFromFile(L"sample.pdf");
// 抽出後のテキストを保持する変数
wstring buffer = L"";
// ファイル内のすべてのページを繰り返し処理します
for (int i = 0; i < doc->GetPages()->GetCount(); i++)
{
// 現在のページを取得します
intrusive_ptr<PdfPageBase> page = doc->GetPages()->GetItem(i);
// 指定されたページ用のテキスト抽出オブジェクトを作成します
intrusive_ptr<PdfTextExtractor> textExtractor = new PdfTextExtractor(page);
// テキスト抽出用のオプションを作成します
intrusive_ptr<PdfTextExtractOptions> textExtractorOption = new PdfTextExtractOptions();
// 抽出範囲を定義してオプションに設定します(例: X=0, Y=0, 幅=600, 高さ=200 の矩形領域)
textExtractorOption-> SetExtractArea(new RectangleF(0, 0, 600, 200));
// ページからテキストを抽出します
buffer += textExtractor->ExtractText(textExtractorOption);
}
// 抽出後のテキストを .txt ファイルに保存します
wofstream write(L"ExtractTextFromPageArea.txt");
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << buffer;
write.close();
doc->Close();
}
PDF から画像を抽出する
PdfImageHelper クラスを使用すると、PDF ファイル内のページから画像を抽出できます。詳細な手順は次のとおりです:
- PdfDocument クラスのインスタンスを初期化します。
- PdfDocument->LoadFromFile() メソッドを使用して PDF ファイルをロードします。
- 画像抽出を支援するため、PdfImageHelper クラスのインスタンスを初期化します。
- ドキュメント内のすべてのページを繰り返し処理します。
- 各ページに対して、PdfImageHelper->GetImagesInfo() メソッドを使用してページ上のすべての画像に関する情報を取得します。
- 抽出された画像をループ処理し、それぞれを PNG ファイルとして保存します。
- C++
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
using namespace std;
int main()
{
// PdfDocument クラスの新しいインスタンスを作成します
intrusive_ptr<PdfDocument> doc = new PdfDocument();
// 入力ファイルから PDF ドキュメントを読み込みます
doc->LoadFromFile(L"sample.pdf");
// ページから画像を抽出するための画像ヘルパーを初期化します
intrusive_ptr<PdfImageHelper> imagehelper = new PdfImageHelper();
int imageIndex = 0;
// ファイル内のすべてのページを繰り返し処理します
for (int i = 0; i < doc->GetPages()->GetCount(); i++)
{
// 現在のページを取得します
intrusive_ptr<PdfPageBase> page = doc->GetPages()->GetItem(i);
// ページ上のすべての画像に関する情報を取得します
vector<intrusive_ptr<Utilities_PdfImageInfo>> exImages = imagehelper->GetImagesInfo(page);
// 画像をループ処理し、それぞれを保存します
for (auto image : exImages)
{
std::wstring imageFileName = L"Image\\Image-" + to_wstring(imageIndex) + L".png";
image->GetImage()->Save(imageFileName.c_str());
imageIndex++;
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。