OpenHtmlToPdf访问被ASP.NET拒绝

问题描述 投票:0回答:1

在我的ASP.NET应用程序(.NET Framework 4.7)中,我使用OpenHtmlToPdf根据网站上的页面创建PDF。

它在本地工作,但不在服务器生产中:我出现以下错误:

异常类型:System.ComponentModel.Win32Exception异常消息:访问被拒绝

堆栈跟踪:位于System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfostartInfo)位于System.Diagnostics.Process.Start()处System.Diagnostics.Process.Start(ProcessStartInfo startInfo)位于OpenHtmlToPdf.HtmlToPdfConverterProcess.Convert(ConversionSourceconversionSource)位于OpenHtmlToPdf.Pdf.DocumentBuilder.ReadContentUsingTemporaryFile(String临时文件名)

我认为问题与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?

c# asp.net pdf-generation wkhtmltopdf
1个回答
0
投票

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";
}

然后在调用Content时使用它>

  // 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

© www.soinside.com 2019 - 2024. All rights reserved.