Объединить несколько PDF / A с различными уровнями соответствия - PullRequest
0 голосов
/ 26 сентября 2019

Можно ли объединить несколько файлов pdf / a (возможно, с разными уровнями соответствия: некоторые pdf / a-1b, некоторые pdf / a-3b ecc) в одну pdfa?

Я думалчто использование последнего уровня (3-a или 3b) будет в порядке, но я получаю ошибки при проверке с VeraPDF: enter image description here

Вот мой код (где:

public static byte[] CreateConformantCopy(List<byte[]> sourcePdfs)
    {
        var version = PdfVersion.PDF_1_7;
        var type = PdfAType.PDF_A_3B;

        WriterProperties wp = new WriterProperties();
        wp.UseSmartMode();
        wp.SetPdfVersion(version.ToPdfVersion());

        PdfOutputIntent oi = new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", Assembly.GetExecutingAssembly().GetManifestResourceStream("xxx.Resources.sRGB_CS_profile.icm"));

        using (var mergedPdf = new MemoryStream())
        {
            var writer = new PdfWriter(mergedPdf, wp);

            using (PdfADocument newDoc = new PdfADocument(writer, type.ToPdfAConformanceLevel(), oi, new DocumentProperties() { }))
            {
                Document document = new Document(newDoc, PageSize.A4.Rotate());

                newDoc.SetTagged();

                newDoc.GetCatalog().SetLang(new PdfString(Thread.CurrentThread.CurrentUICulture.Name));

                newDoc.GetCatalog().SetViewerPreferences(
                        new PdfViewerPreferences()
                            .SetDisplayDocTitle(true)
                            .SetCenterWindow(true)
                );

                PdfMerger merger = new PdfMerger(newDoc);

                for (int k = 0; k < sourcePdfs.Count; k++)
                {
                    using (var inDoc = PdfHelper.GetDocument(sourcePdfs[k]))
                    {
                        var numberOfPages = inDoc.GetNumberOfPages();

                        merger.Merge(inDoc, 1, numberOfPages);
                    }
                }

                newDoc.Close();
            }

            return mergedPdf.ToArray();
        }
    }
...