1
我已經成功實現了iTextSharp.text.pdf來填充我們設置的PDF模板文件。目前,該文件正在自動保存到本地計算機上的特定文件夾中......但我們不希望這樣,我們希望將填充的PDF文件保存到用戶選擇的文件夾中。我們不希望這些應用程序發佈後將這些文件保留在服務器上。保存PDF格式的對話框提示而不是保存到硬編碼路徑
下面的代碼創建了硬編碼的文件路徑,它被填充,但底部提示用戶保存文件的部分,創建一個我們想要的文件名格式的pdf,但文件總是20k,不會打開。我怎樣才能改變下面的代碼,而不是真的在服務器上創建文件,而是在他們選擇保存時將其創建到用戶PC?
using (FileStream outfile = new FileStream(outputfile, FileMode.Create))
{
PdfReader rdr = new PdfReader(pdftemplate);
PdfStamper stm = new PdfStamper(rdr, outfile);
AcroFields fields = stm.AcroFields;
foreach (var de in rdr.AcroFields.Fields)
{
if (de.Key == "Date")
{
fields.SetField("Date", dt.Rows[0]["Form Date"].ToString());
}
if (de.Key == "Project Name")
{
fields.SetField("Project Name", dt.Rows[0]["Project Name"].ToString());
}
if (de.Key == "Contract No")
{
fields.SetField("Contract No", dt.Rows[0]["Contract Number"].ToString());
}
}
stm.Close();
rdr.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=" + newFile);
Response.Write(outfile);
Response.End();
}
您可以嘗試將文件內容讀入一個byte []數組中,並用一個'MemoryStream'數據流包裝該數組。然後使用那個'MemoryStream'流來代替你現在使用的'FileStream'(所以填寫它並寫入'Response'對象)。您也可以嘗試在寫入「響應」流之前重置流以恢復其初始位置。 –
因此,而不是使用FileStream使用MemoryStream? – user3508683
是的,我不確定它是否能解決問題,但它可能有幫助。據我瞭解,您問了兩個問題:1.如何不覆蓋服務器上的模板PDF文件。 2.如何讓用戶正確下載更新的文件。它是否正確?使用'MemoryStream'應該有助於1.並且可以幫助2. –