0

我使用TuesPechkin从动态 Html 中获取 Pdfs。正文很简单,因为它可以采用 Html 字符串,但页眉和页脚仅采用 Urls。我将它们作为 html 存储在本地 atm 中,我可以将它们带入文档,但没有任何动态内容。

有没有办法使用 Razor 或类似的方法来带来这样的价值 -

var document = new HtmlToPdfDocument
{
    GlobalSettings = new GlobalSettings(),
    Objects = 
    {
        new ObjectSettings 
        { 
            HtmlText = "<p>Some Html</p>",
            Footer = new FooterSetting { PageUrl = "file://C:/file.cshtml?Name=name" }
        }
    }
};

Html 看起来像

<html>
    <p>Name: @Request["name"]</p>
</html>

该项目只是一个类库,所以我相信它缺少运行剃须刀所需的某些方面?

提前感谢您的任何意见。

4

1 回答 1

1

您可以尝试将剃刀代码呈现为字符串,然后将其保存为文件,最后将文件导出为 PDF。

有时像这样:

剃刀到字符串

public string RenderRazorViewToString(string viewName, object model)
{
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}

导出为 PDF

public void MyPDFExport()
{
    string url = @"d:\Foo.html";
    string html = RenderRazorViewToString("File", "myName");
    System.IO.File.WriteAllBytes(url, System.Text.Encoding.ASCII.GetBytes(html));

    var document = new HtmlToPdfDocument
    {
        GlobalSettings = new GlobalSettings(),
        Objects = 
        {
            new ObjectSettings 
            { 
                HtmlText = "<p>Some Html</p>",
                FooterSettings = new FooterSettings { HtmlUrl = url }
            }
        }
    };
    IConverter converter =
        new ThreadSafeConverter(
            new RemotingToolset<PdfToolset>(
                new Win32EmbeddedDeployment(
                    new TempFolderDeployment())));

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

查看文件.cshtml

@model string

<html>
    <p>Name: @Model</p>
</html>
于 2015-04-28T06:36:32.450 回答