当前位置:  开发笔记 > 编程语言 > 正文

单页显示,多页打印问题

如何解决《单页显示,多页打印问题》经验,为你挑选了1个好方法。

网页显示以下内容: -

短发

弗雷德

约翰

然而,当用户(可能是我)打印网页时,我希望多次重复此输出,并在不同的页面上打印略有变化: -

短发

弗雷德

约翰

>page break here<

短发

弗雷德

约翰

>page break here<

短发

弗雷德

约翰

实际上页面内容较大(尽管在标准的A4页面内很好),输出页面的数量大约为20.我更喜欢优雅的跨浏览器解决方案,但最终可以使用适用于Internet Explorer 7的解决方案.

我正在使用带有jQuery的ASP.NET MVC(尽管直接的JavaScript解决方案很好).

编辑: Page-Break-XXX css样式将成为答案的一部分,但我特别感兴趣的是从屏幕版本动态创建打印版本HTML的方法.注意我不想导航到"打印机友好"页面然后打印它.我只想打开浏览器打印按钮并发生魔术.



1> Zhaph - Ben ..:

好的,所以考虑到我的帖子的评论等类似的东西:

为了便于在此处显示,我正在使用页面样式,但您可以轻松使用离页引用.

声明以下样式:







然后,你将需要做一些繁重的工作在你看来得到HTML寻找的东西是这样的:


  • Bob
  • Fred
  • John
  • Bob
  • Fred
  • John
  • Bob
  • Fred
  • John
  • Bob
  • Fred
  • John

现在为"适当的显示方法".

我刚刚开始使用MVC,所以你可能有更好的方法来做到这一点,但是现在我可能会使用像这样的RenderPartial方法:

<%
  /* 
  Using RenderPartial to render a usercontrol,
  we're passing in the Model here as the Model for the control, 
  depends on where you've stored your objects really, then we
  create a new anonymous type containing the properties we want
  to set.
  */

  // Display the main list
  Html.RenderPartial("~/Views/Shared/Controls/UserList.ascx",
      ViewData.Model, 
      new {HighlightUser = null, IsPrintable = false});

  // Loop through highlighting each user
  foreach (var user in ViewData.Model)
  {
    Html.RenderPartial("~/Views/Shared/Controls/UserList.ascx",
      ViewData.Model, 
      new {HighlightUser = user, IsPrintable = true});
  }
%>

然后,您的用户控件可以处理大部分显示,根据需要设置包含div的类(或您使用的任何元素),并根据传入的用户加粗用户 - 正如我所说,可能有更好的方法做部分的东西.

显然,你可能想要完全不同的用户渲染显示和打印 - 我猜你可能会添加相当多的jQuery善良隐藏和显示东西等,你实际上将在打印版本上显示,所以你可能需要两个不同的用户控件,然后可以放弃不传入IsPrintable属性.

而且,就目前而言,由于所有div上的"分页后"风格,这将在末尾打印一个空白页 - 你可能想要注意到你在最后一个div上,并且有一个不同的风格,除非你在最后一页上有你想要的信息.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有