チュートリアル

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

チュートリアル»C++»Spire.PDF for C++»透かし»C++:PDF ドキュメントにテキスト透かしを追加する方法
2023-03-17

C++:PDF ドキュメントにテキスト透かしを追加する方法

PDF で作成される文書がますます多様化する中、機密情報を保護する必要性に迫られることがあります。機密情報を安全に保つために、他の多くの PDF 保護オプションが利用可能ですが、最も一般的な方法は、PDF 文書にカスタムの電子透かしを追加することです。この記事では、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 ファイルに透かしを挿入するためのインターフェースやクラスを提供しません。しかし、透かし効果を模倣するために、各ページに「機密」、「コピー禁止」、「下書き」などのテキストを描画することは可能です。以下は、PDF文書に1行のテキスト透かしを追加する手順です。

  • PdfDocument のオブジェクトを作成します。
  • PdfDocument->LoadFromFile() メソッドを使用して PDF ドキュメントを読み込みます。
  • PdfDocument->GetPages()->GetItem() メソッドを使用して、ドキュメントから特定のページを取得します。
  • PdfPageBase->GetCanvas()->TraslateTransform() メソッドを使用して、座標系を指定された座標に変換します。
  • PdfPageBase->GetCanvas()->RotateTransform() メソッドを使用して、座標系を反時計回りに45度回転させます。このステップと上記のステップにより、透かしが45度の角度でページの中央に表示されることが確認されました。
  • PdfPageBase->GetCanvas()->DrawString() メソッドを使用して、ページ上にテキストの透かしを描きます。
  • PdfDocument->SaveToFile() メソッドを使用して、ドキュメントを別の PDF ファイルに保存します。
  • C++
#include "Spire.Pdf.o.h";

using namespace std;
using namespace Spire::Pdf;
using namespace Spire::Common;

int main()
{
	//入力ファイルおよび出力ファイルのパスを指定する
	wstring inputFilePath = L"C:/私たちの間の距離.pdf";
	wstring outputFilePath = L"Output/単一のテキスト透かし.pdf";

	//PdfDocumentオブジェクトを作成する
	PdfDocument* doc = new PdfDocument();

	//PDFファイルを読み込む
	doc->LoadFromFile(inputFilePath.c_str());

	//フォントを作成する
	PdfTrueTypeFont* font = new PdfTrueTypeFont(L"Yu Gothic", 50.0f, PdfFontStyle::Bold, true);

	//ブラシを作成する
	PdfBrush* brush = PdfBrushes::GetDarkGray();

	//透かしのテキストを指定する
	wstring text = L"コピー禁止";

	//文字サイズを測る
	SizeF textSize = font->MeasureString(text.c_str());

	//座標系の移動量を算出するための2つのオフセットを算出する
	float offset1 = (float)(textSize.GetWidth() * sqrt(2) / 4);
	float offset2 = (float)(textSize.GetHeight() * sqrt(2) / 4);

	//ドキュメント内のページをループする
	for (size_t i = 0; i < doc->GetPages()->GetCount(); i++)
	{
		//特定のページを取得する
		PdfPageBase* page = doc->GetPages()->GetItem(i);

		//ページの透明度を設定する
		page->GetCanvas()->SetTransparency(0.8);

		//座標系を指定した座標に変換する
		page->GetCanvas()->TranslateTransform(page->GetCanvas()->GetSize()->GetWidth() / 2 - offset1 - offset2, page->GetCanvas()->GetSize()->GetHeight() / 2 + offset1 - offset2);

		//座標系を反時計回りに45度回転させる
		page->GetCanvas()->RotateTransform(-45);

		//ページ上に透かしテキストを描く
		page->GetCanvas()->DrawString(text.c_str(), font, brush, 0, 0, new PdfStringFormat(PdfTextAlignment::Left));
	}

	//ドキュメントを保存する
	doc->SaveToFile(outputFilePath.c_str());
	doc->Close();
	delete doc;
}

