チュートリアル

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

チュートリアル»C++»Spire.Doc for C++»保護»C++:Word ドキュメントの保護と保護解除
2023-04-17

C++:Word ドキュメントの保護と保護解除

ドキュメントのセキュリティは、重要なデータやプライベートなデータが Word ドキュメントに含まれている場合に特に重要です。Word ドキュメントには、パスワード保護読み取り専用モード編集制限部分的な保護など、ドキュメントを保護するために使用できるセキュリティ オプションがいくつか用意されています。一方、保護が不要になった場合、作業効率を上げるために、Word ドキュメントの保護を解除する必要がある場合があります。

この記事では、Spire.Doc for C++ を使用して Word ドキュメントを保護または保護解除する方法について紹介します。

Spire.Doc for C++ をインストールします

Spire.Doc for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。

Spire.Doc for C++ を C++ アプリケーションに統合する方法

Word ドキュメントをパスワードで保護する

ドキュメントをパスワードで暗号化することで、自分と特定の人だけがそのドキュメントを読んだり編集したりできるようにすることができます。以下は、Spire.Doc for C++ を使用して、Word ドキュメントをパスワードで保護する手順です。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。
  • Document->Eencrypt(LPCWSTR_S password) メソッドを使用して、ドキュメントをパスワード付きで暗号化します。
  • Document->SaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Document のオブジェクトを作成する
    Document* document = new Document();

    //Wordファイルを読み込む
    document->LoadFromFile(L"C:\\予定外.docx");

    //パスワードでドキュメントを暗号化する
    document->Encrypt(L"password");

    //ドキュメントを保存する
    document->SaveToFile(L"Output/暗号化.docx", FileFormat::Docx2013);
    document->Close();
    delete document;
}

C++:Word ドキュメントの保護と保護解除

Word ドキュメントの編集を制限する

ドキュメントを読む許可は与えるが、その人ができる変更の種類を制限したい場合、特定の保護タイプと許可パスワードでドキュメントを保護することができます。

保護の種類 説明
AllowOnlyComments ドキュメント内のコメントの修正は可能です。
AllowOnlyFormFields ドキュメント内のフォームフィールドへのデータ入力のみが許可されます。
AllowOnlyReading ドキュメントは読み取り専用です。
AllowOnlyRevisions ドキュメントに変更マークを追加することのみが許可されます。
NoProtection ドキュメントは保護されていません。

Spire.Doc for C++ を使用して、Word ドキュメントの編集を制限する手順を以下に示します。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。
  • Document->Protect(Spire::Doc::ProtectionType type, LPCWSTR_S password) メソッドを使用して、保護種類と許可パスワードを指定してドキュメントを保護します。
  • Document->SaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Document のオブジェクトを作成する
    Document* document = new Document();

    //Wordファイルを読み込む
    document->LoadFromFile(L"C:\\予定外.docx");

    //保護種類とパスワードを指定してドキュメントを保護する
    document->Protect(ProtectionType::AllowOnlyReading, L"permission-psd");

    //ドキュメントを保存する
    document->SaveToFile(L"Output/編集の制限.docx", FileFormat::Docx2013);
    document->Close();
    delete document;
}

C++:Word ドキュメントの保護と保護解除

Word ドキュメントのセクションを保護する

Word ドキュメントでは、一部のセクションをロックし、残りのセクションを編集可能な状態にすることができます。以下は、Spire.Doc for C++ を使用して、Word ドキュメントの選択したセクションを保護する手順です。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。
  • Document->Protect() メソッドを使用して、保護種類を AllowOnlyFormFields に設定します。
  • Section->SetProtectForm() メソッドの引数にfalseを渡すことで、特定のセクションの保護を解除します。他のセクションは、保護が維持されます。
  • Document->SaveToFile() メソッドを使用してドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Documentのオブジェクトを作成する
    Document* document = new Document();

    //Wordファイルを読み込む
    document->LoadFromFile(L"C:\\予定外.docx");

    //保護種類を"AllowOnlyFormFields "に設定する
    document->Protect(ProtectionType::AllowOnlyFormFields, L"permission-psd");

    //セクション2を保護解除する
    document->GetSections()->GetItem(1)->SetProtectForm(false);

    //ドキュメントを保存する
    document->SaveToFile(L"Output/セクションの保護.docx", FileFormat::Docx2013);
    document->Close();
    delete document;
}

C++:Word ドキュメントの保護と保護解除

Word ドキュメントに編集可能な領域を作成する

