无需按钮即可从 HTML 生成 PDF

Generate PDF from HTML without buttons

我使用 wkhtmltopdf 从我的网页生成 pdf。

我的项目在 ASP.Net 和 Bootstrap 上。所以页面上的按钮有共同的 类 btn btn-primary.

据我所知,如果我设置为某个元素 .Visible = false;,此元素将在 pdf 中不可见。由于页面上有很多按钮,因此通过 Id 设置每个按钮的可见性不太好。

那么我怎样才能仅通过类名从页面中获取所有按钮呢?

我发现了什么:

在某些 post Stack 用户建议中添加事件 OnPreRender 并在此事件中将可见性设置为 false。示例:

<asp:LinkButton ID="lnkContinue" runat="server" OnClick="lnkContinue_Click" CssClass="btn btn-primary" Text="Continue" OnPreRender="Button_PreRender"></asp:LinkButton>

protected void Button_PreRender(object sender, EventArgs e)
{
 var button = (HtmlGenericControl)sender;
            button.Visible = !button.Attributes.CssStyle.Value.Contains("btn btn-primary");

}

您不应直接使用为您的网页生成的 HTML 作为 PDF 的 HTML。您的网页可能包含不适合在 PDF 中显示的导航和其他 UI 元素(如提到的按钮)。

更好的解决办法是单独生成HTML。这允许您保留对用于创建 PDF 的确切标记的控制。您可以使用 StringBuilder 手动构建 HTML 或使用其他库来创建它。

我最喜欢的方法是使用 Razor PDF for MVC 库。您使用 Razor 语法(非常直观)生成 PDF。

您可以向 wkhtmltopdf 提供您自己的 javascript 函数以迭代每个元素并使它们不可见:

http://wkhtmltopdf.org/usage/wkhtmltopdf.txt

--运行-脚本js

var eles = document.getElementsByClassName('btn btn-primary');
for (var x = 0; x < eles.length; x++) {
    eles[x].style.visibility = false;
}