"文档未打开"仅在使用iTextSharp的生产中出错

cap*_*apn 3 c# itext itextsharp

我在iTextSharp中收到"文档未打开"错误,但仅限于生产中.代码在我的开发机器和分段上运行良好.我在舞台服务器上的Temp文件夹中设置了相同的权限.

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;
    }
Run Code Online (Sandbox Code Playgroud)

一个pdf文件确实被创建了,所以我知道它已经过去了

using (FileStream fs = new FileStream(tempPDFFile, FileMode.Create))
Run Code Online (Sandbox Code Playgroud)

至少.

这段代码在dev和staging中运行得很好,但它会在生产中引发错误.有什么想法可以吗?

kuu*_*nbo 14

乍一看没有注意到,但是从上面的代码中:

document.Open();
PdfWriter.GetInstance(document, fs);
Run Code Online (Sandbox Code Playgroud)

订单需要颠倒:

PdfWriter.GetInstance(document, fs);
document.Open();
Run Code Online (Sandbox Code Playgroud)

换句话说,你需要PdfWriter 尝试之前打开它Document