【发布时间】:2016-06-20 10:36:09
【问题描述】:
我创建了一种从表单生成 pdf 文件的方法,它使用 itexsharp 保存到正确的路径,但问题是我无法下载它。
这是我的代码:
private void FillForm(Dictionary<string, string> dic)
{
var pdfTemplate = HttpContext.Current.Server.MapPath("~/ress/GENE_15_04_2014.pdf"); //_pdfTemplet;
var newFile = _newFileName + "_" + Guid.NewGuid() + ".pdf";
_gNewFile = newFile.ToString();
var pdfReader = new PdfReader(System.IO.File.ReadAllBytes(pdfTemplate));
var pfileStream = new FileStream(string.Format(HttpContext.Current.Server.MapPath("~/ress/") + "{0}", newFile), FileMode.Create);
var pdfStamper = new PdfStamper(pdfReader, pfileStream);
var pdfFormFields = pdfStamper.AcroFields;
foreach (var entry in dic)
{
pdfFormFields.SetField(entry.Key, entry.Value);
}
pdfStamper.FormFlattening = true;
pdfStamper.JavaScript = "this.print(true);\r";
pdfStamper.Writer.CloseStream = false;
pdfReader.Close();
pdfStamper.Close();
UPContract.Update();
pfileStream.Close();
pdf.FilePath = string.Format("../Ress/{0}", Path.GetFileName(_gNewFile));
Response.Clear();
byte[] bytes = System.IO.File.ReadAllBytes(string.Format(HttpContext.Current.Server.MapPath("~/ress/") + "{0}", _gNewFile));
Response.ContentType = "application/pdf";
MemoryStream ms = new MemoryStream(bytes);
Response.AddHeader("content-disposition", "attachment;filename=" + "fiche abonnement_" + _gNewFile + ".pdf");
Response.Buffer = true;
ms.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
【问题讨论】:
-
除非您需要存档该文件,否则将 PDF 创建为服务器上的文件是个坏主意。您需要存档该文件吗?
-
当然有特殊需要
-
你还在@BrunoLowagie !
-
是的,但这不是 iText 或 iTextSharp 问题,这是一个 C# 问题:如何读取文件的字节并将它们发送到
Response?我是 Java 开发人员,而不是 C# 开发人员,所以您必须询问其他人。另外:这个问题已经在 StackOverflow 上回答过很多次了,所以如果你想知道答案,你可能想搜索一些更老的问题。 -
我无法下载。 - 你到底是什么意思?有错误信息吗?还是只有一个空白页?还是客户端电脑爆炸了?
标签: c# pdf pdf-generation itext