iTextSharp Как добавить пользовательские свойства в PDF-A? - PullRequest
0 голосов
/ 29 января 2019

По сути, у меня есть оригинальный XFA-файл со многими Custom > Properties, и я могу преобразовать его в PDF-A, но все свойства потеряли после преобразования.

Вот мой код ConvertToPDFa:

 public byte[] ConvertToPDFa3(byte[] OriginPDF,byte[] FileStore,string XML)
    {
        //***************************************
        // Convert PDF to PDFa3 and Attach XML .
        //***************************************
        //Create Reader for Reading PDF in  byte[]

        using (var reader = new PdfReader(OriginPDF))
        {
            // Open Stream for Converting
            using (var Convertstream = new MemoryStream())
            {
                // New Doc for PDF/A-3
                Document pdfAdocument = new Document();

                //Init instance for pdfAdocument
                PdfAWriter writer = PdfAWriter.GetInstance(pdfAdocument, Convertstream, PdfAConformanceLevel.PDF_A_3U);
                writer.CreateXmpMetadata();

                if (!pdfAdocument.IsOpen())
                    pdfAdocument.Open();

                PdfContentByte cb = writer.DirectContent; // Holds the PDF data 
                //Count original PDF pages and uses for pdfa-3
                PdfImportedPage page;
                int pageCount = reader.NumberOfPages;
                for (int i = 0; i < pageCount; i++)
                {
                    pdfAdocument.NewPage();
                    page = writer.GetImportedPage(reader, i + 1);
                    cb.AddTemplate(page, 0, 0);
                }
                //Create Output Intents 
                ICC_Profile icc = ICC_Profile.GetInstance(AppDomain.CurrentDomain.BaseDirectory + "res\\sRGB Color Space Profile.icm");
                writer.SetOutputIntents("sRGB IEC61966-2.1", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);

                //Embedded File to PDFa3 
                writer.AddFileAttachment("XML for : " + certRefNumber, FileStore, XML, lblRefNo.Text + ".xml");
                //Close all file to finish 
                pdfAdocument.Close();
                reader.Close();

                //Test writes output in Phys path
                //File.WriteAllBytes(@"OutPDFa.pdf", Convertstream.ToArray());
                byte[] filledPDfa = Convertstream.ToArray();
                return filledPDfa;
            }     
        }
        // End Convert and Attached
    }

Я попытался получить свойства источника с помощью этого кода:

static Dictionary<string, string> GetPdfProperties(byte[] originfile)
    {
        Dictionary<string, string> propertyInfo = null;

        using (PdfReader reader = new PdfReader(originfile))
        {
            propertyInfo = reader.Info;
            reader.Close();
        }

        return propertyInfo;
    }

И скопировать свойства источника в PDF-A следующим образом:

static byte[] CopyProps(byte[] fileinput,byte[] fileOrigin,PdfAWriter wr)
    {
            using (var rd = new PdfReader(fileinput))
            {
                using (var outp = new MemoryStream())
                {
                    using (var stamper = new PdfAStamper(rd, outp,PdfAConformanceLevel.PDF_A_3U))
                    {
                        var info = rd.Info;
                        Dictionary<string, string> propertyInfo = GetPdfProperties(fileOrigin);
                    foreach (KeyValuePair<string, string> property in propertyInfo)
                    {
                        info[property.Key] = property.Value;
                    }
                    stamper.MoreInfo = info;

                    using (var ms = new MemoryStream())
                        {
                            wr.CreateXmpWriter(ms,info); //****error was here
                            stamper.XmpMetadata = ms.ToArray();
                        }
                    }
                return outp.ToArray();
                } 
            }  
    }

, но обнаружил, что ошибка была недоступна из-заего уровень защиты Должен ли я поместить строку ошибки в другой?

Или

Есть другое решение для этой проблемы?Пожалуйста, помогите: (

я использую iTextSharp 5.5.13

...