2016-11-25 69 views
2

期望的结果

我想用它在默认情况下安装了Windows 10的打印机“微软打印到PDF”打印文件到一个新的PDF 。编程提供了一个文件路径作为输入文件“微软打印到PDF”打印机

当您选择此打印机作为默认打印机并在文件上使用上下文菜单并选择打印时,它只会要求保存目录和名称。之后,它立即转换为PDF并保存文件。

只要安装了MS Office,这适用于Word,Excel,PowerPoint文件类型。但也适用于常见的图像类型和正常的文本文件。

我想通过提供默认路径来自动执行此操作。

我已经尝试过

#1已经this related question,但它并没有解决我的具体问题,是相当不完整和不工作。

但我想出了它使用PDF打印机到我的桌面使用的“Hello World”上产生一个新的PDF作为字符串这个C#控制台程序

namespace PrintToPdf_Win10 
{ 
    using System; 
    using System.Drawing; 
    using System.Drawing.Printing; 

    class Program 
    { 
     public static void Main(string[] args) 
     { 
      PrintDocument printDoc = new PrintDocument 
      { 
       PrinterSettings = new PrinterSettings 
       { 
        PrinterName = "Microsoft Print to PDF", 
        PrintToFile = true, 
        PrintFileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/test.pdf" 
       } 
      }; 

      printDoc.PrintPage += printDoc_PrintPage; 
      printDoc.Print(); 
      Console.ReadKey(true); 
     } 

     static void printDoc_PrintPage(object sender, PrintPageEventArgs e) 
     { 
      e.Graphics.DrawString("Hello World", new Font("Arial", 12), Brushes.Black, 50, 50); 
     } 
    } 
} 

问题

如何设置让我们说一个Word文件的内容 - 作为我的printDoc对象的输入内容?

是否有一种通用的方法来设置printDoc通过提供一个文件路径到我的文件我想打印?还是我必须为每一个可能的文件类型的家庭一样创建一个自定义功能:

  • 办公室的文件类型(doc, docx, xls, xlsx, xlsm, ppt, pptx等)
  • 图片的文件类型(png, bmp, jpg
  • 文本文件(txt, rtf, ini

回答

1

这里是简单的解决方案如何打印图像或文字(它可以帮助你像格式,如PNG,BMP,JPG格式,TXT,INI)

 private static StreamReader streamToPrint; 

    static void Main(string[] args) 
    { 
     string printFormat; 
     printFormat = "txt"; 

     try 
     { 
      streamToPrint = new StreamReader(@"D:\TestText.txt"); 

      PrintDocument printDoc = new PrintDocument 
      { 
       PrinterSettings = new PrinterSettings 
       { 
        PrinterName = "Microsoft Print to PDF", 
        PrintToFile = true, 
        PrintFileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/test.pdf" 
       } 
      }; 

      printDoc.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 210, 290); 
      printDoc.PrinterSettings.DefaultPageSettings.Landscape = false; 
      printDoc.PrinterSettings.DefaultPageSettings.Margins.Top = 0; 
      printDoc.PrinterSettings.DefaultPageSettings.Margins.Left = 0; 

      switch (printFormat) 
      { 
       case "jpg": 
        printDoc.PrintPage += printDoc_PrintImage; 
        break; 
       case "txt": 
        printDoc.PrintPage += printDoc_PrintText; 
        break; 
       default: 
        break; 
      } 
      printDoc.Print(); 


     } 
     finally 
     { 
      streamToPrint.Close(); 
     } 

     Console.ReadKey(true); 

    } 

    static void printDoc_PrintImage(object sender, PrintPageEventArgs e) 
    { 
     Image photo = Image.FromFile(@"D:\TestImage.jpg"); 
     Point pPoint = new Point(0, 0); 
     e.Graphics.DrawImage(photo, pPoint); 
    } 

    static void printDoc_PrintText(object sender, PrintPageEventArgs e) 
    { 

     Font printFont; 
     printFont = new Font("Arial", 10); 

     float linesPerPage = 0; 
     // Calculate the number of lines per page. 
     linesPerPage = e.MarginBounds.Height/printFont.GetHeight(e.Graphics); 

     float yPos = 0; 
     int count = 0; 
     float leftMargin = e.MarginBounds.Left; 
     float topMargin = e.MarginBounds.Top; 

     string line = null; 

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

     // If more lines exist, print another page. 
     if (line != null) 
      e.HasMorePages = true; 
     else 
      e.HasMorePages = false; 
    } 

正如你所知道的docx,xl​​sx就像zip文件,你可以解压并获得xml的内容。所以,如果你想打印它们的工作很多

+0

嗨,请告诉我如何在webBrowser控件上打印当前页面? ... doc.PrintPage + = new PrintPageEventHandler(this.pd_PrintPage); ... 私人无效pd_PrintPage(对象o,PrintPageEventArgs E) { WebBrowser1.Navigate时(“https://stackoverflow.com/questions/40812996/programmatically-provide-a-filepath-as-input-file-换微软打印到PDF-p“); } 我有空文档 – user3331122