C# 如何以编程方式在文档模板上打印信息?
我有一个C#的应用程序,可以打印发票和工资单。客户向我发送了一个模板,用于日常操作。我不知道如何打印到它,尽管我已经知道如何打印一个以编程方式生成的文本文件,其中包含来自access数据库的信息C# 如何以编程方式在文档模板上打印信息?,c#,printing,documents,C#,Printing,Documents,我有一个C#的应用程序,可以打印发票和工资单。客户向我发送了一个模板,用于日常操作。我不知道如何打印到它,尽管我已经知道如何打印一个以编程方式生成的文本文件,其中包含来自access数据库的信息 如何在这种模板上打印信息?(这只是我[在谷歌上找到的][1],是简单发票打印的好选择)文档模板我也有一个徽标。我一直在使用PrintDocument和PrintPreview对象。使用图形类的。当调用print时,您会得到一个“PrintEventArgs e”对象。然后,您可以使用e.Graphics
如何在这种模板上打印信息?(这只是我[在谷歌上找到的][1],是简单发票打印的好选择)文档模板我也有一个徽标。我一直在使用PrintDocument和PrintPreview对象。使用图形类的。当调用print时,您会得到一个“PrintEventArgs e”对象。然后,您可以使用e.Graphics访问诸如e.Graphics.DrawString、.DrawImage等内容 我构建了一个完整的print对象类来覆盖print。所以我有一个细节框,它有不同的字体,或者一个标志,一个标题,一个专业术语等等。每一个都有它自己的类。我把它们都放在一个大列表中,我称之为printThis(列表);它将获取每个打印函数和坐标,并生成一个表单 继承对象
class formHdr : printObject
{
private string headerText;
public formHdr(string hText)
: base()
{
headerText = hText;
}
public override void printThis(System.Drawing.Printing.PrintPageEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString(headerText, FRHEADER, Brushes.Black, BaseX, BaseY);
}
}
基类
abstract class printObject
{
protected Font FTHEADER;
protected Font NRML;
protected Font DETAIL;
protected Font FRHEADER;
protected Font DETHEADER;
protected Font LEGAL;
protected Font LEGAL2;
public int baseX, baseY;
public int boxSX, boxSY;
public printObject()
{
baseX = 0;
baseY = 0;
boxSX = 0;
boxSY = 0;
FTHEADER = new Font("Arial", 12, FontStyle.Bold);
NRML = new Font("Calibri", 10);
DETAIL = new Font("Consolas", 8);
FRHEADER = new Font("Arial", 16, FontStyle.Bold);
DETHEADER = new Font("Calibri", 10, FontStyle.Bold);
LEGAL = new Font("Arial", 8);
LEGAL2 = new Font("Arial", 10);
}
public virtual void printThis(PrintPageEventArgs e) { }
对象创建
mainHead = new formHdr("Bill of Lading/Weigh slip Original");
mainHead.BaseX = 225;
mainHead.BaseY = 20;
bol.Add(mainHead);
也许这能帮你开始?我仍在调整它,并将对其他响应感兴趣。通过邮件在Word中进行合并。使用此技术可以创建Word文档。在文档内部为文本创建占位符。从代码中,您可以用所需的内容填充占位符 例如:
ctrl
+F9
MergeField
FirstName
您所说的“文档模板”是什么意思?一种文档格式的文件,其中应打印信息,使其看起来像某种模板。。现在我想以编程方式重新创建同一个模板并打印它“bol.Add(mainHead)”是什么?那是你自己上的课吗?对不起。bol是包含所有打印对象的列表的名称。因此,当打印事件触发时。它循环遍历该列表中的所有PrintObject。将它们打印到页面,然后发送到打印机。好的。。我有点理解这一点。BaseX和BaseY的用途是什么?XY参照图形对象的左上角点。如果你想到一个句子或图片周围的边界框,它在纸上的XY坐标(像素)上。如果我想向下移动,我会增加Y或者向右移动,我会增加X。这就是文本显示的地方。你知道我如何在这里插入徽标吗?水平线呢?那么这里会发生什么呢?我计划打印的文本是否会打印在文档上?我已经包含了实际的文本,这些文本将包含在您创建Word文档的发票中。在文档内部为文本创建占位符。从代码中,你可以用你想要的任何东西填充占位符。哦!好的,我明白了,非常感谢!因此,我只需在代码中的Word文档中指定占位符,以便将信息放置在占位符正确的位置?有固定的座位吗?或者我只是扫描整个文档,寻找我创建的占位符。替换它?我所说的“设置”是指一个“预定义”代码来处理占位符。填写占位符的整个代码都在答案中。在示例代码中,我展示了如何创建名为
FirstName
的占位符。然后我进行sql查询,其中一列将被称为FirstName
。这就是它识别文本放置位置的方式。当然,您可以创建多个占位符,并将文本放置在所需的位置。
var document = new Document("document.docx");
var sqlCommand = "SELECT TOP 1 userName FirstName FROM Users";
var table = GetTable(sqlCommand, String.Empty);
document.MailMerge.Execute(table);