在我的ASP.NET应用程序(.NET Framework4.7)中,我使用OpenHtmlToPdf
根据网站中的页面创建PDF。
它在本地工作,但在服务器生产中不起作用:我有以下错误:
异常类型: System.ComponentModel.Win32Exception异常消息:访问被拒绝 堆栈跟踪:在System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)在System.Diagnostics.Process.Start() at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)在OpenHtmlToPdf.HtmlToPdfConverterProcess.Convert(ConversionSource conversionSource)在OpenHtmlToPdf.Pdf.DocumentBuilder.ReadContentUsingTemporaryFile(String temporaryFilename)
我认为这个问题与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呢?
发布于 2019-10-27 13:28:09
OpenHTMLToPDF使用Path.GetTempPath()和Guid.NewGuid()创建临时文件。确保正在运行的进程有足够的privelegdes来写入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
https://stackoverflow.com/questions/58579634
复制相似问题