代码之家  ›  专栏  ›  技术社区  ›  Kitson

Dojo/Dijit和打印

  •  5
  • Kitson  · 技术社区  · 14 年前

    我希望能够为我的用户提供一个按钮,只需打印Dojo/Dijit应用程序的特定部分。在打印方面,似乎普遍缺乏文档和示例。

    例如,我有一个 dijit.layout.ContentPane 其中包含我要打印的内容,但我不想打印文档的其余部分。我在Web上看到了一些纯javascript示例,其中 node.innerHTML 在“隐藏”iframe中读取,然后从中打印。我怀疑这是可行的,但我想知道是否有一个更加以Dojo为中心的打印方法。

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Kitson    14 年前

    我决定沿着阅读的道路 <iframe> 从那里打印,但是因为我使用的是渲染的dojox.gfx表面,所以在某些浏览器中,从目标内容窗格直接读取不可见的iframe无法正常工作。所以我要做的是将iframe的“src”设置为一个重新呈现图表的页面,然后在图表完成后将其打印出来。在主文档中,它看起来如下所示:

    <iframe id="printIFrame4" src="#" style="width: 0px; height:0px; 
      border: none; background: transparent"></iframe>
    <button dojoType="dijit.form.Button" style="margin-top: -3px;" id="buttonPrintMap4">
      Print...
      <script type="dojo/method" event="onClick" args="event">
        dojo.byId("printIFrame4").src = "logmap/docMap.php?id=4";
      </script>
    </button>
    

    然后页面会做一些必要的Dojo工作来重新绘制图表,一旦加载了它就会做一个:

    this.focus();
    this.print();
    

    然后打印完成。

        2
  •  0
  •   Abboq    14 年前

    一种解决方案是创建只打印样式表,而第一个规则默认情况下隐藏所有内容:

    body {
        display: none;
    }
    

    然后,第二个CSS规则(也是在仅打印样式表中)只显示Dojo内容窗格:

    #contentPaneId {
        display: block;
    }
    

    道场 ContentPane ID需要与您使用的内容匹配 #contentPaneId 在CSS中。

    最后,您可以指示浏览器它是一个只打印的CSS文件,使用 media="print" 在你的 link 标签:

    <link rel="stylesheet" type="text/css" href="printOnly.css" media="print"/>