首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Internet Explorer中打印由Angular-nvD3呈现的图表

在Internet Explorer中打印由Angular-nvD3呈现的图表
EN

Stack Overflow用户
提问于 2018-01-10 05:35:01
回答 1查看 553关注 0票数 1

我正在使用Bootstrap v3.2.0来布置使用Angular-nvD3创建的3个图表。我正在尝试渲染页面以进行打印。我在@media打印规则中修改了一些CSS。在Chrome中,一切都可以正常呈现,但在IE 11中,图表无法调整打印大小。我尝试在JavaScript中触发窗口大小调整事件,它会执行,但没有任何区别。

我的div看起来像这样:

代码语言:javascript
复制
<div class="container">
    <div class="row">
        <div class="col-md-3 col-sm-3 col-xs-3">
            <div ng-controller="BusinessPieChartController">
                <h4>Business Allotment</h4>
                <nvd3 options="options" data="data"></nvd3>
            </div>
            <div ng-controller="LocationTypePieChartController">
                <h4>Location Types</h4>
                <nvd3 options="options" data="data"></nvd3>
            </div>
        </div>
        <div class="col-md-9 col-sm-9 col-xs-9">
            <h4>Growth Over Time</h4>
            <div ng-controller="HistoryLineAreaGraphController">
                <nvd3 options="options" data="data"></nvd3>
            </div>
        </div>
    </div>
</div>

以下是我试图阻止的JavaScript代码。

代码语言:javascript
复制
var printTriggered = false;

var beforePrint = function () {
    if (printTriggered) {
        return
    }

    printTriggered = true;

    setTimeout(function () {
        printTriggered = false;    
    }, 2000)

    var event
    if (typeof Event === 'function') {
        event = new Event('resize')
    } else {
        event = document.createEvent('Event')
        event.initEvent('resize', true, true)
    }
    window.dispatchEvent(event)
};

if (window.matchMedia) {
    var mediaQueryList = window.matchMedia('print');
    mediaQueryList.addListener(function (mql) {
        if (mql.matches) {
            beforePrint();
        } 
    });
}

window.onbeforeprint = beforePrint;

这是我的图形在IE11的打印预览中的外观。

EN

回答 1

Stack Overflow用户

发布于 2018-07-12 17:00:57

我分享了这个确切的问题,尽管只有一个图表。最终为图形使用了重复的元素。

首先,呈现一个宽度与纸张大小相匹配的图表,一旦完成,它将被隐藏,而另一个图表将显示出来:

代码语言:javascript
复制
<div class="graph-for-print"
     ng-class="{rendered: vm.graphForPrintRendered}">
  <nvd3 options="vm.graphOptions"
        data="vm.graphData"></nvd3>
</div>
<div class="hidden-print"
     ng-if="vm.graphForPrintRendered">
  <nvd3 options="vm.graphOptions"
        data="vm.graphData"></nvd3>
</div>

和css

代码语言:javascript
复制
.graph-for-print {
  max-width: 680px;
}
@media screen {
  .graph-for-print.rendered {
    overflow: hidden;
    height: 0;
  }
}

vm.graphForPrintRendered$timeout之后执行true,以确保所有摘要周期都已完成,并且浏览器有时间绘制图表。

不是很漂亮,但很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48176988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档