如何使用Itext在已部署的网站上存储Generated pdf

时间:2018-03-13 21:09:20

标签: c# asp.net-mvc azure itext

我正在尝试写一个pdf并通过电子邮件发送它。我可以在我的本地机器上实现它。问题是当我部署到azure时,我不确定在哪里存储pdf。我已经看到一个有关此问题的问题  并尝试从stackoverflow解决这个问题 - Does iText (any version) work on Windows Azure websites?

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:\家\站点\ wwwroot的\电子邮件\检验.pdf'

2 个答案:

答案 0 :(得分:1)

尝试在内存中创建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 :(得分:1)

我认为您的问题与文件路径有关。 如果我使用像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();
    
  3. 最后,您可以看到pdf文件已存储在根项目目录中。

    enter image description here