// // PDFNet Copyright (c) 2001-2008 by PDFTron Systems Inc. All Rights Reserved. // using System; using pdftron; using pdftron.Common; using pdftron.Filters; using pdftron.SDF; using pdftron.PDF; namespace AddImageTestCS { class AddImageTest { /// //----------------------------------------------------------------------------------- // This sample illustrates how to embed various raster image formats // (e.g. TIFF, JPEG, JPEG2000, JBIG2, GIF, PNG, BMP, etc.) in a PDF document. //----------------------------------------------------------------------------------- /// static void Main(string[] args) { PDFNet.Initialize(); PDFNet.SetResourcesPath("../../../../../resources"); // Relative path to the folder containing test files. string input_path = "../../../../TestFiles/"; string output_path = "../../../../TestFiles/Output/"; try { Console.WriteLine("-------------------------------------------------"); PDFDoc doc = new PDFDoc(); ElementBuilder f = new ElementBuilder(); // Used to build new Element objects ElementWriter writer = new ElementWriter(); // Used to write Elements to the page Page page = doc.PageCreate(); // Start a new page writer.Begin(page); // Begin writing to this page // ---------------------------------------------------------- // Embed a JPEG image to the output document. Image img = Image.Create(doc, input_path + "peppers.jpg"); // You can also directy any .NET Bitmap. The following commented-out code // is equivalent to above line: System.Drawing.Bitmap bmp; // System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(input_path + "peppers.jpg"); // Image img = Image.Create(doc, bmp); Element element = f.CreateImage(img, new Matrix2D(200, 0, 0, 250, 50, 500)); writer.WritePlacedElement(element); // ---------------------------------------------------------- // Add a PNG image to the output file img = Image.Create(doc, input_path + "butterfly.png"); element = f.CreateImage(img, new Matrix2D(img.GetImageWidth(), 0, 0, img.GetImageHeight(), 300, 500)); writer.WritePlacedElement(element); // ---------------------------------------------------------- // Add a GIF image to the output file bmp = new System.Drawing.Bitmap(input_path + "pdfnet.gif"); img = Image.Create(doc, bmp); element = f.CreateImage(img, new Matrix2D(bmp.Width, 0, 0, bmp.Height, 50, 350)); writer.WritePlacedElement(element); // ---------------------------------------------------------- // Add a TIFF image to the output file bmp = new System.Drawing.Bitmap(input_path + "grayscale.tif"); img = Image.Create(doc, bmp); element = f.CreateImage(img, new Matrix2D(bmp.Width, 0, 0, bmp.Height, 10, 50)); writer.WritePlacedElement(element); // ---------------------------------------------------------- // Add a BMP image to the output file bmp = new System.Drawing.Bitmap(input_path + "pdftron.bmp"); img = Image.Create(doc, bmp); element = f.CreateImage(img, new Matrix2D(bmp.Width, 0, 0, bmp.Height, 255, 700)); writer.WritePlacedElement(element); writer.End(); // Finish writing to the page doc.PagePushBack(page); // ---------------------------------------------------------- // Embed a multi-page TIFF to the output file // Create a new page page = doc.PageCreate(new Rect(0, 0, 612, 794)); writer.Begin(page); // Begin writing to the page // Embed the first TIFF page. Use JBIG2 Encoding // Use JBIG2 Encoding ObjSet objset = new ObjSet(); Obj jbig2_hint = objset.CreateName("JBIG2"); bmp = new System.Drawing.Bitmap(input_path + "multipage.tif"); img = Image.Create(doc, bmp, jbig2_hint); element = f.CreateImage(img, new Matrix2D(612, 0, 0, 794, 0, 0)); writer.WritePlacedElement(element); writer.End(); // Finish writing to the page doc.PagePushBack(page); // Embed the second TIFF frame. Use JBIG2 Encoding page = doc.PageCreate(); // Create a new page writer.Begin(page); // Begin writing to this page // Select the current TIFF page using SelectActiveFrame bmp.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, 1); img = Image.Create(doc, bmp, jbig2_hint); element = f.CreateImage(img, new Matrix2D(612, 0, 0, 794, 0, 0)); writer.WritePlacedElement(element); writer.End(); // save changes to the current page doc.PagePushBack(page); // ---------------------------------------------------------- // Add a JPEG2000 (JP2) image to the output file // Create a new page page = doc.PageCreate(); writer.Begin(page); // Begin writing to the page // Embed the image. img = Image.Create(doc, input_path + "palm.jp2"); // Position the image on the page. element = f.CreateImage(img, new Matrix2D(img.GetImageWidth(), 0, 0, img.GetImageHeight(), 96, 80)); writer.WritePlacedElement(element); // Write 'JPEG2000 Sample' text string under the image. writer.WriteElement(f.CreateTextBegin(Font.Create(doc, Font.StandardType1Font.e_times_roman), 32)); element = f.CreateTextRun("JPEG2000 Sample"); element.SetTextMatrix(1, 0, 0, 1, 190, 30); writer.WriteElement(element); writer.WriteElement(f.CreateTextEnd()); writer.End(); // Finish writing to the page doc.PagePushBack(page); // ---------------------------------------------------------- // The following sample illustrates how to directly embed a JPEG // image in PDF without transcoding. page = doc.PageCreate(); // Create a new page writer.Begin(page); // Begin writing to the page bmp = new System.Drawing.Bitmap(input_path + "peppers.jpg"); StdFile file = new StdFile(input_path + "peppers.jpg", StdFile.OpenMode.e_read_mode); FilterReader reader = new FilterReader(file); img = Image.Create(doc, reader, bmp.Width, bmp.Height, 8, ColorSpace.CreateDeviceRGB(), Image.InputFilter.e_jpeg); // the format of the input data stream file.Close(); element = f.CreateImage(img, new Matrix2D(bmp.Width*1.4, 0, 0, bmp.Height*1.4, 0, 0)); writer.WritePlacedElement(element); file.Close(); writer.End(); // save changes to the current page doc.PagePushBack(page); doc.Save(output_path + "addimage.pdf", SDFDoc.SaveOptions.e_linearized); Console.WriteLine("Done. Result saved in addimage.pdf..."); doc.Close(); } catch (PDFNetException e) { Console.WriteLine(e.Message); } PDFNet.Terminate(); } } }