【问题标题】:How to make a printout of a div? [closed]如何打印一个div? [关闭]
【发布时间】:2011-08-23 14:14:51
【问题描述】:

如何使用 Javascript 打印页面中的特定 div?

【问题讨论】:

  • 请更具体
  • 你好朋友,你要打印出来还是复印一份?
  • 你有什么理由想用javascript“打印”一个div吗?

标签: javascript html printing-web-page


【解决方案1】:

我建议使用“打印”css 样式表,您可以在其中指定隐藏您不想打印的 dom 元素(显示:无)。尝试只使您要打印的 div 在打印样式表中可见。

另一种选择是使用在单击页面中的“打印”按钮时显示的弹出窗口。在弹出窗口中仅显示 div 内容,并在文档加载时触发打印对话框。

【讨论】:

  • 没有什么比打印样式表更好。
【解决方案2】:

这里是一个已经在windows上IE8和FF3.6.6测试过的实现 有些东西可以精简,但其他的东西是必要的(iframe 上的 display:none 不会打印任何内容)

<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  <title>print selected paragraphs</title>
  <style>
  a{text-decoration:none}
  </style>

  <style media="print">
  .noPrint { display:none}
  .print { display:block}
  </style>
  <script>
  function addPrint() {
    var checks = document.getElementsByTagName('input');
    for (var i=0;i<checks.length;i++) {
      document.getElementById(checks[i].value).className = (checks[i].checked)?'print':'noPrint';
    }
  }
  var content
  function printThis(id) {
    var iFrame = document.createElement('iframe');
    iFrame.height='1px';
    iFrame.width='1px';
    content = document.getElementById(id).innerHTML;
    content = '<body onload="self.focus();self.print()"><style>.noprint{display:none}</style>'+content+'</body>'
    iFrame.src='about:blank';
    document.body.appendChild(iFrame);
   // Initiate the iframe's document to null
     iFrame.doc = null;

     // Depending on browser platform get the iframe's document, this is only
     // available if the iframe has already been appended to an element which
     // has been added to the document
     if(iFrame.contentDocument)
      // Firefox, Opera
      iFrame.doc = iFrame.contentDocument;
     else if(iFrame.contentWindow)
      // Internet Explorer
      iFrame.doc = iFrame.contentWindow.document;
     else if(iframe.document)
      // Others?
      iFrame.doc = iFrame.document;

     // If we did not succeed in finding the document then throw an exception
     if(iFrame.doc != null) {
      iFrame.doc.write(content)
      iFrame.doc.close()
    }
    return false
  }
  window.onload=function() {
    addPrint();
  }
  </script>
  </head>
  <body>
<div id="p1" class="noPrint">
<h3>1. ¿Qué es Lorem Ipsum?</h3>
<p>Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal manera que logró hacer un libro de textos especimen. No sólo sobrevivió 500 años, sino que tambien ingresó como texto de relleno en documentos electrónicos, quedando esencialmente igual al original. Fue popularizado en los 60s con la creación de las hojas "Letraset", las cuales contenian pasajes de Lorem Ipsum, y más recientemente con software de autoedición, como por ejemplo Aldus PageMaker, el cual incluye versiones de Lorem Ipsum.</p>
<input type="checkbox" class="noPrint" id="c1" value="p1" onClick="addPrint(this)"><label class="noPrint" for="c1">Add this to print</label>&nbsp;<a href="#" onClick="return printThis('p2')">Print this NOW</a>
</div>

<div id="p2" class="noPrint">
<h3>2. ¿Por qué lo usamos?</h3>
<p>Es un hecho establecido hace demasiado tiempo que un lector se distraerá con el contenido del texto de un sitio mientras que mira su diseño. El punto de usar Lorem Ipsum es que tiene una distribución más o menos normal de las letras, al contrario de usar textos como por ejemplo "Contenido aquí, contenido aquí". Estos textos hacen parecerlo un español que se puede leer. Muchos paquetes de autoedición y editores de páginas web usan el Lorem Ipsum como su texto por defecto, y al hacer una búsqueda de "Lorem Ipsum" va a dar por resultado muchos sitios web que usan este texto si se encuentran en estado de desarrollo. Muchas versiones han evolucionado a través de los años, algunas veces por accidente, otras veces a propósito (por ejemplo insertándole humor y cosas por el estilo).</p>
<input type="checkbox" class="noPrint" id="c2" value="p2" onClick="addPrint(this)"><label class="noPrint" for="c2">Add this to Print</label>
</div>
</body>
</html>

【讨论】:

    【解决方案3】:

    document.write('

    ' + variableWithSomeContent + '
    ');

    【讨论】:

      【解决方案4】:

      Javascript 不打印。您必须将 div 插入 DOM(文档对象模型)的某个位置。

      我建议学习一些 jQuery 并使用 .append().prepend().html() 函数。

      【讨论】:

      • 在对 Javascript/DOM/etc 有基本了解之前学习 jQuery 是解决 IMO 问题的秘诀
      • 用 Javascript 为您打印一个 div 有多难?因为你真的必须学习 jQuery... :) 你是认真的吗?
      猜你喜欢
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多