Я пытаюсь записать в PDF-файл и отправить его по электронной почте. Я могу реализовать это на своем локальном компьютере. Проблема в том, что при развертывании в лазурном режиме я не уверен, где хранить PDF-файл. Я видел один вопрос по этому поводу и попробовал это решение из stackoverflow - Работает ли iText (любая версия) на веб-сайтах Windows Azure? .

var path = Server.MapPath("test.pdf");

FileInfo dest = new FileInfo(path);

var writer = new PdfWriter(dest);
var pdf = new PdfDocument(writer);
var document = new Document(pdf);
document.Add(new Paragraph("hello world"));
document.Close();

Я получаю ошибку

Не удалось найти часть пути "D: \ home \ site \ wwwroot \ Email \ test.pdf".

1
Curious-programmer 14 Мар 2018 в 00:09

2 ответа

Лучший ответ

Попробуйте создать PDF-файл в памяти и передать содержимое в выходной поток asp.net.

Document document = new Document(PageSize.A4);
MemoryStream ms = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, ms);
document.Open();
document.NewPage();
...
...
document.Close();

Response.Clear();
Response.ContentType = "application/pdf";
byte[] pdfBytes = ms.ToArray();
Response.AppendHeader("Content-Length", pdfBytes.Length.ToString());
Response.OutputStream.Write(pdfBytes, 0, (int)pdfBytes.Length);
1
Fabrizio Accatino 14 Мар 2018 в 07:42

Я полагаю, ваша проблема связана с путем к файлу. Если я использую такой путь, как Server.MapPath("Azure_Example1.pdf"), я также получаю ту же ошибку, что и вы.

enter image description here

Я предлагаю вам попробовать использовать относительный путь, например Server.MapPath("~/Azure_Example1.pdf"). '~/' указывает на корневой каталог проекта.

Вы также можете установить точку останова для проверки значения пути с помощью удаленной отладки.

enter image description here

Я создал простую демонстрацию, она отлично работает на моей стороне. Вы можете сослаться на.

  1. Установите пакет nuget iTextSharp 5.5.13 в разделе Управление пакетами Nuget .

  2. Используйте следующий код:

        var path = Server.MapPath("~/Azure_Example1.pdf");
        FileInfo dest = new FileInfo(path);
        FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);
        Document doc = new Document();
        PdfWriter writer = PdfWriter.GetInstance(doc, fs);
        doc.Open();
        doc.Add(new Paragraph("Hello World")); //change content in pdf
        doc.Close();
    

Наконец, вы могли видеть, что файл pdf хранится в корневом каталоге проекта.

enter image description here

1
Janley Zhang 14 Мар 2018 в 08:10