Word ドキュメントを扱う際、新しいドキュメントを作成するためやその他の目的で、ドキュメントからテキストや画像を抽出する必要があることがよくあります。 テキストをコピーしたり、画像を保存したりする作業をひとつひとつ手作業で行うと、非常に時間がかかり、ミスや漏れが発生しやすくなります。 この記事では、Spire.Doc for C++ を使って、プログラム的に Word ドキュメントからテキストや画像を素早く抽出する方法について説明します。
Spire.PDF for C++ をインストールします
Spire.Doc for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。
Spire.Doc for C++ を C++ アプリケーションに統合する方法
Word ドキュメントからテキストを抽出する
Spire.Doc for C++ の Document->GetText() メソッドは、Word ドキュメント内の全てのテキストを取得することができます。 ここでは、Word ドキュメントからテキストを抽出し、TXT ファイルとして保存する方法を詳しく説明します。
- Document のオブジェクトを作成します。
- Document->LoadFromFile() メソッドを使用して、Word ドキュメントを読み込みます。
- Document->GetText() メソッドを使用して、ドキュメントのすべてのテキストを取得します。
- TXT ファイルを作成し、抽出されたテキスト内容を書き込みます。
- C++
#include "Spire.Doc.o.h"
#include <iostream>
#include <locale>
#include <codecvt>
using namespace Spire::Doc;
using namespace std;
int main()
{
//Documentのオブジェクトを作成する
Document* document = new Document();
//Wordドキュメントを読み込む
document->LoadFromFile(L"C:/宇宙からの視点.docx");
//ドキュメントのテキストを取得する
wstring text = document->GetText();
//TXTファイルを作成し、抽出したテキストを書き込む
wofstream write(L"Output/テキストの抽出.txt");
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << text;
write.close();
document->Close();
delete document;
}
Word ドキュメントから画像を抽出する
Word ドキュメントの画像を抽出するには、ドキュメントの各サブオブジェクトが画像であるかどうかを判断し、DocPicture->GetImage() を使用して画像を抽出する必要があります。 以下はその詳細な手順です。
- Document のオブジェクトを作成します。
- Document->LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。
- ドキュメントを deque キューの末尾に付け、ベクターイメージのリストを作成します。
- ドキュメントのすべてのサブオブジェクトをループし、各サブオブジェクトが画像であるかどうかを判断します。 もしそうなら、DocPicture->GetImage() メソッドを使用して画像を取得し、リストに追加します。
- 取り出した画像を指定したパスに保存します。
- C++
#include "Spire.Doc.o.h"
#include <deque>
using namespace Spire::Doc;
int main() {
//Documentのオブジェクトを作成する
Document* document = new Document();
//Wordドキュメントを読み込む
document->LoadFromFile(L"C:/宇宙からの視点.docx");
//dequeキューの末尾にドキュメントを追加する
std::deque<ICompositeObject*> nodes;
nodes.push_back(document);
//ベクターグラフィックのリストを作成する
std::vector<Image*> images;
//ドキュメントのすべての子オブジェクトをループする
while (nodes.size() > 0)
{
ICompositeObject* node = nodes.front();
nodes.pop_front();
for (int i = 0; i < node->GetChildObjects()->GetCount(); i++)
{
IDocumentObject* child = node->GetChildObjects()->GetItem(i);
//すべての画像を取得し、リストに追加する
if (child->GetDocumentObjectType() == DocumentObjectType::Picture)
{
DocPicture* picture = dynamic_cast<DocPicture*>(child);
images.push_back(picture->GetImage());
}
else if (dynamic_cast<ICompositeObject*>(child) != nullptr)
{
nodes.push_back(dynamic_cast<ICompositeObject*>(child));
}
}
}
//指定したパスに画像を保存する
for (int i = 0; i < images.size(); i++)
{
std::wstring fileName = L"画像-" + std::to_wstring(i) + L".png";
images[i]->Save((L"Output/画像/" + fileName).c_str(), ImageFormat::GetPng());
}
document->Close();
delete document;
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。