Spire.Doc for C++

ニュース&リリース

2024-02-26

Spire.Doc for C++ 12.2.1では固定レイアウトによるページ コンテンツの取得がサポートされています

Spire.Doc for C++ 12.2.1を発表できることを嬉しく思います。このバージョンでは、固定レイアウトによるページ コンテンツの取得がサポートされています。詳細は以下の内容を読んでください。

このリリースで行われた変更のリストは次のとおりです
カテゴリー ID 説明
New feature - 固定レイアウトによるページ コンテンツの取得がサポートされています。
//ファイルパスを指定する
wstring input_path = DATAPATH;
wstring inputFile = input_path + L"in.docx";
wstring output_path = OUTPUTPATH;
wstring outputFile = output_path + L"out.txt";

//Document の新しいインスタンスを作成する
intrusive_ptr<Document> document = new Document();

//指定されたファイルからドキュメントを読み込む
document->LoadFromFile(inputFile.c_str(), FileFormat::Docx);
intrusive_ptr<FixedLayoutDocument> layoutDoc = new FixedLayoutDocument(document);
wstring result;

//ロードされたドキュメントを使用してFixedLayoutDocumentオブジェクトを作成する
intrusive_ptr<FixedLayoutLine> line = layoutDoc->GetPages()->GetItem(0)->GetColumns()->GetItem(0)->GetLines()->GetItem(0);
result.append(L"Line: ");
result.append(line->GetText());
result.append(L"\n");

//その行に関連付けられた元の段落を取得する
intrusive_ptr<Paragraph> para = line->GetParagraph();
result.append(L"Paragraph text: ");
result.append(para->GetText());
result.append(L"\n");

//最初のページに表示されるすべてのテキストをプレーン テキスト形式で取得する(ヘッダーとフッターを含む)
wstring pageText = layoutDoc->GetPages()->GetItem(0)->GetText();
result.append(pageText);
result.append(L"\n");

//ドキュメントの各ページをループし、各ページに表示される行数を出力する
for (int i = 0; i < layoutDoc->GetPages()->GetCount(); i++)
{
	intrusive_ptr<FixedLayoutPage> page = layoutDoc->GetPages()->GetItem(i);
	intrusive_ptr<LayoutCollection> lines = page->GetChildEntities(LayoutElementType::Line, true);
	result.append(L"Page ");
	result.append(std::to_wstring(page->GetPageIndex()));
	result.append(L" has ");
	result.append(std::to_wstring(lines->GetCount()));
	result.append(L" lines.");
	result.append(L"\n");
}

//最初の段落のレイアウト エンティティの逆引き参照を実行する
result.append(L"\n");
result.append(L"The lines of the first paragraph:");
result.append(L"\n");
intrusive_ptr<Paragraph> para2 = (Object::Dynamic_cast<Section>(document->GetFirstChild()))->GetBody()->GetParagraphs()->GetItemInParagraphCollection(0);
intrusive_ptr<LayoutCollection> paragraphLines = layoutDoc->GetLayoutEntitiesOfNode(para2);
for (int i = 0; i < paragraphLines->GetCount(); i++)
{
	intrusive_ptr<FixedLayoutLine> paragraphLine = Object::Dynamic_cast<FixedLayoutLine>(paragraphLines->GetItem(i));
	result.append(paragraphLine->GetText());
	result.append(L"\n");
	result.append(paragraphLine->GetRectangle()->ToString());
	result.append(L"\n");
	result.append(L"\n");
}

//抽出したテキストをファイルに書き込む
std::wofstream write(outputFile);
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << result;
write.close();

//ドキュメントリソースを破棄する
document->Dispose();
ここで Spire.Doc for C++ 12.2.1をダウンロードする