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)
            {
            }
        }
Exemple #2
0
        /// <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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        public void ParseXmpMetadata_GetDocumentIDTest()
        {
            XmpMetadata target = LoadMetadata();

            Guid expected = new Guid("bc07cbcd-9eb4-405f-8c8f-20666219e6ca");
            Guid actual   = target.DocumentID;

            Assert.Equal(expected, actual);
        }
Exemple #6
0
        public void ParseXmpMetadata_GetNumPagesTest()
        {
            XmpMetadata target = LoadMetadata();

            int expected = 1;
            int actual   = target.NumPages.GetValueOrDefault();

            Assert.Equal(expected, actual);
        }
Exemple #7
0
        public void ParseXmpMetadata_GetOriginalDocumentIDTest()
        {
            XmpMetadata target = LoadMetadata();

            Guid expected = new Guid("5d208924-93bf-db11-914a-8590d31508c8");
            Guid actual   = target.OriginalDocumentID;

            Assert.Equal(expected, actual);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        /// <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);
        }
Exemple #11
0
        /// <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));
            }
        }
Exemple #13
0
        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)
            {

            }
        }
Exemple #15
0
        public void ParseXmpMetadata_GetTransparencyTest()
        {
            XmpMetadata target = LoadMetadata();

            Assert.True(target.HasVisibleTransparency);
        }
Exemple #16
0
        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);
            }
        }
Exemple #18
0
        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);
                }