需要在打印文件中可视化各种大小的表格和图表
本文关键字:表格 打印 文件 可视化 | 更新日期: 2023-09-27 18:12:21
我确实有一个c#应用程序,可以根据盒子计算存储空间,对于一些本身由几个部分组成的产品。
考虑到零件的体积和重量,计算包括建议在一个盒子里放多少个零件。总体结果表示给定数量的产品所需的箱数。
到目前为止,我将结果放入数据库,然后将其复制到Excel文件中。此外,我正在制作一些图表,以便更好地将数字可视化。
我不满意这个解决方案。然而,我不知道如何以编程方式产生打印输出。我熟悉c#中的标准打印,但是处理各种大小的表格和图表似乎是错误的,对我来说工作量很大。
我必须承认我在这方面缺乏经验,因此我很高兴能听到你对这件事的看法。简短的回答是,这将需要大量的工作。我认为想出解决方案的最重要的一步是退后一步,意识到需要打印的所有东西,以及如果你是一个打印机,你会如何处理它(我知道听起来很奇怪!)
您将想要编写自己的DocumentPaginator
,并在重写的DocumentPaginator.GetPage
方法中为每个页面绘制元素。DocumentPaginator
是打印机用来打印文档的,所以它调用GetPage
方法,你可以向它发送一个带有用户控件的DocumentPage
。你还必须能够做一些事情,比如计算要打印多少页,所以要记住这一点。
由于它们的大小不同,你有几个选项,我可以想到:
- 仅绘制(缩放)表格/图表,使其与正在打印的页面的最大尺寸相同
- 每页绘制1个视觉效果(我建议将它们全部保持横向或纵向,以保持它现在更简单)
基本上,如果您要使用PrintDialog
的对话框让用户选择打印机和打印机首选项,它将为您节省一些工作。如果您不想显示对话框,那么您需要熟悉PrintDialog
, PrintQueue
, XpsDocumentWriter
, PrintTicket
, PrinterCapabilities
, PrintServer
和DocumentPaginator
。
注意:如果您允许用户在多个页面上打印一个控件,请意识到提供"半绘制"控件和/或同时打印"垂直"answers"水平"会增加另一个程度的复杂性。