我正在尝试写一个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'
。
答案 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")
这样的路径,我也会得到与你相同的错误。
我建议您尝试使用Server.MapPath("~/Azure_Example1.pdf")
之类的相对路径。 ' ~/
'指向项目根目录。
您还可以设置断点以使用远程调试来检查路径的值。
我创建了一个简单的演示,它在我身边很好用。你可以参考。
在管理Nuget包中安装 iTextSharp 5.5.13 nuget包。
使用以下代码:
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文件已存储在根项目目录中。