iTextSharp中出現「文檔未打開」錯誤,但僅在生產中出現。代碼在我的開發機器和分期中運行良好。我在舞臺服務器的Temp文件夾中設置了相同的權限。僅在使用iTextSharp進行生產時出現「文檔未打開」錯誤
public static byte[] ConvertHtmlToPdf(string html)
{
html = HtmlPostProcessor.Process(html);
byte[] fileData = null;
string tempPath = ConfigurationManager.AppSettings["TempDirectory"];
string tempPDFFile = Path.Combine(tempPath, Guid.NewGuid() + ".pdf");
int num = FontFactory.RegisterDirectory(@"C:\Windows\Fonts");
using (FileStream fs = new FileStream(tempPDFFile, FileMode.Create))
{
using (Document document = new Document(PageSize.LETTER, 50, 50, 50, 50))
{
document.Open();
PdfWriter.GetInstance(document, fs);
using (StringReader stringReader = new StringReader(html))
{
List<IElement> parsedList = HTMLWorker.ParseToList(stringReader, null);
foreach (IElement item in parsedList)
{
document.Add(item);
}
}
}
}
FileStream generatedPDF = File.Open(tempPDFFile, FileMode.Open);
fileData = new byte[(int)generatedPDF.Length];
int result = generatedPDF.Read(fileData, 0, (int)generatedPDF.Length);
generatedPDF.Close();
File.Delete(tempPDFFile);
return fileData;
}
一個PDF文件時生成,所以我知道它跑過
using (FileStream fs = new FileStream(tempPDFFile, FileMode.Create))
至少是。
此代碼在dev和staging中運行得很好,但它在生產中會引發錯誤。任何想法,爲什麼這可能是?
是否有一個特定的原因,你正在服務器上創建一個臨時文件?否則,只需用'MemoryStream'替換代碼中的'FileStream',然後調用'ms.ToArray()'返回'byte []'。然後,你也消除了必須讀取臨時文件,然後刪除它的額外步驟... – kuujinbo 2012-02-16 21:19:53
它的一個很好的建議,以及我之前見過的建議,但是這不是什麼原因造成的問題。不過謝謝。 – capn 2012-02-17 19:00:45