4

我将 TuesPechkin 用于我的 Web 应用程序,我正在使用 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 的具体代码解决方案。

4

2 回答 2

3

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

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

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

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

于 2015-04-28T22:02:24.800 回答
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

于 2019-11-11T03:05:58.387 回答