【问题标题】:dojo/dijit and Printingdojo/dijit 和印刷
【发布时间】:2010-03-07 11:11:26
【问题描述】:

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

例如,我有一个特定的dijit.layout.ContentPane,其中包含我想要打印的内容,但我不想打印文档的其余部分。我在网上看到了一些纯 JavaScript 示例,其中node.innerHTML 被读入“隐藏”iframe,然后从那里打印出来。我怀疑这会起作用,但我想知道是否有更以道场为中心的打印方法。

有什么想法吗?

【问题讨论】:

    标签: javascript printing dojo


    【解决方案1】:

    我决定沿着读取<iframe> 并从那里打印的路径,但是因为我使用的是渲染的 dojox.gfx 表面,所以从目标 ContentPane 直接读取到不可见的 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】:

    一个解决方案是创建一个仅打印的样式表,而第一条规则默认隐藏所有内容:

    body {
        display: none;
    }
    

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

    #contentPaneId {
        display: block;
    }
    

    Dojo ContentPane ID 需要与您在 CSS 中用于 #contentPaneId 的 ID 相匹配。

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

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

    【讨论】:

    • 我应该补充一点,CSS 规则“display: none”将强制布局填充项目曾经所在的位置。规则“可见性:隐藏”将在布局中保留项目的尺寸但隐藏项目。
    • 我们正在讨论一个可以轻松拥有 100 多个不同类的应用程序,我无法直接控制这些类,因为我使用的是框架。虽然很理想,但它并不实用,也不是很以道场为中心。
    • 我编辑了我的原始答案以提供一种使用 ID 而不是类的方法,并且应该比更改所有这些类少。
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2012-03-20
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多