将HTML转换为PDF发票

时间:2018-08-31 13:50:27

标签: c# html css .net-core

我正在尝试生成HTML页面(C#Razor View),该页面将转换为PDF(使用wkhtmltopdf)并打印在预打印的信纸上。

我的问题是,预先打印的信纸带有标题(easy) 底部的撕纸部分(4厘米)应该是空白的,直到最后一页打印了一些其他信息。

整个发票生成为

<table><thead></thead><tbody></tbody></table>

那么我如何在除最后打印的页面之外的每页上设置X的页边距 并在最后打印的页面上实际打印出什么而不是空白?

试图与最后一个选择器一起使用,但是没有用。

也许其他一些解决方案更适合使用.Net Core(也可以使用某些linux应用程序)吗?

2 个答案:

答案 0 :(得分:0)

您可以使用CSS @page规则指定页边距。您还可以使用它为左侧和右侧页面(用于装订)和首页指定额外的页边距,但似乎为最后一页指定其他页边距!

/* Default left & right is 2cm, top & bottom margin is 4cm */
@page { margin: 4cm 2cm } 

/* First page, 10 cm margin on top */
@page :first {
  margin-top: 10cm;
}

/* Left pages, a wider margin on the left */
@page :left {
  margin-left: 3cm;
  margin-right: 2cm;
}

/* Right pages, a wider margin on the right */
@page :right {
  margin-left: 2cm;
  margin-right: 3cm;
}

进一步阅读:https://www.w3.org/TR/CSS21/page.html#page-box

答案 1 :(得分:0)

最后我找到了答案。

因为该页的顶部应该没有问题(也可以用相同的方法处理,但是thead表是另一个选择)

我的解决方法是:

 wkhtmltopdf test.html --footer-html footer.html output.pdf

整个诀窍在于使用footer.html文件:

<!DOCTYPE html>
<html>

<head>
    <script>
        var mainHeader = "test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>test<br>";
        var secondHeader = "OOOOOOOOOOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPOPPOPO<br>";

        function selectHeader() {
            var vars = {};
            var x = document.location.search.substring(1).split('&');
            for (var i in x) {
                var z = x[i].split('=', 2);
                vars[z[0]] = decodeURIComponent(z[1]);
            }

            if (vars["page"] == vars['topage']) {
                document.getElementById('main').innerHTML = secondHeader;
            } else {
                document.getElementById('main').innerHTML = mainHeader;
            }

            if (vars["page"] == vars['frompage']) {
                document.getElementById('test').innerHTML = secondHeader;
            }

        }
    </script>
</head>

<body onload="selectHeader()">

    <div style="min-height: 6cm; background-color: aqua; max-height: 6cm; overflow:visible;">
        <div id="main" onload="selectHeader()">
        </div>
    </div>
</body>

</html>

ps。 在没有!DOCTYPE html的地方阅读,可能无法正常工作。

感谢所有帮助