OpenHtmlToPdf Доступ запрещен с ASP.NET - PullRequest
0 голосов
/ 27 октября 2019

В моем приложении ASP.NET (.NET Framework 4.7) я использую OpenHtmlToPdf для создания PDF на основе страниц на сайте.

Он работает локально, но не на сервере:У меня следующая ошибка:

Тип исключения: System.ComponentModel.Win32Exception Сообщение об исключении: Доступ запрещен

Трассировка стека: в System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo)в System.Diagnostics.Process.Start () в System.Diagnostics.Process.Start (ProcessStartInfo startInfo) в OpenHtmlToPdf.HtmlToPdfConverterProcess.Convert (ConversionSource translationSource) в OpenHtmlToPdf.Pdf.Document *Builder.TeventFileTimeFileFile

Я думаю, что проблема связана с wkhtmltopdf, потому что OpenHtmlToPdf использует эту библиотеку для создания PDF. Код довольно прост.

    var pdf = Pdf.From(html)
                 .WithGlobalSetting("orientation", "Landscape")
                 .WithObjectSetting("web.defaultEncoding", "utf-8")
                 .Content();

    return File(pdf, System.Net.Mime.MediaTypeNames.Application.Octet, "Reference.pdf");

Тогда, как я могу создать PDF?

1 Ответ

0 голосов
/ 27 октября 2019

OpenHTMLToPDF использует Path.GetTempPath () и Guid.NewGuid () для создания временного файла. Убедитесь, что в вашем запущенном процессе есть достаточные права доступа для записи в путь, возвращаемый Path.GetTempPath ();

Для справки приведен исходный код, отвечающий за создание имени временного файла и его запись.

//inside TemporaryPdf class
public static string TemporaryFilePath() 
{
  return Path.Combine(Path.GetTempPath(), "OpenHtmlToPdf", TemporaryPdf.TemporaryFilename());
}

private static string TemporaryFilename()
{
  return Guid.NewGuid().ToString("N") + ".pdf";
}

И затем он используется при вызове контента

  // inside the Pdf class
  public byte[] Content()
  {
    return this.ReadContentUsingTemporaryFile(TemporaryPdf.TemporaryFilePath());
  }

  private byte[] ReadContentUsingTemporaryFile(string temporaryFilename)
  {
    this._globalSettings["out"] = temporaryFilename;
    HtmlToPdfConverterProcess.ConvertToPdf(this._html, this._globalSettings, this._objectSettings);
    byte[] numArray = TemporaryPdf.ReadTemporaryFileContent(temporaryFilename);
    TemporaryPdf.DeleteTemporaryFile(temporaryFilename);
    return numArray;
  }

Остальной код можно найти на GitHub здесь: OpenHTMLToPDF

...