仅在使用 iTextSharp 进行生产时出现“文档未打开”错误

2023-12-10

我在 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;
    }

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

using (FileStream fs = new FileStream(tempPDFFile, FileMode.Create))

至少。

该代码在开发和登台中运行良好,但在生产中会引发错误。关于为什么会这样的任何想法吗?


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

document.Open();
PdfWriter.GetInstance(document, fs);

需要颠倒顺序:

PdfWriter.GetInstance(document, fs);
document.Open();

换句话说,您需要PdfWriter before你尝试打开Document

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在使用 iTextSharp 进行生产时出现“文档未打开”错误 的相关文章