我正在尝试用C#生成一个主要用于打印的文档。 基本上它是一个表单,我将在其中填写数据库中对象的值。
我过去使用过的代码很难看,很长,很难写,也很难维护。
public class MyDoc : PrintDocument
{
private MyContainer _myObject; //Inherits from list.
private int PageCount()
{
return (int)Math.Ceiling(_myObject.Count / 5f);
}
protected override void OnPrintPage(PrintPageEventArgs e)
{
Graphics g = e.Graphics;
g.PageUnit = GraphicsUnit.Millimeter;
Font bigFont = new Font("Arial", 16, FontStyle.Regular, GraphicsUnit.Point);
Font mediumFont = new Font("Arial", 10, FontStyle.Regular, GraphicsUnit.Point);
Font smallFont = new Font("Arial", 10, FontStyle.Regular, GraphicsUnit.Point);
Font smallNumberFont = new Font("Courier New", 7, FontStyle.Regular, GraphicsUnit.Point);
Pen linePen = new Pen(Brushes.Black, 0.2F);
int rowPosition = 5;
int rowIncrement = 9;
g.DrawString(string.Format("Page {0} of {1}", _pageNumber, PageCount()), smallFont, Brushes.Black, 175, rowPosition);
rowPosition = 15;
g.DrawImage(Image.FromFile("myfile.jpg"), 127, rowPosition);
g.DrawString("Name:", smallFont, Brushes.Black, 3, rowPosition);
g.DrawString(_myObject.Name, smallBoldFont, Brushes.Black, 50, rowPosition);
rowPosition += rowIncrement;
//Sub-Items Table Header
g.DrawRectangle(linePen, 3, rowPosition, 35, 10);
g.DrawRectangle(linePen, 38, rowPosition, 85, 10);
g.DrawRectangle(linePen, 123, rowPosition, 25, 10);
g.DrawRectangle(linePen, 148, rowPosition, 20, 10);
g.DrawRectangle(linePen, 168, rowPosition, 25, 10);
foreach (var i in _myObject)
{
//Draw a grid and write out all details of everything in the collection.
//If there are 2 many, stop and we will create a page 2.
}
//Write Standard page footer
//etc etc.
}
}
这也是一项新要求,我需要将其保存为pdf或图像。
基本上我有3到500行代码来编写一个看起来不错的文档。
我还有更多要做的事情非常相似,我需要一个更好的方法!
我想到了:
XAML - 然后数据绑定我需要填写的属性。不知道如何处理它传播到2页或更多页面。
Word Interop - 我不知道是否可以。它运行在未安装office的Web服务器上。 (如果我需要的话,我可以打包几个dll,但我不确定。)
所以我正在寻找所有优秀人才的想法。
我不想使用外部库,但如果这是最好的方式,它需要是免费的,并且拥有良好的许可:)