AnnotationDrawFilter.cs
// // This code is part of Document Solutions for PDF demos. // Copyright (c) MESCIUS inc. All rights reserved. // using System; using System.IO; using System.Drawing; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using GrapeCity.Documents.Pdf.Annotations; using GrapeCity.Documents.Pdf.Graphics; using GrapeCity.Documents.Svg; using GrapeCity.Documents.Drawing; namespace DsPdfWeb.Demos { // Shows how to programmatically control which annotations to include when saving a PDF as images. // The sample loads a one-page PDF containing several annotations, and saves that page as SVG // using DrawAnnotationFilter to include only annotations which satisfy certain conditions // (free text annotations that are within the page bounds). // The SVG is then inserted as the first page of the resulting PDF. // The second page shows the original PDF for reference. // The PDF used by this sample was generated by AnnotationTypes. public class AnnotationDrawFilter { public int CreatePDF(Stream stream) { var doc = new GcPdfDocument(); // Load a PDF with some annotations into the document: using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "AnnotationTypes.pdf")); doc.Load(fs); using var svgStream = new MemoryStream(); // Draw the first page of the PDF into an SVG: doc.Pages[0].SaveAsSvg(svgStream, new SaveAsImageOptions() { BackColor = Color.Transparent, DrawAnnotationFilter = (GcPdfDocument d, Page p, AnnotationBase a, ref bool draw) => { // Draw only free text annotations which also fit horizontally within the page bounds: draw = a is FreeTextAnnotation fta && fta.Rect.Left > 0 && fta.Rect.Right < p.Size.Width; } }); svgStream.Position = 0; // Create a GcSvgDocument from the saved SVG so that we can draw it in the resulting PDF: using var svgDoc = GcSvgDocument.FromStream(svgStream); // Insert a page into the PDF and draw the SVG on it, compare to the original on the 2nd page: var page = doc.Pages.Insert(0); var g = page.Graphics; var rc = new RectangleF(36, 36, page.Size.Width - 72, page.Size.Height - 72); g.DrawRectangle(rc, Color.DarkGoldenrod); g.FillRectangle(rc, Color.PaleGoldenrod); g.DrawSvg(svgDoc, rc); // Done: doc.Save(stream); return doc.Pages.Count; } } }