C++でのアーティファクトの操作
PDFでウォーターマークを取得する方法
PDFのアーティファクトとは何ですか?
PDF / UA ISOリファレンスによると、重要ではない、または背景に表示されないコンテンツは、関連情報を運ばないため、支援技術がそれを無視できるようにアーティファクトとしてフラグを立てる必要があります。 アーティファクトがプログラムで作成できない場合、Aspose.PDF for C++ を使用して手動で行う必要があります。
Artifact クラスには次のプロパティが含まれています:
- Artifact.Type – アーティファクトのタイプを取得します(値にはBackground, Layout, Page, Pagination, Undefinedを含むArtifact.ArtifactType列挙の値をサポートします)。
- Artifact.Subtype – アーティファクトのサブタイプを取得します(Artifact.ArtifactSubtype列挙の値をサポートし、値にはBackground、Footer、Header、Undefined、Watermarkが含まれます)。
- Artifact.Contents – アーティファクト内部オペレーターのコレクションを取得します。サポートされる型はSystem.Collections.ICollectionです。
- Artifact.Form – アーティファクトのXFormを取得します(XFormが使用されている場合)。透かし、ヘッダー、およびフッターのアーティファクトには、すべてのアーティファクトの内容を示すXFormが含まれています。
- Artifact.Image – アーティファクトの画像を取得します(画像が存在する場合、存在しない場合はnull)。
- Artifact.Text – アーティファクトのテキストを取得します。
- Artifact.Rectangle – ページ上のアーティファクトの位置を取得します。
- Artifact.Rotation – アーティファクトの回転を取得します(度単位、正の値は反時計回りの回転を示します)。
- Artifact.Opacity – アーティファクトの不透明度を取得します。 可能な値は0から1の範囲で、1は完全に不透明です。
PDFファイルでアーティファクトを扱う例として、透かしを取り上げます。
Adobe Acrobatのサポートを受けて作成された透かしは、アーティファクトと呼ばれます(14.8.2.2 Present Content and PDF Specification Artifactsで説明されています)。アーティファクトを扱うためにAspose.PDFには2つのクラスがあります: Artifact と ArtifactCollection です。
特定のページ上のすべてのアーティファクトを取得するために、Page クラスにはArtifactsプロパティがあります。このトピックでは、PDFファイルで透かしアーティファクトを操作する方法を示します。
次のコードスニペットは、C++でPDFファイルの最初のページの各透かしを取得する方法を示しています。
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Facades;
void Artifacts::SetWatermark() {
String _dataDir("C:\\Samples\\");
auto document = MakeObject<Document>(_dataDir + u"sample.pdf");
auto artifact = MakeObject<WatermarkArtifact>();
String text(u"WATERMARK");
artifact->set_Text(text);
artifact->get_TextState()->set_ForegroundColor(Color::get_Blue());
artifact->get_TextState()->set_FontSize(72);
artifact->set_ArtifactHorizontalAlignment(HorizontalAlignment::Center);
artifact->set_ArtifactVerticalAlignment(VerticalAlignment::Center);
artifact->set_Rotation(45);
artifact->set_Opacity(0.5);
artifact->set_IsBackground(true);
document->get_Pages()->idx_get(1)->get_Artifacts()->Add(artifact);
document->Save(_dataDir + u"watermark.pdf");
}
背景画像を使用して、PDFドキュメントに透かしや独自のデザインを追加できます。Aspose.PDF for C++は、BackgroundArtifactクラスを使用して、ページオブジェクトに背景画像を追加します。
次のコードスニペットは、BackgroundArtifactオブジェクトを使用してPDFページに背景画像を追加する方法を示しています。
void Artifacts::SetBackground() {
String _dataDir("C:\\Samples\\");
// ドキュメントを開く
auto pdfDocument = MakeObject<Document>();
// ドキュメントオブジェクトにページを追加する
auto page = pdfDocument->get_Pages()->Add();
// 背景アーティファクトオブジェクトを作成する
auto background = MakeObject<BackgroundArtifact>();
// 背景アーティファクトオブジェクトの画像を指定する
background->set_BackgroundImage(System::IO::File::OpenRead(_dataDir + u"background.png"));
// ページのアーティファクトコレクションにBackgroundArtifactを追加する
page->get_Artifacts()->Add(background);
// 修正されたPDFを保存する
pdfDocument->Save(_dataDir + u"ImageAsBackground_out.pdf");
}
プログラミングサンプル: 透かしを取得する
次のコードスニペットは、PDFファイルの最初のページの各透かしを取得する方法を示しています。
void Artifacts::GettingWatermarks() {
String _dataDir("C:\\Samples\\");
// ドキュメントを開く
auto pdfDocument = MakeObject<Document>(_dataDir + u"watermark_new.pdf");
// サブタイプ、テキスト、およびアーティファクトの場所を反復処理して取得する
for (auto artifact : pdfDocument->get_Pages()->idx_get(1)->get_Artifacts())
{
Console::WriteLine(u"{0} {1} {2}", artifact->get_Subtype(),
artifact->get_Text(), artifact->get_Rectangle());
}
}
プログラミングサンプル: 特定のタイプのアーティファクトをカウントする
特定のタイプのアーティファクトの総数を計算するには(たとえば、透かしの総数)、次のコードを使用します。
void Artifacts::CountingArtifacts() {
String _dataDir("C:\\Samples\\");
// ドキュメントを開く
auto pdfDocument = MakeObject<Document>(_dataDir + u"watermark_new.pdf");
int count = 0;
for (auto artifact : pdfDocument->get_Pages()->idx_get(1)->get_Artifacts())
{
// アーティファクトのタイプが透かしの場合、カウンターを増加する
if (artifact->get_Subtype() == Artifact::ArtifactSubtype::Watermark) count++;
}
Console::WriteLine(u"ページには {0} 個の透かしが含まれています", count);
}