gpt4 book ai didi

asp.net-mvc-3 - 适用于 ASP.NET MVC3 的 Azure 和 Rotativa PDF 打印

转载 作者:行者123 更新时间:2023-12-04 05:43:48 25 4
gpt4 key购买 nike

我正在使用Rotativa PDF print用于 ASP.NET MVC 应用程序从 html 内容生成 pdf。当在标准 IIS 上单独运行 MVC 应用程序时,这非常有用; pdf 几乎立即生成。

但是,当将 MVC 应用程序部署为 Azure 中的 Web 角色(在本地开发环境和 cloudapp.net 上)时,生成 pdf 打印需要长达 45 秒的时间,而且在显示内容资源时似乎也遇到问题(链接已损坏)。有些事情似乎不对劲,不应该花那么长时间。

pdf 生成本身是使用 wkhtmltopdf 工具完成的,该工具将 html 内容转换为 PDF。 wkhtmltopdf 是一个可执行文件,通过使用 Process.Start 执行,再次由 MVC 应用程序调用。

    /// <summary>
/// Converts given URL or HTML string to PDF.
/// </summary>
/// <param name="wkhtmltopdfPath">Path to wkthmltopdf.</param>
/// <param name="switches">Switches that will be passed to wkhtmltopdf binary.</param>
/// <param name="html">String containing HTML code that should be converted to PDF.</param>
/// <returns>PDF as byte array.</returns>
private static byte[] Convert(string wkhtmltopdfPath, string switches, string html)
{
// switches:
// "-q" - silent output, only errors - no progress messages
// " -" - switch output to stdout
// "- -" - switch input to stdin and output to stdout
switches = "-q " + switches + " -";

// generate PDF from given HTML string, not from URL
if (!string.IsNullOrEmpty(html))
switches += " -";

var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = Path.Combine(wkhtmltopdfPath, "wkhtmltopdf.exe"),
Arguments = switches,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
WorkingDirectory = wkhtmltopdfPath,
CreateNoWindow = true
}
};
proc.Start();

// generate PDF from given HTML string, not from URL
if (!string.IsNullOrEmpty(html))
{
using (var sIn = proc.StandardInput)
{
sIn.WriteLine(html);
}
}

var ms = new MemoryStream();
using (var sOut = proc.StandardOutput.BaseStream)
{
byte[] buffer = new byte[4096];
int read;

while ((read = sOut.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}

string error = proc.StandardError.ReadToEnd();

if (ms.Length == 0)
{
throw new Exception(error);
}

proc.WaitForExit();

return ms.ToArray();
}

有人对可能导致问题并降低性能的原因有任何想法吗?

兄弟。

中号

最佳答案

我找到了根本原因。生成的 pdf 中的损坏网址导致性能下降。由于负载平衡,Azure 在 URL 中包含端口号,因此我需要将 URL 转换为不带端口号的“公共(public)”URL。

关于asp.net-mvc-3 - 适用于 ASP.NET MVC3 的 Azure 和 Rotativa PDF 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10940431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com