PDF sticky Annotations using C#

次のコードスニペットは、Aspose.PDF.Drawing ライブラリでも動作します。

ウォーターマーク注釈の追加

ウォーターマーク注釈は、印刷されるページの寸法に関係なく、固定サイズと位置でページに表示されるグラフィックを表すために使用されます。

WatermarkAnnotation を使用して、PDFページの特定の位置にウォーターマークテキストを追加できます。ウォーターマークの不透明度も、不透明度プロパティを使用して制御することができます。

ウォーターマーク注釈を追加するための以下のコードスニペットを確認してください。

 //ドキュメントを読み込む
Aspose.PDF.Document doc = new Aspose.PDF.Document("source.pdf");

//注釈を追加するためのページオブジェクトを読み込む
Page page = doc.Pages[1];

//注釈を作成する
WatermarkAnnotation wa = new WatermarkAnnotation(page, new Aspose.PDF.Rectangle(100, 500, 400, 600));

//ページの注釈コレクションに注釈を追加する
page.Annotations.Add(wa);

//フォント設定のためのTextStateを作成する
Aspose.PDF.Text.TextState ts = new Aspose.PDF.Text.TextState();

ts.ForegroundColor = Aspose.PDF.Color.Blue;
ts.Font = FontRepository.FindFont("Times New Roman");

ts.FontSize = 32;

//注釈テキストの不透明度レベルを設定する

wa.Opacity = 0.5;
//注釈にテキストを追加する

wa.SetTextAndState(new string[] { "HELLO", "Line 1", "Line 2" }, ts);

//ドキュメントを保存する
doc.Save("Output.pdf");

PDFドキュメントで単一の画像を複数回参照する

PDFドキュメントで同じ画像を複数回使用する必要がある場合があります。新しいインスタンスを追加すると、結果のPDFドキュメントが大きくなります。そのため、Aspose.PDF for .NET 17.1.0にXImageCollection.Add(XImage)メソッドを追加しました。このメソッドは、元の画像と同じPDFオブジェクトへの参照を追加することで、PDFドキュメントのサイズを最適化します。

 Aspose.PDF.Rectangle imageRectangle = new Aspose.PDF.Rectangle(0, 0, 30, 15);

using (Aspose.PDF.Document document = new Aspose.PDF.Document("input.pdf"))
{
    using (var imageStream = File.Open("icon.png", FileMode.Open))
    {
        XImage image = null;
        foreach (Page page in document.Pages)
        {
            WatermarkAnnotation annotation = new WatermarkAnnotation(page, page.Rect);
            XForm form = annotation.Appearance["N"];
            form.BBox = page.Rect;
            string name;
            if (image == null)
            {
                name = form.Resources.Images.Add(imageStream);
                image = form.Resources.Images[name];
            }
            else
            {
                name = form.Resources.Images.Add(image);
            }
            form.Contents.Add(new Operator.GSave());
            form.Contents.Add(new Operator.ConcatenateMatrix(new Aspose.PDF.Matrix(imageRectangle.Width, 0, 0, imageRectangle.Height, 0, 0)));
            form.Contents.Add(new Operator.Do(name));
            form.Contents.Add(new Operator.GRestore());
            page.Annotations.Add(annotation, false);
            imageRectangle = new Aspose.PDF.Rectangle(0, 0, imageRectangle.Width * 1.01, imageRectangle.Height * 1.01);
        }
    }
    document.Save("output.pdf");
}