【问题标题】:How do I do advanced printing from a web application?如何从 Web 应用程序进行高级打印?
【发布时间】:2010-09-18 22:04:30
【问题描述】:

我一直在研究通过 Web 应用程序打印类似报告的数据的选项。一些可行的选项是编写 PDF、Excel XML、将 HTML 转储到 Excel,或使用诸如 activePDF webGrabber 之类的工具。我想问题是,有什么解决方案可以控制浏览器(在我的情况下为 IE)的打印但没有大量的开发时间。虽然我自己没有这方面的经验,但我看到了一些用于生成 PDF 的可怕代码。

我特别在寻找的功能是在没有用户干预的情况下打印横向或纵向。此外,控制基本样式对于将 Web 应用程序的基本外观/感觉转换为打印格式非常重要。

感谢任何建议(尤其是来自经验的建议)。

【问题讨论】:

    标签: asp.net internet-explorer printing


    【解决方案1】:

    正如我在asked about here already 中发现的艰难方法一样,您无法仅在浏览器中获得可靠且准确的打印结果。即使它是一个向您承诺只能使用 IE7 的 Intranet 应用程序,IE8 也将很快推出,然后将允许使用 Firefox,并且您对 CSS 的所有细心微管理都将付诸东流(我听起来是不是很痛苦?)。

    最具前瞻性的解决方案是硬着头皮去生成 PDF。你提到的工具很好。您还应该查看iTextiTextSharp。一旦掌握了窍门,制作 PDF 布局并不比 HTML 和 CSS 更难,而且您会知道结果将在每个人的计算机、每个人的浏览器和每个人的打印机上正确打印。我目前正在使用 iTextSharp(尚未完成,但仍在学习和试验中)。

    我也没有找到可靠的方法来控制页面内的打印选项,因此依靠您的用户从纵向更改为横向或设置或调整页边距或关闭打印页眉和页脚只是没有从长远来看 - 当他们不能(或只是不)遵循指示时,你最终会惹恼他们并为自己制造更多的麻烦。

    “相关问题”侧边栏非常有用。我在网页上看到了这些关于控制打印机的问题(两者的答案都是:“你不能”):

    Programmatically Selecting Landscape Printing

    Printing to a Specific Printer

    【讨论】:

    • 只是一个赞成和评论说 iTextSharp 很棒。我也成功地使用了它。
    • 实际上我发现 Firefox 3 比 IE 做得更好。不过 Firefox 2 确实很糟糕。
    【解决方案2】:

    您还可以查看设置特定的CSS stylesheets 以进行打印。这样做的好处是,您可以获取一个显示给用户的现有网页,稍微更改格式以删除任何花哨的横幅或其他耗墨类型的图像,然后打印出他们在屏幕上看到的内容。

    有些网站会有一个“打印机友好版本”的链接,但是如果用户决定在他们的页面上简单地按 CTRL+P,即使在 HTML 标题中同时引用了显示和打印样式表也将起作用正在开启。

    【讨论】:

    • 这是正确的方法,除非您正在寻找非常准确和可重复的打印布局,例如表格或任何您需要对齐结果的地方。他还询问了用户可选择的纵向或横向,这条路线需要用户调整他们的打印设置,这是一个粗略的想法。
    【解决方案3】:

    我在 C# 应用程序中使用过 iTextSharp,并且很幸运。这需要一些工作,但如果您有图形经验,这一切都很有意义,并且 PDF 看起来非常好(并且打印效果很好)。

    http://itextsharp.sourceforge.net/

    如果您希望生成 PDF 的代码不可怕,请确保编写漂亮的 PDF 代码!例如,编写具有大量内存类的真正模块化代码,您可以组合这些类(如乐高)来表示将在 PDF 上运行的对象。这些对象只需要知道如何将自己绘制成 PDF。

    【讨论】:

      【解决方案4】:

      您可以查看 SQL Server Reporting Services。还有一些第三方报告工具,例如http://www.devexpress.com/Products/NET/Reporting/

      【讨论】:

        【解决方案5】:

        我不确定这是否是您正在寻找的,但为什么不直接使用带有 media=print 样式表的 CSS。设计您的样式表,使打印的表单具有您想要的特征。或者,您可以通过以 CSV 格式下载数据并让用户根据数据构建自己的报告来导出到 Excel。

        对于实际的 PDF 和 Excel,我使用了来自 Aspose.com 的控件。

        【讨论】:

        • 如果数据是表格,导出到 Excel 选项非常好。无论您如何呈现您的数据,其他人都会希望从中进行切片、切块、颜色编码和绘制图表——让他们下载 Excel(或只是 CSV)可以满足所有这些要求。
        • 是的,但我的 CEO 不喜欢这样。他更喜欢在单击“打印”按钮后打印报告。
        【解决方案6】:

        仅适用于 IE:

        http://www.meadroid.com/scriptx/index.asp

        对于那些需要从运行 Microsoft 的 Internet Explorer 浏览器的客户端和服务器计算机打印 html 文档的人来说,绝对控制。

        ScriptX 打印功能的基本子集——页眉和页脚设置、打印方向、页边距粗略控制和浏览器窗口/框架打印命令——免费提供,并可免费分发。高级打印功能不是免费的。启用 ScriptX 的文档需要参考有效的发布许可证才能进行高级打印。

        【讨论】:

          【解决方案7】:

          根据其他人的说法,您永远不会让浏览器按您的意愿打印。从经验来看,印刷媒体类型 CSS 看起来 可以工作,但它实际上永远无法完成工作 - 特别是如果您需要在多个浏览器中工作(因为我包括多个版本的 IE 作为不同的浏览器,我认为所有网站最终都需要。)

          我认为最好的方法是动态地动态构建 PDF。为您的平台找到您喜欢/负担得起的 PDF 包并使用它运行。相信我,你会很高兴的。

          【讨论】:

            【解决方案8】:

            这取决于您的预期客户群是已知的还是未知的。如果您想允许“任何人”生成可打印文档,那么我同意其他人的观点,即 PDF 路线是一个不错的选择。

            我们在使用PDFLib 轻松创建有吸引力的PDF 文档方面取得了巨大成功。使用他们的服务器端模块,您可以让设计师在 InDesign 或 Illustrator 中创建文档,然后以编程方式将动态字段放在顶部(甚至使用 Acrobat 放置字段)

            报告和动态行数据有点棘手,但可以做到。

            对于实际打印 - 如果您在已知用户群的情况下创建应用程序(例如办公环境),您可能会考虑使用标签打印应用程序,例如 BarTender。您可以让 Web 服务器通过 API 调用打印作业,或者让 BarTender 应用程序轮询应用程序以获取新作业。对于您想要在网站上点击“打印”并让打印机开始打印(无需其他用户干预)的 Web 应用程序非常方便,因为服务器实际上正在执行打印,而不是客户端。

            【讨论】:

              【解决方案9】:

              主要是分享我处理这个问题的方式,同时也提供另一种选择……

              我使用的是导出 Excel XML 的第 3 方网格。为了让它对我有用,我使用 XSLT 和一些代码来调整 XSLT 以便注入打印设置。我敢肯定它不如 PDF 强大,但它是一个相当不错的折衷方案,不需要对每页进行太多自定义。

              因此,基本的解决方案是以 Excel XML 格式导出,并为页面方向、缩放以及您可能喜欢的任何其他内容注入标签。您可以从基本的 Excel 工作表开始并保存为 XML,进行所需的调整。然后你阅读源代码并弄清楚 Excel 是如何做到的。我找不到任何有用的文档。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-09-30
                • 2023-03-17
                • 2016-02-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多