不止一次运行TuesPechkin转换器

时间:2015-04-28 20:30:41

标签: c# .net asp.net-mvc pdf-generation tuespechkin

我使用TuesPechkin作为我的网络应用程序,我使用VS2013在IIS上进行本地测试。用户单击按钮,页面的当前HTML将保存为PDF文件,然后通过电子邮件发送出去。随着网站数据的变化,这个过程将定期运行。

首次运行converter.Convert(document)时,它会毫无问题地转换。但是,每次后续尝试都会导致进程挂起,我需要重新启动VS.

以下是我用来测试的一些默认代码。

public void MakePDF()
{
    var document = new HtmlToPdfDocument
    {
        GlobalSettings =
        {
            ProduceOutline = true,
            DocumentTitle = "Pretty Websites",
            PaperSize = PaperKind.A4, // Implicit conversion to PechkinPaperSize
            Margins =
            {
                All = 1.375,
                Unit = TuesPechkin.Unit.Centimeters
            }
        },
        Objects = {
            new ObjectSettings { HtmlText = "<h1>Pretty Websites</h1><p>This might take a bit to convert!</p>" }
        }
    };

    IConverter converter =
        new ThreadSafeConverter(
            new PdfToolset(
                new Win32EmbeddedDeployment(
                    new TempFolderDeployment())));

    byte[] result = converter.Convert(document);
}

有人能指出我正确的方向吗?到目前为止,我的大部分故障排除都引发了一些关于线程和池的讨论,但没有多次运行TuesPechkin的具体代码解决方案。

2 个答案:

答案 0 :(得分:3)

你试过ThreadSafeConverter吗? StandardConverter仅适用于小型控制台应用。

IConverter converter =
    new ThreadSafeConverter(
        new RemotingToolset<PdfToolset>(
            new Win32EmbeddedDeployment(
                new TempFolderDeployment())));

byte[] result = converter.Convert(document);

请注意,您应该将转换器保持在某个静态位置,或者作为单例实例(如上所述here)。

答案 1 :(得分:0)

由于此应用程序位于IIS上,因此可以获取单例转换器,并使用RemotingToolset

var toolSet = new RemotingToolset<PdfToolset>(winAnyCpuEmbeddedDeployment);

//然后

using TuesPechkin.Wkhtmltox.AnyCPU;
...
var converter = PDFHelper.Factory.GetConverter();
var result = converter.Convert(This.Document);

参考:https://github.com/tloy1966/TuesPechkin

相关问题