チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
PDF で作成される文書がますます多様化する中、機密情報を保護する必要性に迫られることがあります。機密情報を安全に保つために、他の多くの PDF 保護オプションが利用可能ですが、最も一般的な方法は、PDF 文書にカスタムの電子透かしを追加することです。この記事では、Spire.PDF for C++ を使用して、C++ で PDF に単一またはタイル状のテキスト透かしを追加する方法について説明します。
Spire.PDF for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。
Spire.PDF for C++ を C++ アプリケーションに統合する方法
Spire.PDF for C++ は、PDF ファイルに透かしを挿入するためのインターフェースやクラスを提供しません。しかし、透かし効果を模倣するために、各ページに「機密」、「コピー禁止」、「下書き」などのテキストを描画することは可能です。以下は、PDF文書に1行のテキスト透かしを追加する手順です。
#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;
}
タイル状の透かし効果を得るには、PdfTilingBrush クラスを利用することができます。タイルのブラシは、図形領域を埋めるために繰り返されるタイル状のパターンを生成します。以下は、PDF ドキュメントにタイル状のテキスト透かしを追加する手順です。
#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;
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
透かしとは、文書の内容の後ろに表示される薄い色のテキストや画像のことで、文書の状態(機密、下書きなど)を示したり、会社のロゴを暗黙のうちに表示するために使用することができます。 透かしは、文書の出所を示すのに役立ち、無許可のコピーや再配布を避けることができます。 この記事では、Spire.PDF for C++ を使用して PDF 文書に画像透かしを追加する方法について説明します。
Spire.PDF for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。
Spire.PDF for C++ を C++ アプリケーションに統合する方法
SpriePDF for C++ は、PdfPageBase->GetCanvas()->DrawImage() メソッドを提供し、PDF ページ上の任意の場所に画像を描画します。 そして、画像が文書の内容を覆い隠さないように、画像の透明度を調整することができます。 単一の画像透かしを追加する操作手順は以下の通りです。
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
int main()
{
//PdfDocumentのオブジェクトを作成する
PdfDocument* document = new PdfDocument();
//PDFファイルを読み込む
document->LoadFromFile(L"C:/私たちの間の距離.pdf");
//画像を読み込む
PdfImage* img = PdfImage::FromFile(L"C:/Logo.png");
//画像の高さと幅を取得する
int imageWidth = img->GetWidth();
int imageHeight = img->GetHeight();
//ページをループする
for (int i = 0; i < document->GetPages()->GetCount(); i++)
{
//指定したページを取得する
PdfPageBase* page = document->GetPages()->GetItem(i);
//ページの高さと幅を取得する
float pageWidth = (float)(page->GetActualSize()->GetWidth());
float pageHeight = (float)(page->GetActualSize()->GetHeight());
//透明度を設定する
page->GetCanvas()->SetTransparency(0.3f);
//ページの中央に画像を描画する
page->GetCanvas()->DrawImage(img, pageWidth / 2 - imageWidth / 2, pageHeight / 2 - imageHeight / 2, imageWidth, imageHeight);
}
//ドキュメントを保存する
document->SaveToFile(L"Output/単一の画像電子透かし.pdf");
document->Close();
delete document;
}
PdfTilingBrush クラスは、タイリングブラシを表し、領域を埋めるためにタイリングパターンを生成することができます。 以下は、タイル状の画像透かしを挿入するための詳細な手順です。
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
void InsertTiledImageWatermark(PdfPageBase* page, PdfImage* img, int row, int column) {
//タイルブラシを作成する
PdfTilingBrush* brush = new PdfTilingBrush(new SizeF(page->GetCanvas()->GetSize()->GetWidth() / (int)(row), page->GetCanvas()->GetSize()->GetHeight() / (int)(column)));
//透明度を設定する
brush->GetGraphics()->SetTransparency(0.3);
//ブラシに画像を描き込む
brush->GetGraphics()->DrawImage(img, new PointF((brush->GetSize()->GetWidth() - img->GetWidth()) / 2.f, (brush->GetSize()->GetHeight() - img->GetHeight()) / 2.f));
//ブラシを使ってページに画像を描画する
page->GetCanvas()->DrawRectangle(brush, new RectangleF(new PointF(0, 0), page->GetCanvas()->GetSize()));
}
int main()
{
//PdfDocumentのオブジェクトを作成する
PdfDocument* pdf = new PdfDocument();
//PDFファイルを読み込む
pdf->LoadFromFile(L"C:/私たちの間の距離.pdf");
//画像を読み込む
PdfImage* img = PdfImage::FromFile(L"C:/Logo.png");
//ページをループする
for (int i = 0; i < pdf->GetPages()->GetCount(); i++) {
//ページを取得する
PdfPageBase* page = pdf->GetPages()->GetItem(i);
//ページに透かしを入れる
InsertTiledImageWatermark(page, img, 3, 3);
}
//ドキュメントを保存する
pdf->SaveToFile(L"Output/タイル状の画像透かし.pdf");
pdf->Close();
delete pdf;
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。