【问题标题】:Printing File by using C#使用 C# 打印文件
【发布时间】:2013-08-21 09:06:23
【问题描述】:

我正在开发 C# 应用程序。在这个 C# 程序中,我想添加打印按钮,以便用户可以使用此按钮打印他们想要的任何文档。我设法通过阅读它来打印一个txt文件。但是如果我选择一个 pdf 文件,程序会在结果中打印一些错误代码。

private void printButton_Click(object sender, EventArgs e)
{
    try
    {
        streamToPrint = new StreamReader("C:\\test.txt");
        try
        {
            printFont = new Font("Arial", 10);
            PrintDocument pd = new PrintDocument();
            pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
            pd.Print();
        }
        finally
        {
            streamToPrint.Close();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}


private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
    float linesPerPage = 0;
    float yPos = 0;
    int count = 0;
    float leftMargin = ev.MarginBounds.Left;
    float topMargin = ev.MarginBounds.Top;
    string line = null;

    linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);

    while (count < linesPerPage && ((line = streamToPrint.ReadLine()) != null))
    {
        yPos = topMargin + (count *
           printFont.GetHeight(ev.Graphics));
        ev.Graphics.DrawString(line, printFont, Brushes.Black,
           leftMargin, yPos, new StringFormat());
        count++;
    }

    if (line != null)
        ev.HasMorePages = true;
    else
        ev.HasMorePages = false;
}

除了这些,还有什么方法可以在文档上打开 ctrl-p 菜单(打印选项)?然后用户可以选择他/她想要的任何打印机。

感谢您的帮助。

我的问候...

【问题讨论】:

    标签: c# pdf printing ms-word


    【解决方案1】:

    您不能逐行读取 pdf 文件。 PDF 是二进制格式,而不是文本格式。要清除这一点,请尝试在记事本(或您喜欢的文本编辑器)中打开 PDF 文件。无论如何,您都可以使用众多可用库之一来完成此操作,或者编写自己的 PDF 解释器。我会推荐可用的库 iTextSharp (http://itextpdf.com/)

    【讨论】:

    • 感谢您的回复。是的,我意识到你是对的。有什么方法可以打印文件而不用 C# 逐行读取?
    • 一个简单的方法是使用 AcrobatReader 来完成这项工作。您可以通过以下 shell 命令静默打印文件:AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ] 或使用此 shell 命令 AcroRd32.exe /P PdfFile 显示打印对话框。但更好的方法是使用众多可用的 .Net PDF 库之一并使用它们的打印功能。
    • 谢谢,它有帮助。但是当我打印 PDF 文件时,我可以做到这一点。但是其他文件如 jpeg、word 等呢?将它们转换为 pdf 是另一种解决方案,但没有更简单的方法吗?
    • 没有简单的方法可以打印每种文档格式。我假设您使用不同的应用程序打开大多数这些格式。所有这些应用程序都实现了读取文件和打印文件的不同方式。你也必须这样做。打印常见的图像格式不是什么大问题,因为您可以使用 .Nets 内置功能。可以使用 Microsoft 的 Interop 组件打印 Word 文档。打印图片stackoverflow.com/questions/5750659/print-images-c-net打印Word文档:stackoverflow.com/questions/878302/…
    • 那我要努力了。将itextpdf库代码分配给pdf文件,将word打印机分配给word文件等。感谢您的回答!
    【解决方案2】:

    有一个PrintDialog 类应该提供这些选项。但我不确定这会让你走得更远,因为 Romano 提出了没有 iTextSharp 或 PDFSharp 之类的库你无法阅读 PDF 的观点。

    【讨论】:

    • 感谢您的回复!现在检查 PrintDialog。
    猜你喜欢
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多