具体的には /AP /N の辞書です。
仕様は、
Portable document format — Part 1 - Adobe
12 Interactive Features
12.5 Annotations
12.5.5 Appearance Streams で詳しく触れられています。
PDFXplorer で確認すると、このようになっています:
サンプル PDF はこちら。
この外観辞書で表現している外観です:
外観辞書がないとどうなる?
- Adobe Reader などでは裏で作って表示するようです。印刷しても、きちんと印刷されます。
- PDF 印刷専用ソフトなどでは、印刷されない場合有り ← これが問題
そこで、外観辞書を自作する必要がでてきます。
画像一枚をベタで描画する注釈のサンプルです:
http://itext.2136553.n4.nabble.com/Stamp-annotations-td2150068.html
/// <summary>
/// CreateStampAnnotation
/// </summary>
/// <remarks>
/// How to compute width and height in pt.:
///
/// ```cs
/// var w = image.Width * 72f / image.DpiX;
/// var h = image.Height * 72f / image.DpiY;
/// ```
///
/// How to use:
///
/// ```cs
/// pdfStamper.AddAnnotation(CreateStampAnnotation(...), 1);
/// ```
/// </remarks>
/// <param name="writer">pdfStamper.Writer or such.</param>
/// <param name="annotContents">The body part of annotation tooltip.</param>
/// <param name="stampHintName">Such as "Approved" suitable for file name.</param>
/// <param name="stampAuthor">The bolded headline part of annotation tooltip suitable for author or title.</param>
/// <param name="stampTitle">The invisible title can be confirmed at annotation property.</param>
public static PdfAnnotation CreateStampAnnotation(
PdfWriter writer,
string annotContents,
string stampHintName,
string stampAuthor,
string stampTitle,
iTextSharp.text.Image image,
iTextSharp.text.Rectangle rect,
int annotFlags = PdfAnnotation.FLAGS_PRINT
)
{
var annot = PdfAnnotation.CreateStamp(writer, rect, annotContents, stampHintName);
{
{
// "/N" is a normal appearance should be stored in appearance dictionary.
var N = PdfAppearance.CreateAppearance(writer, image.Width, image.Height);
image.SetAbsolutePosition(0, 0);
N.AddImage(image);
new PdfStream(N.ToPdf(N.PdfWriter));
annot.SetAppearance(PdfName.N, N);
}
if (stampAuthor != null)
{
annot.Title = stampAuthor;
}
annot.Name = Guid.NewGuid().ToString();
annot.Flags = annotFlags;
if (stampTitle != null)
{
annot.Put(new PdfName("Subj"), new PdfString(stampTitle, PdfString.TEXT_UNICODE));
}
}
return annot;
}
CreateAppearance と SetAppearance という物を初めて知りました。


0 件のコメント:
コメントを投稿