我正在开发基于小型网络的应用程序,其中用户被呈现2-3页长报告,可以打印为PDF.我在
stackoverflow /互联网上查看了不同的解决方案,发现了一些有效的解决方案到打印方面(内容打印有额外的边距,但我需要努力修复它)我当前的问题是我无法在浏览器中显示html内容页面布局.我能够显示A4尺寸的第一页,但是当内容超过1页时,它看起来好像打印在外页,您可以查看下面的图像
这是CSS
- .A4 {
- background: white;
- width: 21cm;
- height: 29.7cm;
- display: block;
- margin: 0 auto;
- padding: 10px 25px;
- margin-bottom: 0.5cm;
- Box-shadow: 0 0 0.5cm rgba(0,0.5);
- }
- @media print {
- .page-break { display: block; page-break-before: always; }
- size: A4 portrait;
- }
- @media print {
- .noprint {display:none;}
- .enable-print { display: block; }
- }
我想解决下面的问题,
>如果所有报告都以页面布局显示(另外,如果我可以在水平分页中显示页面而不是长垂直页面),我会很高兴
>打印时没有填充问题,您看到的是打印的!
解决方法
你的第二个问题:
您必须将体边距和填充设置为零.您还需要从A4类中删除框阴影,边距,宽度和高度,以便打印多个页面.
- .A4 {
- background: white;
- width: 21cm;
- height: 29.7cm;
- display: block;
- margin: 0 auto;
- padding: 10px 25px;
- margin-bottom: 0.5cm;
- Box-shadow: 0 0 0.5cm rgba(0,0.5);
- overflow-y: scroll;
- Box-sizing: border-Box;
- }
- @media print {
- .page-break {
- display: block;
- page-break-before: always;
- }
- size: A4 portrait;
- }
- @media print {
- body {
- margin: 0;
- padding: 0;
- }
- .A4 {
- Box-shadow: none;
- margin: 0;
- width: auto;
- height: auto;
- }
- .noprint {
- display: none;
- }
- .enable-print {
- display: block;
- }
- }
你的第一个问题:
您可以尝试通过计算滚动高度来创建分页功能,并继续从页面中删除元素,直到scollheight小于页面本身.
示例:https://jsfiddle.net/tk8rwnav/31/
- var max_pages = 100;
- var page_count = 0;
- function snipMe() {
- page_count++;
- if (page_count > max_pages) {
- return;
- }
- var long = $(this)[0].scrollHeight - Math.ceil($(this).innerHeight());
- var children = $(this).children().toArray();
- var removed = [];
- while (long > 0 && children.length > 0) {
- var child = children.pop();
- $(child).detach();
- removed.unshift(child);
- long = $(this)[0].scrollHeight - Math.ceil($(this).innerHeight());
- }
- if (removed.length > 0) {
- var a4 = $('<div class="A4"></div>');
- a4.append(removed);
- $(this).after(a4);
- snipMe.call(a4[0]);
- }
- }
- $(document).ready(function() {
- $('.A4').each(function() {
- snipMe.call(this);
- });
- });
这个例子打破了每个元素.段落不会破坏单词,但你可以实现这一点,但这将变得非常复杂.