public void UpdateXMPData() { try { //ExStart:UpdateXMP // path to the modified file string filePath = "Images/Jpeg/sample.jpg"; // get xmp wrapper XmpPacketWrapper xmpWrapper = MetadataUtility.ExtractXmpPackage(filePath); // if wrapper is null if (xmpWrapper == null) { // create it xmpWrapper = new XmpPacketWrapper(); } // create package XmpPackage addingSchema = new XmpPackage("rs", "http://www.metadataworkinggroup.com/schemas/regions/"); // set date property addingSchema.AddValue("rs:createdDate", DateTime.UtcNow); // set string property addingSchema.AddValue("rs:File", "File name"); //initialze unordered xmp array XmpArray managersArray = new XmpArray(XmpArrayType.UNORDERED); managersArray.AddItem("Joe Doe"); managersArray.AddItem("Adam White"); // set array property addingSchema.SetArray("rs:managers", managersArray); // initialize xmp language alternative LangAlt availableDays = new LangAlt(); // add first value for 'en-us' language availableDays.AddLanguage("en-us", "Tue"); // add second value for 'en-us' languge availableDays.AddLanguage("en-us", "Fri"); // set LangAlt property addingSchema.SetLangAlt("rs:days", availableDays); // update xmp wrapper with new schema xmpWrapper.AddPackage(addingSchema); // create XmpMetadata with updated wrapper XmpMetadata xmpMetadata = new XmpMetadata(); xmpMetadata.XmpPacket = xmpWrapper; // update XMP MetadataUtility.UpdateMetadata(filePath, xmpMetadata); //ExEnd:UpdateXMP } catch (Exception exp) { } }
/// <summary> /// Calculates a good default alt text for an image. /// Returns the image title or description metadata (if present), /// otherwise returns the filename of the image. /// </summary> /// <param name="imageSourceUri"></param> /// <returns></returns> private static string CalculateAltText(Uri imageSourceUri) { string altText = null; if (imageSourceUri.LocalPath != null) { //try to use XMP data to get a good altText XmpMetadata xmpMetadata = XmpMetadata.FromFile(imageSourceUri.LocalPath); if (xmpMetadata != null) { altText = xmpMetadata.Title; if (altText == null) { altText = xmpMetadata.Description; } } } //use the filename if (altText == null) { string imageName = imageSourceUri.Segments[imageSourceUri.Segments.Length - 1]; imageName = HttpUtility.UrlDecode(imageName); altText = Path.GetFileNameWithoutExtension(imageName); } return(altText); }
private void button1_Click(object sender, EventArgs e) { String input = "..\\..\\..\\..\\..\\..\\Data\\GetXMPMetadata.pdf"; PdfDocument doc = new PdfDocument(); // Read a pdf file doc.LoadFromFile(input); XmpMetadata xmpMetadata = doc.XmpMetaData; // Create a StringBuilder object to put the details StringBuilder builder = new StringBuilder(); builder.AppendLine("Author:" + xmpMetadata.GetAuthor()); builder.AppendLine("Title: " + xmpMetadata.GetTitle()); builder.AppendLine("Creation Date: " + xmpMetadata.GetCreateDate()); builder.AppendLine("Subject: " + xmpMetadata.GetSubject()); builder.AppendLine("Producer: " + xmpMetadata.GetProducer()); builder.AppendLine("Creator: " + xmpMetadata.GetCreator()); builder.AppendLine("Keywords: " + xmpMetadata.GetKeywords()); builder.AppendLine("Modify Date: " + xmpMetadata.GetModifyDate()); builder.AppendLine("Customed Property's value: " + xmpMetadata.GetCustomProperty("Field1")); String result = "GetXMPMetadata_out.txt"; File.WriteAllText(result, builder.ToString()); //Launch the result file DocumentViewer(result); }
private void button1_Click(object sender, EventArgs e) { //pdf file string input = "..\\..\\..\\..\\..\\..\\Data\\Sample5.pdf"; //open a pdf document PdfDocument doc = new PdfDocument(input); //set xmpMetadata XmpMetadata meta = doc.XmpMetaData; meta.SetAuthor("E-iceblue"); meta.SetTitle("Set XMP Metadata in PDF"); meta.SetSubject("XMP Metadata"); meta.SetProducer("E-icenlue Co,.Ltd"); meta.SetCreateDate(System.DateTime.Today); meta.SetCreator("Spire.PDF"); meta.SetKeywords("XMP"); meta.SetModifyDate(System.DateTime.Today); meta.SetCustomProperty("Field1", "NewValue"); string output = "SetXMPMetadata.pdf"; //save pdf document doc.SaveToFile(output); //Launching the Pdf file PDFDocumentViewer(output); }
public void ParseXmpMetadata_GetDocumentIDTest() { XmpMetadata target = LoadMetadata(); Guid expected = new Guid("bc07cbcd-9eb4-405f-8c8f-20666219e6ca"); Guid actual = target.DocumentID; Assert.Equal(expected, actual); }
public void ParseXmpMetadata_GetNumPagesTest() { XmpMetadata target = LoadMetadata(); int expected = 1; int actual = target.NumPages.GetValueOrDefault(); Assert.Equal(expected, actual); }
public void ParseXmpMetadata_GetOriginalDocumentIDTest() { XmpMetadata target = LoadMetadata(); Guid expected = new Guid("5d208924-93bf-db11-914a-8590d31508c8"); Guid actual = target.OriginalDocumentID; Assert.Equal(expected, actual); }
public void ParseXmpMetadata_GetMaxPageSizeTest() { XmpMetadata target1 = LoadMetadata("XmpSample1.xml"); XmpMetadata target2 = LoadMetadata("XmpSample2.xml"); var test = new Func <XmpDimensions, double, double, string, bool>((x, w, h, u) => { return(x.Width == w && x.Height == h && x.Unit == u); }); Assert.True(test(target1.MaxPageSize, 210.001556, 297.000083, "Millimeters")); Assert.True(test(target2.MaxPageSize, 210.001556, 297.000083, "Millimeters")); }
internal static void Run(string outputFilePath) { Document document = new Document(); Page page = new Page(); Label label = new Label("This PDF has a custom XMP schema.", 10, 10, 300, 20); page.Elements.Add(label); document.Pages.Add(page); XmpMetadata xmpMetadata = new XmpMetadata(); xmpMetadata.AddSchema(new CustomSchema("John", DateTime.Now)); document.XmpMetadata = xmpMetadata; document.Draw(outputFilePath); }
/// <summary> /// Get the document level metadata if present. /// The metadata is XML in the (Extensible Metadata Platform) XMP format. /// </summary> /// <remarks>This will throw a <see cref="ObjectDisposedException"/> if called on a disposed <see cref="PdfDocument"/>.</remarks> /// <param name="metadata">The metadata stream if it exists.</param> /// <returns><see langword="true"/> if the metadata is present, <see langword="false"/> otherwise.</returns> public bool TryGetXmpMetadata(out XmpMetadata metadata) { if (isDisposed) { throw new ObjectDisposedException("Cannot access the document metadata after the document is disposed."); } metadata = null; if (!Structure.Catalog.CatalogDictionary.TryGet(NameToken.Metadata, pdfScanner, out StreamToken xmpStreamToken)) { return(false); } metadata = new XmpMetadata(xmpStreamToken, filterProvider); return(true); }
/// <summary> /// Create a new <see cref="ICCBasedColorSpaceDetails"/>. /// </summary> internal ICCBasedColorSpaceDetails(int numberOfColorComponents, [CanBeNull] ColorSpaceDetails alternateColorSpaceDetails, [CanBeNull] IReadOnlyList <decimal> range, [CanBeNull] XmpMetadata metadata) : base(ColorSpace.ICCBased) { if (numberOfColorComponents != 1 && numberOfColorComponents != 3 && numberOfColorComponents != 4) { throw new ArgumentOutOfRangeException(nameof(numberOfColorComponents), "must be 1, 3 or 4"); } NumberOfColorComponents = numberOfColorComponents; AlternateColorSpaceDetails = alternateColorSpaceDetails ?? (NumberOfColorComponents == 1 ? (ColorSpaceDetails)DeviceGrayColorSpaceDetails.Instance : NumberOfColorComponents == 3 ? (ColorSpaceDetails)DeviceRgbColorSpaceDetails.Instance : (ColorSpaceDetails)DeviceCmykColorSpaceDetails.Instance); BaseType = AlternateColorSpaceDetails.BaseType; Range = range ?? Enumerable.Range(0, numberOfColorComponents).Select(x => new[] { 0.0m, 1.0m }).SelectMany(x => x).ToList(); if (Range.Count != 2 * numberOfColorComponents) { throw new ArgumentOutOfRangeException(nameof(range), range, $"Must consist of exactly {2 * numberOfColorComponents } (2 x NumberOfColorComponents), but was passed {range.Count }"); } Metadata = metadata; }
public ActionResult DocumentSettings(string InsideBrowser) { //Create a new PDF Document. The pdfDoc object represents the PDF document. //This document has one page by default and additional pages have to be added. PdfDocument pdfDoc = new PdfDocument(); PdfPage page = pdfDoc.Pages.Add(); // Get xmp object. XmpMetadata xmp = pdfDoc.DocumentInformation.XmpMetadata; // XMP Basic Schema. BasicSchema basic = xmp.BasicSchema; basic.Advisory.Add("advisory"); basic.BaseURL = new Uri("http://google.com"); basic.CreateDate = DateTime.Now; basic.CreatorTool = "creator tool"; basic.Identifier.Add("identifier"); basic.Label = "label"; basic.MetadataDate = DateTime.Now; basic.ModifyDate = DateTime.Now; basic.Nickname = "nickname"; basic.Rating.Add(-25); //Setting various Document properties. pdfDoc.DocumentInformation.Title = "Document Properties Information"; pdfDoc.DocumentInformation.Author = "Syncfusion"; pdfDoc.DocumentInformation.Keywords = "PDF"; pdfDoc.DocumentInformation.Subject = "PDF demo"; pdfDoc.DocumentInformation.Producer = "Syncfusion Software"; pdfDoc.DocumentInformation.CreationDate = DateTime.Now; PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); PdfFont boldFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); PdfBrush brush = PdfBrushes.Black; PdfGraphics g = page.Graphics; PdfStringFormat format = new PdfStringFormat(); format.LineSpacing = 10f; g.DrawString("Press Ctrl+D to see Document Properties", boldFont, brush, 10, 10); g.DrawString("Basic Schema Xml:", boldFont, brush, 10, 50); g.DrawString(basic.XmlData.OuterXml, font, brush, new RectangleF(10, 70, 500, 500), format); //Defines and set values for Custom metadata and add them to the Pdf document CustomSchema custom = new CustomSchema(xmp, "custom", "//www.syncfusion.com/"); custom["Company"] = "Syncfusion"; custom["Website"] = "//www.syncfusion.com/"; custom["Product"] = "Essential PDF"; //Stream the output to the browser. if (InsideBrowser == "Browser") { return(pdfDoc.ExportAsActionResult("sample.pdf", HttpContext.ApplicationInstance.Response, HttpReadType.Open)); } else { return(pdfDoc.ExportAsActionResult("sample.pdf", HttpContext.ApplicationInstance.Response, HttpReadType.Save)); } }
public ActionResult DocumentSettings(string InsideBrowser) { //Create a new PDF Document. The pdfDoc object represents the PDF document. //This document has one page by default and additional pages have to be added. PdfDocument pdfDoc = new PdfDocument(); PdfPage page = pdfDoc.Pages.Add(); // Get xmp object. XmpMetadata xmp = pdfDoc.DocumentInformation.XmpMetadata; // XMP Basic Schema. BasicSchema basic = xmp.BasicSchema; basic.Advisory.Add("advisory"); basic.BaseURL = new Uri("http://google.com"); basic.CreateDate = DateTime.Now; basic.CreatorTool = "creator tool"; basic.Identifier.Add("identifier"); basic.Label = "label"; basic.MetadataDate = DateTime.Now; basic.ModifyDate = DateTime.Now; basic.Nickname = "nickname"; basic.Rating.Add(-25); //Setting various Document properties. pdfDoc.DocumentInformation.Title = "Document Properties Information"; pdfDoc.DocumentInformation.Author = "Syncfusion"; pdfDoc.DocumentInformation.Keywords = "PDF"; pdfDoc.DocumentInformation.Subject = "PDF demo"; pdfDoc.DocumentInformation.Producer = "Syncfusion Software"; pdfDoc.DocumentInformation.CreationDate = DateTime.Now; PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); PdfFont boldFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); PdfBrush brush = PdfBrushes.Black; PdfGraphics g = page.Graphics; PdfStringFormat format = new PdfStringFormat(); format.LineSpacing = 10f; g.DrawString("Press Ctrl+D to see Document Properties", boldFont, brush, 10, 10); g.DrawString("Basic Schema Xml:", boldFont, brush, 10, 50); g.DrawString(basic.XmlData.ToString(), font, brush, new RectangleF(10, 70, 500, 500), format); //Defines and set values for Custom metadata and add them to the Pdf document CustomSchema custom = new CustomSchema(xmp, "custom", "http://www.syncfusion.com/"); custom["Company"] = "Syncfusion"; custom["Website"] = "http://www.syncfusion.com/"; custom["Product"] = "Essential PDF"; //Save the PDF to the MemoryStream MemoryStream ms = new MemoryStream(); pdfDoc.Save(ms); //If the position is not set to '0' then the PDF will be empty. ms.Position = 0; //Close the PDF document. pdfDoc.Close(true); //Download the PDF document in the browser. FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); fileStreamResult.FileDownloadName = "DocumentSettings.pdf"; return(fileStreamResult); }
public void UpdateXMPData() { try { //ExStart:UpdateXMP // path to the modified file string filePath = "Images/Jpeg/sample.jpg"; // get xmp wrapper XmpPacketWrapper xmpWrapper = MetadataUtility.ExtractXmpPackage(filePath); // if wrapper is null if (xmpWrapper == null) { // create it xmpWrapper = new XmpPacketWrapper(); } // create package XmpPackage addingSchema = new XmpPackage("rs", "http://www.metadataworkinggroup.com/schemas/regions/"); // set date property addingSchema.AddValue("rs:createdDate", DateTime.UtcNow); // set string property addingSchema.AddValue("rs:File", "File name"); //initialze unordered xmp array XmpArray managersArray = new XmpArray(XmpArrayType.UNORDERED); managersArray.AddItem("Joe Doe"); managersArray.AddItem("Adam White"); // set array property addingSchema.SetArray("rs:managers", managersArray); // initialize xmp language alternative LangAlt availableDays = new LangAlt(); // add first value for 'en-us' language availableDays.AddLanguage("en-us", "Tue"); // add second value for 'en-us' languge availableDays.AddLanguage("en-us", "Fri"); // set LangAlt property addingSchema.SetLangAlt("rs:days", availableDays); // update xmp wrapper with new schema xmpWrapper.AddPackage(addingSchema); // create XmpMetadata with updated wrapper XmpMetadata xmpMetadata = new XmpMetadata(); xmpMetadata.XmpPacket = xmpWrapper; // update XMP MetadataUtility.UpdateMetadata(filePath, xmpMetadata); //ExEnd:UpdateXMP } catch (Exception exp) { } }
public void ParseXmpMetadata_GetTransparencyTest() { XmpMetadata target = LoadMetadata(); Assert.True(target.HasVisibleTransparency); }
public void ParseXmpMetadata_GetOverprintTest() { XmpMetadata target = LoadMetadata(); Assert.False(target.HasVisibleOverprint); }
//ExEnd:ApplyLicense public static string CleanFile(string filePath) { try { try { //Apply license... ApplyLicense(); } catch (Exception exp) { MessageBox.Show("In Licence: " + exp.Message); } try { //Recognize format of file... FormatBase format = FormatFactory.RecognizeFormat(filePath); if (format.Type.ToString().ToLower() == "doc" || format.Type.ToString().ToLower() == "docx") { // initialize DocFormat... DocFormat docFormat = format as DocFormat; if (docFormat != null) { // get document properties... DocMetadata properties = new DocMetadata(); properties = docFormat.DocumentProperties; //Remove custom properties... foreach (KeyValuePair <string, PropertyValue> keyValuePair in properties) { if (!properties.IsBuiltIn(keyValuePair.Key)) { properties.Remove(keyValuePair.Key); } } //Reset built-in properties... properties.Author = ""; properties.Category = ""; properties.Comments = ""; properties.Company = ""; properties.ContentStatus = ""; properties.HyperlinkBase = ""; properties.Keywords = ""; properties.Manager = ""; properties.Title = ""; //Update metadata if file... MetadataUtility.UpdateMetadata(filePath, properties); } return("1"); } else if (format.Type.ToString().ToLower() == "xls" || format.Type.ToString().ToLower() == "xlsx") { //Initialize XlsFormat... XlsFormat xlsFormat = format as XlsFormat; if (xlsFormat != null) { //Get document properties... XlsMetadata properties = xlsFormat.DocumentProperties; //Remove custom properties... foreach (KeyValuePair <string, PropertyValue> keyValuePair in properties) { if (!properties.IsBuiltIn(keyValuePair.Key)) { properties.Remove(keyValuePair.Key); } } //Reset built-in properties... properties.Author = ""; properties.Category = ""; properties.Comments = ""; properties.Company = ""; properties.HyperlinkBase = ""; properties.Keywords = ""; properties.Manager = ""; properties.Title = ""; properties.Subject = ""; //Update metadata in files... MetadataUtility.UpdateMetadata(filePath, properties); } return("1"); } else if (format.Type.ToString().ToLower() == "ppt" || format.Type.ToString().ToLower() == "pptx") { //Initialize PptFormat... PptFormat pptFormat = format as PptFormat; if (pptFormat != null) { //Get document properties... PptMetadata properties = pptFormat.DocumentProperties; //Remove custom properties foreach (KeyValuePair <string, PropertyValue> keyValuePair in properties) { if (!properties.IsBuiltIn(keyValuePair.Key)) { properties.Remove(keyValuePair.Key); } } //Reset built-in properties... properties.Author = ""; properties.Category = ""; properties.Comments = ""; properties.Company = ""; properties.Keywords = ""; properties.Manager = ""; properties.Title = ""; properties.Subject = ""; //Update metadata of file... MetadataUtility.UpdateMetadata(filePath, properties); } return("1"); } else if (format.Type.ToString().ToLower() == "pdf") { // initialize PdfFormat... PdfFormat pdfFormat = format as PdfFormat; if (pdfFormat != null) { // get document properties... PdfMetadata properties = pdfFormat.DocumentProperties; // Remove custom properties... foreach (KeyValuePair <string, PropertyValue> keyValuePair in properties) { if (!properties.IsBuiltIn(keyValuePair.Key)) { properties.Remove(keyValuePair.Key); } } //Reset built-in properties... properties.Author = ""; properties.CreatedDate = DateTime.MinValue; properties.Keywords = ""; properties.ModifiedDate = DateTime.MinValue; properties.Subject = ""; properties.TrappedFlag = false; properties.Title = ""; //Update metadata of file... MetadataUtility.UpdateMetadata(filePath, properties); } return("1"); } else if (format.Type.ToString().ToLower() == "jpeg" || format.Type.ToString().ToLower() == "jpg") { //Get EXIF data if exists ExifMetadata exifMetadata = (ExifMetadata)MetadataUtility.ExtractSpecificMetadata(filePath, MetadataType.EXIF); //Get XMP data if exists XmpMetadata xmpMetadata = (XmpMetadata)MetadataUtility.ExtractSpecificMetadata(filePath, MetadataType.XMP); if (exifMetadata != null) { //Remove exif info... ExifInfo exifInfo = exifMetadata.Data; if (exifInfo.GPSData != null) { // set altitude, latitude and longitude to null values exifInfo.GPSData.Altitude = null; exifInfo.GPSData.Latitude = null; exifInfo.GPSData.LatitudeRef = null; exifInfo.GPSData.Longitude = null; exifInfo.GPSData.LongitudeRef = null; } exifInfo.BodySerialNumber = ""; exifInfo.CameraOwnerName = ""; exifInfo.CFAPattern = new byte[] { 0 }; } else { exifMetadata = new ExifMetadata(); } try { //Remove XMP data... XmpPacketWrapper xmpPacket = xmpMetadata.XmpPacket; if (xmpPacket != null) { if (xmpPacket.ContainsPackage(Namespaces.DublinCore)) { // if not - add DublinCore schema xmpPacket.AddPackage(new DublinCorePackage()); DublinCorePackage dublinCorePackage = (DublinCorePackage)xmpPacket.GetPackage(Namespaces.DublinCore); dublinCorePackage.Clear(); xmpMetadata.XmpPacket = xmpPacket; } } } catch { } //Update Exif info... try { MetadataUtility.UpdateMetadata(filePath, exifMetadata); } catch { } //Update XMP data... try { MetadataUtility.UpdateMetadata(filePath, xmpMetadata); } catch { } //Remove custom metadata if any... MetadataUtility.CleanMetadata(filePath); return("1"); } else if (format.Type.ToString().ToLower() == "png") { //Get XMP data... XmpMetadata xmpMetadata = (XmpMetadata)MetadataUtility.ExtractSpecificMetadata(filePath, MetadataType.XMP); try { //Remove XMP metadata... XmpPacketWrapper xmpPacket = xmpMetadata.XmpPacket; if (xmpPacket != null) { if (xmpPacket.ContainsPackage(Namespaces.DublinCore)) { // if not - add DublinCore schema xmpPacket.AddPackage(new DublinCorePackage()); DublinCorePackage dublinCorePackage = (DublinCorePackage)xmpPacket.GetPackage(Namespaces.DublinCore); dublinCorePackage.Clear(); xmpMetadata.XmpPacket = xmpPacket; //Update XMP metadata in file... MetadataUtility.UpdateMetadata(filePath, xmpMetadata); //Clean custom metadata if any... MetadataUtility.CleanMetadata(filePath); } } } catch { } return("1"); } else if (format.Type.ToString().ToLower() == "gif") { //Initialie GifFormat... GifFormat gifFormat = new GifFormat(filePath); //Check if Xmp supported... if (gifFormat.IsSupportedXmp) { //Get XMP data... XmpMetadata xmpMetadata = (XmpMetadata)MetadataUtility.ExtractSpecificMetadata(filePath, MetadataType.XMP); try { XmpPacketWrapper xmpPacket = xmpMetadata.XmpPacket; if (xmpPacket != null) { if (xmpPacket.ContainsPackage(Namespaces.DublinCore)) { // if not - add DublinCore schema xmpPacket.AddPackage(new DublinCorePackage()); DublinCorePackage dublinCorePackage = (DublinCorePackage)xmpPacket.GetPackage(Namespaces.DublinCore); dublinCorePackage.Clear(); xmpMetadata.XmpPacket = xmpPacket; //Update Xmp data in file... MetadataUtility.UpdateMetadata(filePath, xmpMetadata); //Clean custom metadata if any... MetadataUtility.CleanMetadata(filePath); } } } catch { } } return("1"); } else { return("Format not supported."); } } catch (Exception exp) { MessageBox.Show("Exception: " + exp.Message); return(exp.Message); } } catch (Exception exp) { return(exp.Message); } }
private void button1_Click(object sender, System.EventArgs e) { //Create a new PDF Document. The pdfDoc object represents the PDF document. //This document has one page by default and additional pages have to be added. PdfDocument pdfDoc = new PdfDocument(); PdfPage page = pdfDoc.Pages.Add(); // Get xmp object. XmpMetadata xmp = pdfDoc.DocumentInformation.XmpMetadata; // XMP Basic Schema. BasicSchema basic = xmp.BasicSchema; basic.Advisory.Add("advisory"); basic.BaseURL = new Uri("http://google.com"); basic.CreateDate = DateTime.Now; basic.CreatorTool = "creator tool"; basic.Identifier.Add("identifier"); basic.Label = "label"; basic.MetadataDate = DateTime.Now; basic.ModifyDate = DateTime.Now; basic.Nickname = "nickname"; basic.Rating.Add(-25); //Setting various Document properties. pdfDoc.DocumentInformation.Title = "Document Properties Information"; pdfDoc.DocumentInformation.Author = "Syncfusion"; pdfDoc.DocumentInformation.Keywords = "PDF"; pdfDoc.DocumentInformation.Subject = "PDF demo"; pdfDoc.DocumentInformation.Producer = "Syncfusion Software"; pdfDoc.DocumentInformation.CreationDate = DateTime.Now; PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); PdfFont boldFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); PdfBrush brush = PdfBrushes.Black; PdfGraphics g = page.Graphics; PdfStringFormat format = new PdfStringFormat(); format.LineSpacing = 10f; g.DrawString("Press Ctrl+D to see Document Properties", boldFont, brush, 10, 10); g.DrawString("Basic Schema Xml:", boldFont, brush, 10, 50); g.DrawString(basic.XmlData.OuterXml, font, brush, new RectangleF(10, 70, 500, 500), format); //Defines and set values for Custom metadata and add them to the Pdf document CustomSchema custom = new CustomSchema(xmp, "custom", "http://www.syncfusion.com/"); custom["Company"] = "Syncfusion"; custom["Website"] = "http://www.syncfusion.com/"; custom["Product"] = "Essential PDF"; //Save the PDF Document to disk. pdfDoc.Save("Sample.pdf"); //Message box confirmation to view the created PDF document. if (MessageBox.Show("Do you want to view the PDF file?", "PDF File Created", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { //Launching the PDF file using the default Application.[Acrobat Reader] #if NETCORE System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo = new System.Diagnostics.ProcessStartInfo("Sample.pdf") { UseShellExecute = true }; process.Start(); #else System.Diagnostics.Process.Start("Sample.pdf"); #endif this.Close(); } else { // Exit this.Close(); } }
public static ColorSpaceDetails GetColorSpaceDetails(ColorSpace?colorSpace, DictionaryToken imageDictionary, IPdfTokenScanner scanner, IResourceStore resourceStore, ILookupFilterProvider filterProvider, bool cannotRecurse = false) { if (imageDictionary.GetObjectOrDefault(NameToken.ImageMask, NameToken.Im) != null || filterProvider.GetFilters(imageDictionary, scanner).OfType <CcittFaxDecodeFilter>().Any()) { if (cannotRecurse) { return(UnsupportedColorSpaceDetails.Instance); } var colorSpaceDetails = GetColorSpaceDetails(colorSpace, imageDictionary.Without(NameToken.Filter).Without(NameToken.F), scanner, resourceStore, filterProvider, true); var decodeRaw = imageDictionary.GetObjectOrDefault(NameToken.Decode, NameToken.D) as ArrayToken ?? new ArrayToken(EmptyArray <IToken> .Instance); var decode = decodeRaw.Data.OfType <NumericToken>().Select(x => x.Data).ToArray(); return(IndexedColorSpaceDetails.Stencil(colorSpaceDetails, decode)); } if (!colorSpace.HasValue) { return(UnsupportedColorSpaceDetails.Instance); } switch (colorSpace.Value) { case ColorSpace.DeviceGray: return(DeviceGrayColorSpaceDetails.Instance); case ColorSpace.DeviceRGB: return(DeviceRgbColorSpaceDetails.Instance); case ColorSpace.DeviceCMYK: return(DeviceCmykColorSpaceDetails.Instance); case ColorSpace.CalGray: { if (!TryGetColorSpaceArray(imageDictionary, resourceStore, scanner, out var colorSpaceArray) || colorSpaceArray.Length != 2) { return(UnsupportedColorSpaceDetails.Instance); } var first = colorSpaceArray[0] as NameToken; if (first == null || !ColorSpaceMapper.TryMap(first, resourceStore, out var innerColorSpace) || innerColorSpace != ColorSpace.CalGray) { return(UnsupportedColorSpaceDetails.Instance); } var second = colorSpaceArray[1]; // WhitePoint is required if (!DirectObjectFinder.TryGet(second, scanner, out DictionaryToken dictionaryToken) || !dictionaryToken.TryGet(NameToken.WhitePoint, scanner, out ArrayToken whitePointToken)) { return(UnsupportedColorSpaceDetails.Instance); } var whitePoint = whitePointToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); // BlackPoint is optional IReadOnlyList <decimal> blackPoint = null; if (dictionaryToken.TryGet(NameToken.BlackPoint, scanner, out ArrayToken blackPointToken)) { blackPoint = blackPointToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); } // Gamma is optional decimal?gamma = null; if (dictionaryToken.TryGet(NameToken.Gamma, scanner, out NumericToken gammaToken)) { gamma = gammaToken.Data; } return(new CalGrayColorSpaceDetails(whitePoint, blackPoint, gamma)); } case ColorSpace.CalRGB: { if (!TryGetColorSpaceArray(imageDictionary, resourceStore, scanner, out var colorSpaceArray) || colorSpaceArray.Length != 2) { return(UnsupportedColorSpaceDetails.Instance); } var first = colorSpaceArray[0] as NameToken; if (first == null || !ColorSpaceMapper.TryMap(first, resourceStore, out var innerColorSpace) || innerColorSpace != ColorSpace.CalRGB) { return(UnsupportedColorSpaceDetails.Instance); } var second = colorSpaceArray[1]; // WhitePoint is required if (!DirectObjectFinder.TryGet(second, scanner, out DictionaryToken dictionaryToken) || !dictionaryToken.TryGet(NameToken.WhitePoint, scanner, out ArrayToken whitePointToken)) { return(UnsupportedColorSpaceDetails.Instance); } var whitePoint = whitePointToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); // BlackPoint is optional IReadOnlyList <decimal> blackPoint = null; if (dictionaryToken.TryGet(NameToken.BlackPoint, scanner, out ArrayToken blackPointToken)) { blackPoint = blackPointToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); } // Gamma is optional IReadOnlyList <decimal> gamma = null; if (dictionaryToken.TryGet(NameToken.Gamma, scanner, out ArrayToken gammaToken)) { gamma = gammaToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); } // Matrix is optional IReadOnlyList <decimal> matrix = null; if (dictionaryToken.TryGet(NameToken.Matrix, scanner, out ArrayToken matrixToken)) { matrix = matrixToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); } return(new CalRGBColorSpaceDetails(whitePoint, blackPoint, gamma, matrix)); } case ColorSpace.Lab: return(UnsupportedColorSpaceDetails.Instance); case ColorSpace.ICCBased: { if (!TryGetColorSpaceArray(imageDictionary, resourceStore, scanner, out var colorSpaceArray) || colorSpaceArray.Length != 2) { return(UnsupportedColorSpaceDetails.Instance); } var first = colorSpaceArray[0] as NameToken; if (first == null || !ColorSpaceMapper.TryMap(first, resourceStore, out var innerColorSpace) || innerColorSpace != ColorSpace.ICCBased) { return(UnsupportedColorSpaceDetails.Instance); } var second = colorSpaceArray[1]; // N is required if (!DirectObjectFinder.TryGet(second, scanner, out StreamToken streamToken) || !streamToken.StreamDictionary.TryGet(NameToken.N, scanner, out NumericToken numeric)) { return(UnsupportedColorSpaceDetails.Instance); } // Alternate is optional ColorSpaceDetails alternateColorSpaceDetails = null; if (streamToken.StreamDictionary.TryGet(NameToken.Alternate, out NameToken alternateColorSpaceNameToken) && ColorSpaceMapper.TryMap(alternateColorSpaceNameToken, resourceStore, out var alternateColorSpace)) { alternateColorSpaceDetails = GetColorSpaceDetails(alternateColorSpace, imageDictionary, scanner, resourceStore, filterProvider, true); } // Range is optional IReadOnlyList <decimal> range = null; if (streamToken.StreamDictionary.TryGet(NameToken.Range, scanner, out ArrayToken arrayToken)) { range = arrayToken.Data.OfType <NumericToken>().Select(x => x.Data).ToList(); } // Metadata is optional XmpMetadata metadata = null; if (streamToken.StreamDictionary.TryGet(NameToken.Metadata, scanner, out StreamToken metadataStream)) { metadata = new XmpMetadata(metadataStream, filterProvider, scanner); } return(new ICCBasedColorSpaceDetails(numeric.Int, alternateColorSpaceDetails, range, metadata)); } case ColorSpace.Indexed: { if (cannotRecurse) { return(UnsupportedColorSpaceDetails.Instance); } if (!TryGetColorSpaceArray(imageDictionary, resourceStore, scanner, out var colorSpaceArray) || colorSpaceArray.Length != 4) { // Error instead? return(UnsupportedColorSpaceDetails.Instance); } var first = colorSpaceArray[0] as NameToken; if (first == null || !ColorSpaceMapper.TryMap(first, resourceStore, out var innerColorSpace) || innerColorSpace != ColorSpace.Indexed) { return(UnsupportedColorSpaceDetails.Instance); } var second = colorSpaceArray[1]; ColorSpaceDetails baseDetails; if (DirectObjectFinder.TryGet(second, scanner, out NameToken baseColorSpaceNameToken) && ColorSpaceMapper.TryMap(baseColorSpaceNameToken, resourceStore, out var baseColorSpaceName)) { baseDetails = GetColorSpaceDetails( baseColorSpaceName, imageDictionary, scanner, resourceStore, filterProvider, true); } else if (DirectObjectFinder.TryGet(second, scanner, out ArrayToken baseColorSpaceArrayToken) && baseColorSpaceArrayToken.Length > 0 && baseColorSpaceArrayToken[0] is NameToken baseColorSpaceArrayNameToken && ColorSpaceMapper.TryMap(baseColorSpaceArrayNameToken, resourceStore, out var baseColorSpaceArrayColorSpace)) { var pseudoImageDictionary = new DictionaryToken( new Dictionary <NameToken, IToken> { { NameToken.ColorSpace, baseColorSpaceArrayToken } }); baseDetails = GetColorSpaceDetails( baseColorSpaceArrayColorSpace, pseudoImageDictionary, scanner, resourceStore, filterProvider, true); }