チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション

Word ドキュメントを OFD(Open Fixed-layout Document)に変換する処理は、特に中国市場向けの C++ アプリケーションではよく求められます。例えば、公文書の提出、アーカイブ、またはレイアウトを厳密に維持する必要がある帳票出力などです。ただし、この変換を安定して実装するのは意外と簡単ではありません。従来の Microsoft Office(COM)に依存する方法は、サーバー環境では不安定になりやすく、デプロイや運用の負担も大きくなります。
本記事では、Spire.Doc for C++ を使用して、プログラムで Word を OFD に変換する方法を解説します。基本的な文書変換から、特定のページのみを OFD 形式で書き出すといった高度なシナリオまでカバーします。
Word は編集には便利ですが、中国向けの公文書やアーカイブ用途では OFD が標準として広く採用されています。Word を OFD に変換することで、次のようなメリットがあります。
特にバックエンド処理や自動化されたドキュメント生成のシナリオでは、OFD 形式への変換は実用的かつ重要なステップになります。
C++ で Word を OFD に変換する方法には、COM 自動化、外部ツールの呼び出し、または .docx フォーマットの手動解析など、いくつかのアプローチがあります。しかし、それぞれにプラットフォームの制約、環境依存、あるいは膨大な実装コストといったデメリットがあります。
Spire.Doc for C++ は、これらの問題の大部分を解決します。
変換を始める前に、開発環境とプロジェクトが適切に構成されていることを確認してください。
Include ディレクトリのパスを追加し、lib ディレクトリをリンクするように設定します。DLL ファイルが実行ファイルと同じディレクトリ、またはシステムパスにあることを確認してください。詳細な手順については、C++ アプリケーションに Spire.Doc for C++ を統合する方法を参照してください。
インストール後、コードを記述する前に以下の準備を行ってください。
ヘッダーのインクルード:
#include "Spire.Doc.o.h"
必要な名前空間の追加:
using namespace Spire::Doc;
プロジェクトの準備ができれば、Word を OFD に変換する処理は、わずか数行のコードで実現できます。
以下に完全な C++ の例を示します。
#include "Spire.Doc.o.h"
#include <iostream>
using namespace Spire::Doc;
int main()
{
// Document オブジェクトを作成
Document* document = new Document();
try {
// Word ファイルを読み込む
document->LoadFromFile(L"C:\\Users\\Tommy\\Desktop\\Sample.docx");
// OFD 形式で保存
document->SaveToFile(L"C:\\Users\\Tommy\\Desktop\\Sample.ofd", FileFormat::OFD);
// ドキュメントを閉じる
document->Close();
std::cout << "変換に成功しました!" << std::endl;
}
catch (const std::exception& ex) {
// エラーハンドリング
std::cerr << "エラーが発生しました: " << ex.what() << std::endl;
delete document;
return -1;
}
// メモリの解放
delete document;
return 0;
}

コードの解説:
Spire.Doc for C++ では、特定のページのみを書き出したり、画像の圧縮率やフォントの埋め込みを調整したりすることで、変換プロセスを詳細に制御できます。
Word ドキュメントの特定のページだけを OFD 形式に変換したい場合があります。以下の例では、特定のページを抽出して別個の OFD ファイルとして保存する方法を示します。
#include "Spire.Doc.o.h"
#include <iostream>
using namespace Spire::Doc;
int main()
{
// スマートポインタを使用して Document オブジェクトを作成
intrusive_ptr<Document> document = new Document();
try {
document->LoadFromFile(L"C:\\Users\\Tommy\\Desktop\\Sample.docx");
// 1ページ目から3ページ目までを抽出(インデックスは0から始まります)
intrusive_ptr<Document> newDoc = document->ExtractPages(0, 3);
// 抽出したページを OFD として保存
newDoc->SaveToFile(L"C:\\Users\\Tommy\\Desktop\\Sample_Partial.ofd", FileFormat::OFD);
document->Close();
newDoc->Close();
std::cout << "特定ページの抽出と変換に成功しました!" << std::endl;
}
catch (const std::exception& ex) {
std::cerr << "エラーが発生しました: " << ex.what() << std::endl;
return -1;
}
return 0;
}

コードの解説:
生成される OFD のファイルサイズを小さくしたり、異なる環境でもフォントが正しく表示されるようにしたりするために、変換設定を調整できます。
#include "Spire.Doc.o.h"
#include <iostream>
using namespace Spire::Doc;
int main()
{
intrusive_ptr<Document> document = new Document();
try {
document->LoadFromFile(L"C:\\Users\\Tommy\\Desktop\\Sample.docx");
// JPEG 画像の品質を75%に設定(0-100の範囲)
document->SetJPEGQuality(75);
// フォント埋め込み設定用のリストを作成
intrusive_ptr<ToPdfParameterList> parameters = new ToPdfParameterList();
// すべてのフォントをドキュメントに埋め込む
parameters->SetIsEmbeddedAllFonts(true);
document->SaveToFile(L"C:\\Users\\Tommy\\Desktop\\Sample.ofd", FileFormat::OFD);
document->Close();
std::cout << "カスタマイズ設定での変換に成功しました" << std::endl;
}
catch (const std::exception& ex) {
std::cerr << "エラー: " << ex.what() << std::endl;
return -1;
}
return 0;
}

A: いいえ、必要ありません。Spire.Doc for C++ は独立して動作し、システムに Word がインストールされていなくても変換が可能です。
A: 前述の通り、ExtractPages() メソッドを使用して必要なページを新しい Document オブジェクトとして抽出し、それを OFD 形式で保存してください。
A: これは通常、必要なフォントがシステムにインストールされていない場合に発生します。保存前に SetIsEmbeddedAllFonts(true) を呼び出してフォントを埋め込むことで解決できます。
A: 画像の圧縮を有効にするか、SetJPEGQuality() を使用して画質を下げることでファイルサイズを削減できます。
A: OFD は中国の電子文書国家標準であり、PDF は国際標準です。OFD は中国の電子政府や公式ワークフローで広く採用されています。どちらの形式もドキュメントのレイアウトと書式を保持します。
C++ で Word ドキュメントを OFD に変換する機能は、信頼性の高い文書共有や中国国家標準への準拠が必要なアプリケーションにとって不可欠です。Spire.Doc for C++ を使用すれば、Microsoft Office に依存することなく、プログラムで簡単にこの変換を実装できます。本ガイドで紹介したように、全文書の変換だけでなく、特定ページの抽出や詳細なカスタマイズも可能であり、実務における C++ ドキュメント処理の強力なソリューションとなります。