print div contents in javascript

19,358

Solution 1

In your JS code add style to hide the "in" div <style>#in {display:none}</style>, like this:

function printDiv()
{
var divToPrint=document.getElementById('DivIdToPrint');
var newWin=window.open('','Print-Window','width=400,height=400,top=100,left=100');
newWin.document.open();
    newWin.document.write('<html><head><style>#in {display:none}</style><body   onload="window.print()">'+divToPrint.innerHTML+'</body></html>');
newWin.document.close();
setTimeout(function(){newWin.close();},10);

}

Solution 2

Proper way to do it, is to use @media print to set display:none

@media print {
  .in {display:none}
}

No javascript!

Solution 3

Thanks Aziz shaikh, it works fine. We can print two different divs at once as per following code:

function printDiv()
{
    var divToPrint=document.getElementById('divcostlist');
    var clientinfo=document.getElementById('clientinfo');
    var newWin=window.open('','Print-Window','width=400,height=400,top=100,left=100');
    newWin.document.open();
    newWin.document.write('<html><head><style>#in {display:none}</style><body   onload="window.print()">'+clientinfo.innerHTML+divToPrint.innerHTML+'</body></html>');
    newWin.document.close();
    setTimeout(function(){newWin.close();},10);
}

Solution 4

I have written a function that prints an element using an internal IFrame rather than a new window. The function uses jQuery. You can give it a try.

function printHtmlElement(elem) 
{
  $('.lp_print_frame').remove();        // remove previous iframes. we do not remove them at the end of the function to allow the print to work properly
  var iframe = $('<iframe class="lp_print_frame" src="about:blank" width="100px" height="100px" />');  // display:block needed for IE
  $('body').append(iframe);
  var frameWindow = iframe[0].contentWindow;

  frameWindow.document.write('<html><head></head><body></body></html>');
  frameWindow.document.close();

  // copy css from current html 
  var cssElems = $('link,style');
  for(var i=0;i<cssElems.length;i++) 
  {
    var head = frameWindow.document.getElementsByTagName('head')[0];
    if (frameWindow.document.importNode)
      head.appendChild( frameWindow.document.importNode(cssElems[i],true) );
    else
      head.appendChild( cssElems[i].cloneNode(true) );
  }

  // copy a copy of elem
  if (frameWindow.document.importNode)
    frameWindow.document.body.appendChild(frameWindow.document.importNode(elem,true));
  else
    frameWindow.document.body.appendChild(elem);

  setTimeout(function() {       // timeout is needed for FF
    if (frameWindow.focus) frameWindow.focus();     // focus is needed for IE
    frameWindow.print();
    iframe.css('display','none');
  },1);
}

Solution 5

Step1. Write the following javascript inside your head tag

<script language="javascript">
function PrintMe(DivID) {
var disp_setting="toolbar=yes,location=no,";
disp_setting+="directories=yes,menubar=yes,";
disp_setting+="scrollbars=yes,width=650, height=600, left=100, top=25";
   var content_vlue = document.getElementById(DivID).innerHTML;
   var docprint=window.open("","",disp_setting);
   docprint.document.open();
   docprint.document.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"');
   docprint.document.write('"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
   docprint.document.write('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">');
   docprint.document.write('<head><title>My Title</title>');
   docprint.document.write('<style type="text/css">body{ margin:0px;');
   docprint.document.write('font-family:verdana,Arial;color:#000;');
   docprint.document.write('font-family:Verdana, Geneva, sans-serif; font-size:12px;}');
   docprint.document.write('a{color:#000;text-decoration:none;} </style>');
   docprint.document.write('</head><body onLoad="self.print()"><center>');
   docprint.document.write(content_vlue);
   docprint.document.write('</center></body></html>');
   docprint.document.close();
   docprint.focus();
}
</script>

Step2. Call the PrintMe('DivID') function by an onclick event.

<input type="button" name="btnprint" value="Print" onclick="PrintMe('divid')"/>
<div id="divid">
here is some text to print inside this div with an id 'divid'
</div>
Share:
19,358
salma
Author by

salma

Updated on June 04, 2022

Comments

  • salma
    salma almost 2 years

    My print html is below

    <div id="DivIdToPrint" style="border:1px solid #000000;">
     fdghgjhghjkjk
    <div id="in">TO be are not to be that is the question</div>
    </div>
    

    and javascript code is :

    function printDiv()
    {
    var divToPrint=document.getElementById('DivIdToPrint');
    var newWin=window.open('','Print-Window','width=400,height=400,top=100,left=100');
    newWin.document.open();
    newWin.document.write('<html><body   onload="window.print()">'+divToPrint.innerHTML+'</body></html>');
    newWin.document.close();
    setTimeout(function(){newWin.close();},10);
    
    }
    

    I want to print "DivIdToPrint" div but don't show "in " div content.