How do I create a high-quality custom appearance for sticky note?

135 views
Skip to first unread message

Support

unread,
Sep 24, 2014, 1:49:30 PM9/24/14
to pdfne...@googlegroups.com

Q:

 

Custom appearance for sticky note looks pixelated
This is the code we're currently using:
 
/// <summary>
        /// Creates an object that contains a sticky note appearance that can be used on an annotation.
        /// </summary>
        /// <param name="pdfDoc">The pdf document.</param>
        /// <returns></returns>
        public static Obj CreateStickyNoteAppearance(PDFDoc pdfDoc)
        {
            var name = new AssemblyName("Papers.UI.Windows");
            var assembly = Assembly.Load(name);
 
            Image img = null;
            using (var stream = assembly.GetManifestResourceStream("Papers.UI.Windows.Resources.StickyNote.png"))
            {
                var bit = new BitmapImage();
                bit.BeginInit();
                bit.StreamSource = stream;
                bit.EndInit();
                bit.Freeze();
 
                var objSet = new ObjSet();
                var flateHint = objSet.CreateArray();
                flateHint.PushBackName("Flate");
                flateHint.PushBackName("Level");
                flateHint.PushBackNumber(9); // Set max compression vs speed.
 
                img = Image.Create(pdfDoc, bit, flateHint);
            }
 
 
            using (var writer = new ElementWriter())
            {
                writer.Begin(pdfDoc);
 
                using (var build = new ElementBuilder())
                {
                    var img_element = build.CreateImage(img);
                    var g = img_element.GetGState();
                    g.SetTransform(new Matrix2D(img.GetImageHeight(), 0, 0, img.GetImageWidth(), 0, 0));
                    writer.WritePlacedElement(img_element);
                }
 
                var stm = writer.End();
 
                // Set the bounding box
                stm.PutRect("BBox", img.GetImageWidth(), img.GetImageHeight(), 0, 0);
                stm.PutName("Subtype", "Form");
                return stm;
            }
        }

----------
A:

It seems that you are using a bitmap as a sticky note, which explains why you see pixels.

A quick workaround would be to increase the icon resolution (i.e. use more pixels for the image) but no matter what you will see pixels if you zoom sufficiently enough.

 

As an alternative you can create the icon appearance using vector graphics. For example, see parts of ElementBuilder sample:

   https://www.pdftron.com/pdfnet/samplecode.html#ElementBuilder

 

If your icons are stored as vector pages in a PDF you could load/import them as shown in Imposition sample project, then reference the form XObject in the annotation appearance:

  

   https://www.pdftron.com/pdfnet/samplecode.html#Imposition





 

Reply all
Reply to author
Forward
0 new messages