2016-12-09 2 views
1

Это работает в приложении ASP.NET MVC, когда локально, но не при развертывании на Azure:PDFsharp генерирует пустую страницу в Azure, но работает локально

Document doc = new Document(); 
Section section = doc.AddSection(); 
section.AddParagraph("Some text to go into a PDF");   
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(false, PdfFontEmbedding.Always); 
pdfRenderer.Document = doc; 
pdfRenderer.RenderDocument(); 
System.IO.MemoryStream stream = new System.IO.MemoryStream(); 
pdfRenderer.PdfDocument.Save(stream, false); 
Byte[] documentBytes = stream.ToArray(); 

return File(documentBytes, "application/pdf"); 

Локально, я получаю хороший PDF. На Azure я получаю пустой PDF. Я не вижу никаких исключений или других сообщений об ошибках. Я нашел несколько ответов SO, в которых указано, что версия PDF-файла GDI не работает на Azure, поэтому вместо этого я использую версию WPF - тот же результат.

Я нашел это так вопрос, но я не ясно, как применить его к приложению MVC: Why is MigraDoc generating a blank pdf in my asp.net application?

Извините, если это очевидный вопрос, я просто застрял!

+1

Когда вы говорите, это будет развернут на Azure, Я предполагаю, что Azure App Service (Web Apps), если да, на каком уровне вы работаете? Возможно, вам нужно быть на Basic или выше, чтобы заставить это работать –

+0

Является ли уровень связанным с подпиской? Прямо сейчас я использую бесплатную пробную подписку ... это моя проблема? –

+1

Не связано с подпиской. Вы можете проверить свой уровень в своем плане веб-приложений. Из-за ограничений на песочницу это может работать только на Basic и выше, то есть **, если оно работает **, поскольку использование GDI ограничено, и только несколько библиотек работают с этими ограничениями. –

ответ

1

Вероятно, проблема с шрифтом, если к клиенту приходит полный PDF-файл (я просил конформацию в комментарии, но еще не получил ответа).

PDFsharp должен иметь доступ к файлам TTF для извлечения информации. Используются ли шрифты, которые вы используете в папке% windir% \ fonts, и имеет ли ваш процесс права на их чтение?

Azure является кандидатом на IFontResolver, потому что многие шрифты отсутствуют, и привилегии обычно не предоставляются.

С IFontResolver вы предоставляете PDFsharp прямой доступ к файлам TTF (в виде байта []).

Вы можете использовать мой класс EZFontResolver для этой цели:
http://developer.th-soft.com/developer/2015/12/11/ezfontresolver-a-generic-font-resolver-for-pdfsharp-and-migradoc/

У меня также есть образец, который показывает, как реализовать свой собственный IFontResolver:
http://developer.th-soft.com/developer/2015/09/21/using-private-fonts-with-pdfsharp-1-50-beta-2-or-migradoc/

+0

Я заявил * в вопросе *, что получаю полный, но пустой PDF. Спасибо за эту информацию, я попробую. –

+1

@RobertM. Вы писали _blank PDF_ в вопросе. Поскольку вы связались с другим вопросом, в котором проблема, очевидно, была связана с использованием _Flush_ или _Seek_, я хотел убедиться, что проблема не связана с неполной передачей созданного файла PDF. –

+0

При использовании вашего класса EZFontResolver, куда вы помещаете файл шрифта? Если он помещается в папку в решении VS, он будет добавлен в путь при публикации? Кроме того, я не получаю какое-либо сообщение об ошибке или исключение прямо сейчас, и есть шрифты в папке шрифтов ... –

-2

Скорее всего, из-за различий в способе, которым Azure обрабатывает потоки памяти. Я предлагаю начать к началу потока, прежде чем писать ему (stream.Seek(0, SeekOrigin.Begin)), и используя перегруз File(Stream, string) (MemoryStream наследует Stream, поэтому вы можете просто передать его напрямую).

Дайте мне знать, если это поможет.

+0

А, я вижу. Может быть, мне стоит выяснить, как сохранить PDF-файл в базе данных и использовать его в качестве файла ... но я попробую, что вы предложили в первую очередь. –

+0

Я попробовал то, что вы предложили. Он по-прежнему возвращается с пустым PDF. –

+0

Сначала попробуйте сохранить PDF. Очевидно, это не решение идеи, но оно должно помочь вам изолировать место возникновения проблемы. Возможно, на вашем сервере установлена ​​другая версия библиотеки (PDFSharp). – Extragorey

Смежные вопросы