C# 如何以编程方式在文档模板上打印信息?

C# 如何以编程方式在文档模板上打印信息?,c#,printing,documents,C#,Printing,Documents,我有一个C#的应用程序,可以打印发票和工资单。客户向我发送了一个模板,用于日常操作。我不知道如何打印到它,尽管我已经知道如何打印一个以编程方式生成的文本文件,其中包含来自access数据库的信息 如何在这种模板上打印信息?(这只是我[在谷歌上找到的][1],是简单发票打印的好选择)文档模板我也有一个徽标。我一直在使用PrintDocument和PrintPreview对象。使用图形类的。当调用print时,您会得到一个“PrintEventArgs e”对象。然后,您可以使用e.Graphics

我有一个C#的应用程序,可以打印发票和工资单。客户向我发送了一个模板,用于日常操作。我不知道如何打印到它,尽管我已经知道如何打印一个以编程方式生成的文本文件,其中包含来自access数据库的信息


如何在这种模板上打印信息?(这只是我[在谷歌上找到的][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文档。在文档内部为文本创建占位符。从代码中,您可以用所需的内容填充占位符

例如:

  • 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);