MikeOShay
MikeOShay

Reputation: 522

Running a TuesPechkin converter more than once

I'm using TuesPechkin for my web application, which I'm testing locally on IIS with VS2013. The user clicks a button and the page's current HTML is saved to a PDF file, which is then emailed out. This process is going to be run regularly as the site's data changes.

When converter.Convert(document) first runs, it converts without problem. Every subsequent attempt, however, results in the process hanging and me needing to restart VS.

Below is some default code I've been using to test.

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

Can anyone point me in the right direction on this? Most of my troubleshooting so far has led to some discussions on threading and pooling, but no concrete code solutions for running TuesPechkin more than once.

Upvotes: 4

Views: 5835

Answers (2)

Max CHien
Max CHien

Reputation: 143

Since this app on IIS, could get singleton converter, and use RemotingToolset

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

// Then

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

Reference : https://github.com/tloy1966/TuesPechkin

Upvotes: 0

Nic
Nic

Reputation: 12846

Have you tried the ThreadSafeConverter? The StandardConverter is only suitable for small console apps.

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

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

Note that you should keep the converter somewhere static, or as a singleton instance (as mentioned here).

Upvotes: 3

Related Questions