从表单文本框打印文档副本

时间:2018-12-31 14:12:51

标签: c# winforms

有没有一种方法可以打印C#Windows窗体应用程序中文本框中给出的份数?

使用我当前的代码,可以按要求的打印数量打印文档,但是在第一次打印后,会出现一个对话框,指出该文档已经打开,我必须打开一个副本。当我打开此副本时,文档会再次打印,但前提是我同意打开副本。有没有一种方法可以多次打印文档,而不必每次都获得文档副本的对话框?

正确填写表格后,我希望将其存储在硬盘驱动器上,并希望它在以前的表格上打印文本框中给出的数字。来自此文本框的值存储在变量intAantalPoorten中。

非常感谢!

关于伯特

CreateWordDocument(@"N:\De wienes\Productieformulieren\Sjablonen\Poortblad.docx", @"N:\De wienes\Productieformulieren\Producties poortbladen\Poortblad " + txtKlantnaam.Text + "-" + txtReferentie.Text + ".docx");

ProcessStartInfo info = new ProcessStartInfo(@"N:\De wienes\Productieformulieren\Producties poortbladen\Poortblad " + txtKlantnaam.Text + "-" + txtReferentie.Text + ".docx");


            for (intAAntalPrints = 0; intAAntalPrints <= intAantalPoorten; intAAntalPrints++)

            {

                info.Verb = "Print";
                info.CreateNoWindow = true;
                info.WindowStyle = ProcessWindowStyle.Hidden;
                Process.Start(info); 

            }

1 个答案:

答案 0 :(得分:0)

您可能没有使用最佳的编程模型。您正在执行的操作是依靠Windows Shell打开文档并调用已注册的动词(由本地注册表中的Word定义)。这是完成工作的最原始,功能最差的方法。例如,无法将您要打印的打印机更改为...,或者要更改多少份副本或哪些页面等。

相反,Word(和所有Office应用程序)提供了一个丰富的编程模型。您可以打开文档,并指定所需的份数进行打印。

要访问此编程模型,您需要引用Word的.COM互操作程序集,即:

Word interop assembly

...以及Office Core互操作程序集:

Office Core interop assembly

然后,这只是驱动Word完成您想要的事情的问题。例如:

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
  public partial class Form1: Form
  {
    public Form1( )
    {
      InitializeComponent( );
    }

    private void button1_Click( object sender, EventArgs e )
    {
      //--> assumes the textBox1.Text contains the file to open...
      var app = new Microsoft.Office.Interop.Word.Application( );
      var doc = app.Documents.Open( textBox1.Text, ReadOnly: true );
      doc.PrintOut( Copies: 1 );
      doc.Close( );
      app.Quit( );

    }
  }
}

请注意,这要求将Word安装在本地计算机上。有关更多信息,请查看the word object model