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-файла, который позволяет нам повторить проблему.