IPechkin: создание HTML нескольких объектов с помощью HtmlToPdfDocument - PullRequest
0 голосов
/ 25 октября 2018

У меня есть 2 строки HTML, которые должны быть напечатаны вместе в одном файле PDF.Я попытался добавить новый ObjectSettings в свойстве Objects документа HtmlToPdfDocument, но по какой-то причине я не могу заставить его работать.

В этом собственном примере отображается только второй объект, и он создает 2 страницы с первой пустой страницей (я предполагаю, что это должен быть первый объект, который не отображается).

У кого-нибудь есть идеи или решения для этого случая?

var document = new HtmlToPdfDocument
            {
                GlobalSettings =
                {
                    ProduceOutline = true,
                    DocumentTitle = "Report",
                    PaperSize = PaperKind.A4,
                    Orientation = TuesPechkin.GlobalSettings.PaperOrientation.Portrait,
                    Margins =
                    {
                        // All = 1.375,
                        Top = 1.375,
                        Right = 1.375,
                        Bottom = 1.6,
                        Left = 1.375,
                        Unit = Unit.Centimeters,
                    }
                },
                Objects = 
                {
                    new ObjectSettings 
                    { 
                        HtmlText = printHtmlContent, 
                        FooterSettings = 
                            new FooterSettings 
                            { 
                                HtmlUrl = footerUrl, 
                            },                          
                    },
                    new ObjectSettings 
                    {
                        HtmlText = "<h1>Pretty Websites</h1>", 
                        FooterSettings = 
                            new FooterSettings 
                            { 
                                HtmlUrl = footerUrl, 
                            },
                        CountPages = false
                    }
                }
            };

            var converter = Factory.Create();

            var result = converter.Convert(document);

Решено!

Похоже, что если вы добавите больше ObjectSettings,рендер будет только последний.В качестве решения для этого случая я использовал функцию, которую я также нашел в стеке, которая объединяет 2 PDF-файла, как брелок.

public static byte[] MergePdf(List<byte[]> pdfs)
    {
        List<PdfSharp.Pdf.PdfDocument> lstDocuments = new List<PdfSharp.Pdf.PdfDocument>();
        foreach (var pdf in pdfs)
        {
            lstDocuments.Add(PdfSharp.Pdf.IO.PdfReader.Open(new MemoryStream(pdf), PdfDocumentOpenMode.Import));
        }

        using (PdfSharp.Pdf.PdfDocument outPdf = new PdfSharp.Pdf.PdfDocument())
        {
            for (int i = 1; i <= lstDocuments.Count; i++)
            {
                foreach (PdfSharp.Pdf.PdfPage page in lstDocuments[i - 1].Pages)
                {
                    outPdf.AddPage(page);
                }
            }

            MemoryStream stream = new MemoryStream();
            outPdf.Save(stream, false);
            byte[] bytes = stream.ToArray();

            return bytes;
        }
    }
...