可滚动div的内容如何打印

3
我有一个合同,它在可滚动的 div 中显示。我想给我的用户打印可滚动 div 的内容的能力。这个 div 大约有三页长。我在这个应用程序中使用 bootstrap,并尝试使用“visible-print”css 类。当我现在测试打印功能时,在 chrome 打印预览屏幕上只显示了可滚动 div 顶部的内容,它还带有垂直滚动条并截断了剩余内容。

CSS:

#scrollableDiv{
  width: 100%;
  height: 700px;
  overflow-y: scroll;
}

@media print,
 (-o-min-device-pixel-ratio: 5/4),
 (-webkit-min-device-pixel-ratio: 1.25),
 (min-resolution: 120dpi) {
}

@media print {
* {
    background: transparent !important;
    color: #000 !important; /* Black prints faster: h5bp.com/s */
    box-shadow: none !important;
    text-shadow: none !important;
  }

  thead {
    display: table-header-group; /* h5bp.com/t */
  }

  tr,
  img {
    page-break-inside: avoid;
  }

  img {
    max-width: 100% !important;
  }

  @page {
    margin: 0.5cm;
  }

  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }

  h2,
  h3 {
    page-break-after: avoid;
  }

  .visible-print {
    display: block !important;
    overflow: visible;
  }
}

HTML:

<div id="scrollableDiv" class="margin-bottom-20">
    <div class="visible-print">
        <!-- CONTRACT CONTENTS HERE -->
    </div>
</div>

“#scrollabeDiv” 是唯一需要打印的内容吗?您是否考虑过在一个空白窗口中打开相同的内容并使用“window.print()”,以避免打印页面的其余部分?这对您有用吗? - Gui Imamura
那是一个可能性。有没有一种方法可以在不牺牲用户体验的情况下实现呢?我不确定用户会不会感到不便,因为他们需要打印按钮来将合同呈现在另一页/标签上。 - Questifer
我觉得在新窗口打开可打印内容是可以的。您可以通过在目标上运行 window.print() 来触发打印命令,这样用户就不必实际点击打印按钮了。请尝试 @Sun_Sparxz 给出的答案,并告诉我们是否有效。 - Gui Imamura
4个回答

3

试一试

  @media print {
                 #scrollableDiv{
                  width: 100%;
                  height: 100%;
                 }
               .visible-print{
                 display: block;
                 width: auto;
                 height: auto;
                 overflow: visible;  
                }
               }

在Chrome中,打印预览仍然只呈现带有侧边滚动条的div的第一页。 - Questifer
我尝试了一下,结果非常相似。页面上显示了几行文本。我仍然很困惑。今晚我会继续解决这个问题并报告结果。 - Questifer
我有大约20个样式表,我逐个检查以确定哪一个导致了错误。我发现一个应该被删除的旧样式表导致了错误。然后我添加了你的@media print代码,它完美地工作了。谢谢! - Questifer

1
Sun_Sparxz的回答已经足够稳定,但我想补充一个你可能会遇到的棘手问题...
几个小时后,我意识到我的body标签中有一个'position:fixed',这阻止了上述解决方案的工作。确保你删除它,否则你的打印逻辑可能无法工作。一旦我这样做了,media标签就像预期的那样运作了。

1

0
这个问题困扰了我几个小时:确保在CSS指令中,在@media print部分重新定义它们之前,#scrollableDiv和.visible-print已经被定义,否则它将无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接