C++:PDF ドキュメントにテキスト透かしを追加する方法

PDF ドキュメントにタイル状のテキスト透かしを追加する

タイル状の透かし効果を得るには、PdfTilingBrush クラスを利用することができます。タイルのブラシは、図形領域を埋めるために繰り返されるタイル状のパターンを生成します。以下は、PDF ドキュメントにタイル状のテキスト透かしを追加する手順です。

  • PDF ページにタイル状の透かしを追加するカスタムメソッド InsertTiledTextWatermark(PdfPageBase* page, wstring watermarkText, PdfTrueTypeFont* font, int rowNum, int columnNum) を作成することができます。パラメータ rowNumcolumnNum は、タイル状の透かしの行番号と列番号を指定します。
  • PdfDocument のオブジェクトを作成します。
  • PdfDocument->LoadFromFile() メソッドを使用して、PDFドキュメントを読み込みます。
  • ドキュメント内の全ページをループし、カスタムメソッド InsertTiledTextWatermark() を呼び出して、各ページに透かしを挿入します。
  • PdfDocument->SaveToFile() メソッドを使用して、ドキュメントを別のファイルに保存します。
  • C++
#include "Spire.Pdf.o.h";

using namespace std;
using namespace Spire::Pdf;
using namespace Spire::Common;

static void InsertTiledTextWatermark(PdfPageBase* page, wstring watermarkText, PdfTrueTypeFont* font, int rowNum, int columnNum)
{
	//文字サイズを測る
	SizeF textSize = font->MeasureString(watermarkText.c_str());

	//座標系の移動量を算出するための2つのオフセットを算出する
	float offset1 = (float)(textSize.GetWidth() * sqrt(2) / 4);
	float offset2 = (float)(textSize.GetHeight() * sqrt(2) / 4);

	//ページの高さと幅を取得する
	float height = page->GetActualSize()->GetHeight();
	float width = page->GetActualSize()->GetWidth();

	//タイル型のブラシを作成する
	PdfTilingBrush* brush = new PdfTilingBrush(new SizeF(width / columnNum, height / rowNum));
	brush->GetGraphics()->SetTransparency(0.5f);
	brush->GetGraphics()->TranslateTransform(brush->GetSize()->GetWidth() / 2 - offset1 - offset2, brush->GetSize()->GetHeight() / 2 + offset1 - offset2);
	brush->GetGraphics()->RotateTransform(-45);

	//ブラシに透かしテキストを描く
	brush->GetGraphics()->DrawString(watermarkText.c_str(), font, PdfBrushes::GetRed(), 0, 0, new PdfStringFormat(PdfTextAlignment::Left));

	//タイリングブラシでページ全体を覆うように矩形を描く
	page->GetCanvas()->DrawRectangle(brush, new RectangleF(new PointF(0, 0), page->GetActualSize()));
}

int main()
{
	//入力ファイルおよび出力ファイルのパスを指定する
	wstring inputFilePath = L"C:/私たちの間の距離.pdf";
	wstring outputFilePath = L"Output/タイル状のテキスト透かし.pdf";

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

	//PDFファイルを読み込む
	doc->LoadFromFile(inputFilePath.c_str());

	//透かしのテキストを指定する
	wstring text = L"下書き";

	//フォントを作成する
	PdfTrueTypeFont* font = new PdfTrueTypeFont(L"Yu Gothic", 20.0f, PdfFontStyle::Bold, true);

	//ドキュメント内のページをループする
	for (size_t i = 0; i < doc->GetPages()->GetCount(); i++)
	{
		//カスタムメソッドを呼び出して、タイル状のテキスト透かしを挿入します。
		InsertTiledTextWatermark(doc->GetPages()->GetItem(i), text.c_str(), font, 3, 3);
	}

	//ドキュメントを保存する
	doc->SaveToFile(outputFilePath.c_str());
	doc->Close();
	delete doc;
}

C++:PDF ドキュメントにテキスト透かしを追加する方法

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

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

Read 550 times