特定のセクションを編集可能にする以外に、変更可能な範囲を絞り込むために、テキスト範囲に基づいて編集可能な領域を作成することができます。以下は、Spire.Doc for C++ を使用して、読み取り専用の Word ドキュメントに編集可能な領域を作成する手順です。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile() メソッドを使用して Word ファイルを読み込みます。
  • Document->Protect() メソッドを使用して、保護種類を AllowOnlyReading に設定します。
  • PermissionStart のオブジェクトと PermissionEnd のオブジェクトを作成します。
  • 編集可能な領域の開始を示す PermissionStart のオブジェクトを DocumentObjectCollection->Insert(int index, Spire::Doc::lDocumentObject *entity) メソッドで段落の最初に挿入します。
  • 編集可能な領域の終わりを示す PermissionEnd のオブジェクトを、DocumentObjectCollection->Add(Spire::Doc::lDocumentObject *entity) メソッドで段落の終わりに追加します。
  • Document->SaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Documentのオブジェクトを作成する
    Document* document = new Document();

    //Wordファイルを読み込む
    document->LoadFromFile(L"C:\\予定外.docx");

    //保護種類をAllowOnlyReadingに設定する
    document->Protect(ProtectionType::AllowOnlyReading, L"permission-psd");

    //パーミッションの開始と終了のタグを作成する
    PermissionStart* start = new PermissionStart(document, L"regionOne");
    PermissionEnd* end = new PermissionEnd(document, L"regionOne");

    //選択した段落を編集できるようにするために、開始タグと終了タグを追加する
    document->GetSections()->GetItem(0)->GetParagraphs()->GetItem(0)->GetChildObjects()->Insert(0, start);
    document->GetSections()->GetItem(0)->GetParagraphs()->GetItem(2)->GetChildObjects()->Add(end);

    //ドキュメントを保存する
    document->SaveToFile(L"Output/編集可能な領域の設定.docx", FileFormat::Docx2013);
    document->Close();
    delete document;
}

C++:Word ドキュメントの保護と保護解除

Word ドキュメントから編集可能な領域を削除する

編集可能領域を削除するためには、ドキュメント内の「PermissionStart」「PermissionEnd」タグを探し出し、削除する必要があります。以下、詳しい手順を説明します。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile() メソッドを使用して、編集可能な領域を含むWordドキュメントを読み込みます。
  • ドキュメント内のすべての子オブジェクトをループし、ある子オブジェクトが PermissionStart クラスまたは PermissionEnd クラスのインスタンスであるかどうかを判断します。もしそうなら、Paragraph->GetChildObjects()->Remove(Spire::Doc::IDocumentObject *entity) メソッドを使用して、その子オブジェクトを段落から削除します。
  • Document->SaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

	//Documentのオブジェクトを作成する
	Document* document = new Document();

	//Wordファイルを読み込む
	document->LoadFromFile(L"Output\\編集可能な領域の設定.docx");

	//「PermissionStart」「PermissionEnd」タグを検索し、削除する
	for (int i = 0; i < document->GetSections()->GetCount(); i++)
	{
		Section* section = document->GetSections()->GetItem(i);
		for (int j = 0; j < section->GetBody()->GetParagraphs()->GetCount(); j++)
		{
			Paragraph* para = section->GetBody()->GetParagraphs()->GetItem(j);
			for (int k = 0; k < para->GetChildObjects()->GetCount(); k++)
			{
				DocumentObject* obj = para->GetChildObjects()->GetItem(k);
				if (dynamic_cast<PermissionStart*>(obj) != nullptr || dynamic_cast<PermissionEnd*>(obj) != nullptr)
				{
					para->GetChildObjects()->Remove(obj);
				}
				else
				{
					k++;
				}
			}
		}
	}

	//ドキュメントを保存する
	document->SaveToFile(L"Output/編集可能な領域の削除.docx", FileFormat::Docx2013);
	document->Close();
	delete document;
}

Word ドキュメントから制限を解除する

Spire.Doc for C++ は、権限パスワードを知らなくても編集制限を解除することができます。以下、詳しい手順を説明します。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile() メソッドを使用して、編集制限を含む Word ドキュメントを読み込みます。
  • Document->Protect() メソッドを使用して、保護種類を NoProtection に設定します。
  • Document->SaveToFile() メソッドを使用してドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Documentのオブジェクトを作成する
    Document* document = new Document();

    //Wordファイルを読み込む
    document->LoadFromFile(L"Output\\編集の制限.docx");

    //保護種類をNoProtectionにする
    document->Protect(ProtectionType::NoProtection);

    //ドキュメントを保存する
    document->SaveToFile(L"Output/制限の解除.docx", FileFormat::Docx2013);
    document->Close();
    delete document;
}

Word ドキュメントからパスワードを削除する

暗号化された Word ドキュメントのパスワードが不要になった場合、削除することができます。以下、詳しい手順を説明します。

  • Document のオブジェクトを作成します。
  • Document->LoadFromFile((LPCWSTR_S fileName, Spire::Doc::FileFormat fileFormat, LPCWSTR_S password) メソッドを使用してパスワード保護された Word ドキュメントを読み込みます。
  • Document->RemoveEncryption() メソッドを使用して、パスワードを削除します。
  • Document->SaveToFile() メソッドを使用して、ドキュメントを保存します。
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

    //Documentのオブジェクトを作成する
    Document* document = new Document();

    //暗号化されたWordファイルを読み込む
    document->LoadFromFile(L"Output\\暗号化.docx", FileFormat::Docx, L"password");

    //開くパスワードを解除する
    document->RemoveEncryption();

    //ドキュメントを保存する
    document->SaveToFile(L"Output/パスワードの削除.docx", FileFormat::Docx2013);
    document->Close();
    delete document;
}

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 359 times