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))
を実行します知っています。
このコードは、開発者とステージングでうまく動作しますが、本番環境ではエラーが発生します。それがなぜ起こるのかについての考えはありますか?
サーバーに一時ファイルを作成する特別な理由はありますか?それ以外の場合は、コード内の 'FileStream'を' MemoryStream'に置き換え、 'ms [ToArray()'を呼び出して 'byte []'を返してください。次に、一時ファイルを読み込んで削除する余分な手順を取り除いてから削除します。 – kuujinbo
これは良い提案ですが、これまでに見たことがありますが、それは問題の原因ではありません。しかし、ありがとう。 – capn