PdfSharp: встраивание шрифтов в существующие PDF

У нас есть приложение, в котором в определенные моменты отчет составляется в формате PDF. Несмотря на то, что в начале все работало идеально, позже мы обнаружили, что используемые нами шрифты не были встроены в созданные нами PDF-файлы. Таким образом, мы могли просматривать PDF-файлы сами, но когда кто-то еще использовал наше приложение, они получили чистый документ.

Мы попытались использовать PdfSharp для встраивания шрифтов, используя следующий код:

        public byte[] EmbedPdf (byte[] originalPdf)
        {
            //open existing pdf through stream
            MemoryStream preStream = new MemoryStream();
            preStream.Write(originalPdf, 0, originalPdf.Length);
            PdfDocument pdf = PdfReader.Open(preStream, PdfDocumentOpenMode.Import);
            preStream.Close();

            //open second document to paste the original data into which should be including embedding
            PdfDocument nieuwePdf = new PdfDocument();
            var options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);

            //loop through pages to insert them
            for (int page = 0; page < pdf.Pages.Count; page++)
            {
                PdfPage pdfPage = nieuwePdf.AddPage(pdf.Pages[page]);

                //the following line is the point where the application throws the error
                XGraphics xgr = XGraphics.FromPdfPage(pdfPage);
                XFont font = new XFont("Times New Roman", 12, XFontStyle.Regular, options);
            }

            //put new pdf back to the stream so it can be returned in the same format the original came in
            MemoryStream postStream = new MemoryStream();
            nieuwePdf.Save(postStream);
            originalPdf = postStream.ToArray();

            //end the stream
            postStream.Close();

            return originalPdf;
        }

Мы получаем ошибку: "Дефлированный поток заканчивается рано" в строке, где новый pdf должен получать страницы из оригинала. Мы думали, что ошибка означала, что что-то в потоке пошло не так при чтении, но мы не смогли обнаружить, как устранить ошибку. Можете ли вы помочь нам решить эту проблему?

В качестве ссылки, следующая ссылка показывает другого, у которого была похожая проблема, и который работал как пример для кода выше: PDFsharp edit pdf file



РЕДАКТИРОВАТЬ: Вот тестовый PDF я сделал с помощью приложения. Поскольку для этого я поместил в шаблон несколько шрифтов, я заметил, что он превращает все шрифты в Calibri на окнах (заголовок был Arial Black, нижний колонтитул был Verdana, а основной текст - Times New Roman)

Загрузите отсюда: http://www.wikiupload.com/L5GMAN88J9JXAYR

Также спасибо за ваши предложения, я попробовал оба, но ни один из них не помог. Для закрытия потока я мог бы даже закомментировать его и получить ту же ошибку.

1 ответ

Похоже, что есть проблема с файлом PDF, который вы пытаетесь изменить.

Итак, ответ на ваш вопрос "Можете ли вы помочь нам решить эту проблему?" Это: не без PDF-файла, который позволяет нам повторить проблему.

Другие вопросы по тегам