打印网页的特定部分

IT技术 javascript html printing
2021-01-18 13:19:32

我正在尝试打印应用程序的特定部分。

该应用程序有一个用户列表,显示他们的名字和姓氏。当我点击一个用户时,我会看到一个弹出窗口,其中包含有关他们的更多详细信息。

我将如何为我点击的用户打印弹出窗口?弹出窗口如下所示:

 <div id="user<?=$user->id;?>" class="popup">
      <div class="details">
           User details...
      </div>
      <a href="#print">Print</a>
 </div>

打印按钮还没有工作。

6个回答

您可以使用简单的 JavaScript 从页面打印特定的 div。

var prtContent = document.getElementById("your div id");
var WinPrint = window.open('', '', 'left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0');
WinPrint.document.write(prtContent.innerHTML);
WinPrint.document.close();
WinPrint.focus();
WinPrint.print();
WinPrint.close();
如果我想改变方向怎么办?
2021-03-15 13:19:32
基于此答案的小提琴:jsfiddle.net/jdavidzapatab/6sctvg2z
2021-03-15 13:19:32
如果您使用此代码打印的 div 需要任何 CSS 以您想要的方式呈现它们,请小心。如果是这样,您必须确保将其添加到页面以及使用WinPrint.document.write(cssLinkTag).
2021-03-24 13:19:32
@WallyLawless 您能否提供一个如何派生 css 标签的示例?
2021-04-05 13:19:32
当 div 包含从服务器端获取的数据时,这不适用于打印 div:stackoverflow.com/questions/34206638/...
2021-04-06 13:19:32

您必须打开一个新窗口(或导航到新页面),其中仅包含您希望用户能够打印的信息

文字:

function printInfo(ele) {
    var openWindow = window.open("", "title", "attributes");
    openWindow.document.write(ele.previousSibling.innerHTML);
    openWindow.document.close();
    openWindow.focus();
    openWindow.print();
    openWindow.close();
}

HTML:

<div id="....">
    <div>
        content to print
    </div><a href="#" onclick="printInfo(this)">Print</a>
</div>

这里有一些注意事项:锚点和包含要打印的内容的 div 之间不能有空格

这太棒了!当然,如果您不希望在您的项目之后有打印链接,或者您希望它更漂亮一点,那么您将面临一些挑战。我通过给 href 一个 ID,将 Print 更改为不间断空格,并使用 getElementById 在别处引用 click() 事件来解决该挑战。谢谢!!
2021-03-26 13:19:32
啊终于在尝试了 angular/typescript 的一万亿个 html-to-pdf 解决方案之后,一个简单的解决方案
2021-03-31 13:19:32

我制作了这个 jQuery 扩展来打印所选元素的 HTML: $('#div2').print();

$.fn.extend({
    print: function() {
        var frameName = 'printIframe';
        var doc = window.frames[frameName];
        if (!doc) {
            $('<iframe>').hide().attr('name', frameName).appendTo(document.body);
            doc = window.frames[frameName];
        }
        doc.document.body.innerHTML = this.html();
        doc.window.print();
        return this;
    }
});

这里查看它的实际效果

我认为,而不是疯狂downvoting人谁是发布了一个简单的挽救的答案,我们作为一个社区实际上可能尽量进行评论,只是复制该死的编码他们吓跑了自己v_v不要期望每个人都那么有familar StackOverflow 礼仪的错综复杂...
2021-04-03 13:19:32
Chrome 对我不起作用。此外,您应该尝试在答案中发布您的代码。
2021-04-06 13:19:32
谢谢,但为什么不能添加 css 文件?
2021-04-09 13:19:32

代替所有复杂的 JavaScript,您实际上可以通过简单的方式实现这一点CSS:只需使用两个 CSS 文件,一个用于正常屏幕显示,另一个用于显示您希望打印的内容。在后一个文件中,隐藏您不想打印的所有内容,仅显示弹出窗口。

记得定义media两个 CSS 文件属性:

<link rel="stylesheet" href="screen-css.css" media="all" />
<link rel="stylesheet" href="print-css.css" media="print" />
我制作了复杂的 JavaScript,因为我有更多的 1 个按钮来选择要打印的区域。我使用 css "@media print {" 来隐藏按钮。
2021-04-08 13:19:32

只需使用 CSS 隐藏您不想打印的内容。当用户选择打印时 - 页面将查看“ media="print" CSS 以获取有关页面布局的说明。

媒体=“打印” CSS按指示来隐藏我们不希望打印的内容。

<!-- CSS for the things we want to print (print view) -->
<style type="text/css" media="print">

#SCREEN_VIEW_CONTAINER{
        display: none;
    }
.other_print_layout{
        background-color:#FFF;
    }
</style>

<!-- CSS for the things we DO NOT want to print (web view) -->
<style type="text/css" media="screen">

   #PRINT_VIEW{
      display: none;
   }
.other_web_layout{
        background-color:#E0E0E0;
    }
</style>

<div id="SCREEN_VIEW_CONTAINER">
     the stuff I DO NOT want printed is here and will be hidden - 
     and not printed when the user selects print.
</div>

<div id="PRINT_VIEW">
     the stuff I DO want printed is here.
</div>
这很好用 - 非常简单明了 - 谢谢!:)
2021-04-11 13:19:32