如何在doc模板上以编程方式打印信息?

时间:2012-10-31 12:06:23

标签: c# printing documents

我在C#中有一个应用程序可以打印发票和工资单。客户向我发送了一个模板,用于日常运营。我不知道如何打印它,虽然我已经知道如何打印一个包含来自访问数据库的信息的编程文本文件。

如何在此类模板上打印信息? (这只是我[在谷歌上找到] [1],是一个简单的发票打印的好候选人。文件模板我也有一个LOGO ..

2 个答案:

答案 0 :(得分:1)

我一直在使用PrintDocument和PrintPreview对象。那就是使用Graphics类。调用print时,会得到一个“PrintEventArgs e”对象。然后你可以使用e.Graphics来访问诸如e.Graphics.DrawString,.DrawImage等内容。

我构建了一个覆盖print的整个打印对象类。所以我有一个细节框,有不同的字体,或徽标,标题,法律术语等。其中每一个都有自己的类。我把它们全部放在一个大清单中,我称之为printThis(List);它将采用每个打印功能和坐标,并使我成为一个表格。

继承对象

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

也许这可以帮助你入门?我还在调整它,并会对其他回复感兴趣。

答案 1 :(得分:1)

通过Word中的邮件合并来完成。使用此技术可以创建Word文档。在文档内部,您可以为文本创建占位符。从代码中,您可以随意填写占位符。

例如:

  1. 在word文档类型ctrl + F9
  2. 右键点击字段和Edit field
  3. 选择MergeField
  4. 在字段名称类型FirstName
  5. 添加代码:
  6. 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);