Я получаю ошибку «Документ не открыт» в iTextSharp, но только в производстве. Код работает отлично на моей машине dev и в стадии. У меня одинаковые разрешения, установленные в папке 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 и организует, но это порождает ошибку в производстве. Любые мысли о том, почему это может быть?
Существует ли конкретная причина создания временного файла на сервере? В противном случае просто замените «FileStream» в вашем коде «MemoryStream», а затем вызовите 'ms.ToArray()', чтобы вернуть 'byte []'. Затем вы также устраняете дополнительные шаги, связанные с чтением временного файла, а затем удаляете его ... – kuujinbo
Его хорошее предложение и предположение, которое я видел раньше, однако это не то, что вызывает проблему. Спасибо хоть. – capn