2

我有一个 Web 应用程序,我想在每个页面上添加一个“另存为 PDF”按钮,按下该按钮会自动将当前网页转换为可在浏览器中下载的 PDF 文档。

我已将 TuesPechkin (v2.1.1) 和 TuesPechkin.Wkhtmltox.AnyCPU (v0.12.4.1) 添加到来自 NuGet 的项目引用中。我的 PDF 下载工作正常,但由于我的网站使用引导程序(PDF 总是在移动视图中导出),所以生成的并不完全正确。我发现添加 --viewport-size 1024x768 为我提供了所需的解决方案,并且能够使用最新的 wkhtmltopdf.exe (0.12.5) 和以下命令行对此进行测试(在 Web 应用程序之外):

wkhtmltopdf.exe --viewport-size 1024x768 -O Landscape -s A3 http://localhost/mywebpage output.pdf

当我尝试在 TuesPechkin 中查找 viewport-size 参数时,它不可用。这个问题是几年前创建的https://github.com/tuespetre/TuesPechkin/issues/122并且作者描述它没有被添加,因为当时最新版本的wkhtmltopdf(0.12.4)没有在其 API 中提供该属性。从那时起它已被添加(0.12.5)https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2609

所以...我克隆了 TuesPechkin.Wkhtmltox.AnyCPU 回购https://github.com/cratu/TuesPechkin。我下载了最新的 wkhtmltopdf 32 位和 64 位 dll。我使用 7-Zip 将这些添加到 gz 文件并更新了 TuesPechkin.Wkhtmltox.AnyCPU 存储库中的文件。然后我将以下代码添加到 GlobalSettings.cs 文件中:

[WkhtmltoxSetting("viewportSize")]
public string ViewportSize { get; set; }

然后我可以从我的 Web 应用程序代码中使用设置此属性:

var document = new HtmlToPdfDocument
{
    GlobalSettings =
    {
        DocumentTitle = this.Ets.Pages.Title,
        PaperSize = PaperKind.A3,
        Orientation = GlobalSettings.PaperOrientation.Landscape,
        ViewportSize = "1024x768"
    },
    Objects = {
        new ObjectSettings { PageUrl = this.Request.Url.AbsoluteUri }
    }
};

但是,从我的 Web 应用程序导出的 PDF 仍然没有给我想要的结果来匹配 exe 的输出。新的 ViewportSize 属性似乎根本没有任何影响。我错过了什么?

更新

我创建了一个 .NET 控制台应用程序,并且 ViewportSize 属性正在工作。我检查了 Web 应用程序正在使用正确的 dll,但 ViewportSize 属性仍然无法像在控制台应用程序中那样工作。我重新启动了 IIS 和应用程序池,但结果仍然相同。

4

0 回答 0