2009-06-19 17 views
5

Chúng tôi có một ứng dụng lưu trữ tệp cơ bản và chúng tôi cung cấp cho người dùng khả năng in các tệp này. Chúng có thể là .txt, .doc, .pdf, .jpg không có gì lạ mắt. Có cách .NET nào để gửi các tệp này đến máy in mà không cần xử lý chúng nữa không, tức là mở chúng?.NET: Cách in tệp w/o mở chúng

Tôi đã cố gắng tạo ra một quá trình với StartInfo.Verb = "print"

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.FileName = fileName; 
p.StartInfo.Verb = "print" 
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden 

p.Start(); 

Nó vẫn mở tập tin mà tôi không muốn. Ai đó có thể giúp đỡ?

Mọi trợ giúp sẽ được đánh giá cao. Tobi

+0

Bạn có lẽ không muốn từ ngẫu nhiên trong tiêu đề của bạn vì nó sẽ bao hàm các sử dụng các hàm được liên kết với lớp Random. Tôi sẽ rephrase nó như ".NET: Làm thế nào để mở các loại tập tin khác nhau mà không cần mở chúng." hay đại loại thế. –

Trả lời

6

Sự hiểu biết của tôi là hầu hết các ứng dụng sẽ mở (ngay cả một thời gian ngắn) khi bạn in. Thử nhấp chuột phải vào tài liệu MS Word và nhấn in. Bạn sẽ thấy Word mở, in và đóng.

Tuy nhiên, bạn có thể muốn thêm video này vào mã của bạn để giữ cho quá trình ẩn và đóng cửa khi hoàn tất:

p.Start(); 
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
if (p.HasExited == false) 
{ 
    p.WaitForExit(10000); 
} 

p.EnableRaisingEvents = true; 
p.CloseMainWindow(); 
p.Close(); 
2

Bạn đề xuất Windows quản lý in tệp như thế nào mà không gửi tệp tới ứng dụng biết cách xử lý tệp?

Tôi không nghĩ có cách để làm điều này, đơn giản vì Windows không biết pdf là gì (hoặc doc hoặc thậm chí là jpg).

Tôi sợ bạn đang mắc kẹt với những gì bạn có, hoặc bao gồm một thư viện vào ứng dụng của bạn cho mỗi định dạng mà bạn muốn in.

+0

Điểm tốt, cảm ơn. Có cách nào để thực hiện điều này không? – Tobias

+0

Tôi nghĩ bạn sẽ cần một số thư viện để giúp bạn thực hiện và in mã riêng cho từng định dạng ... txt và jpg sẽ không quá tệ với .NET Framework, nhưng ít nhất bạn sẽ cần thư viện cho PDF và doc (x?) – jerryjvl

1

Dưới đây là một lớp học mà in một file Word doc mà không cần mở Word và hiển thị tài liệu. Trong khi tôi thường viết mã trong C#, từ lâu tôi đã học được rằng để mã bất kỳ tự động hóa văn phòng với bất cứ điều gì nhưng VB.NET là hết sức ngớ ngẩn (một số tính năng sắp tới trong C# 4.0 có thể thay đổi điều này).

Đây chỉ dành cho Word, nhưng tài liệu Excel sẽ được thực hiện theo cách tương tự. Đối với tài liệu văn bản, bạn có thể sử dụng công cụ System.Drawing.Printing khá dễ dàng.

Imports System.IO 
Imports System.Windows.Forms 
Imports System.Drawing 

Namespace rp.OfficeHelpers 

    Public Enum PrintStatus 
     Success 
     FileNotFound 
     FailedToOpenDocument 
     FailedToPrintDocument 
    End Enum 

    Public Class Word 

     Public Shared Function PrintDocument(DocumentName As String,_ 
           PrinterName As String) As PrintStatus 
      Dim wordApp As Microsoft.Office.Interop.Word.Application = _ 
          new Microsoft.Office.Interop.Word.Application() 
      Dim wordDoc As Microsoft.Office.Interop.Word.Document 
      Dim copies As Object = 1 
      Dim CurrentPrinter As String = wordApp.ActivePrinter 

      If (Not File.Exists(DocumentName)) 
       Return PrintStatus.FileNotFound  
      End If 

      wordApp.Visible = false 

      wordApp.ActivePrinter = PrinterName 

      ' Document name must be provided as an object, not a string. 
      Try 
       wordDoc = wordApp.Documents.Open(CType(DocumentName, Object)) 
      Catch WordError as System.Exception 
       Return PrintStatus.FailedToOpenDocument 
      End Try 

      Try 
       wordDoc.PrintOut(Copies := copies, Background:= false) 
      Catch WordError as System.Exception 
       Return PrintStatus.FailedToPrintDocument 
      End Try 

      wordApp.ActivePrinter = CurrentPrinter 

      wordApp.Quit(SaveChanges := false) 

      Return PrintStatus.Success   
     End Function 

    End Class 

End Namespace 
+0

Điều này có thể không _show_ tài liệu, nhưng nó chắc chắn sẽ mở nó. Nó cũng sẽ không hoạt động trong một môi trường đa luồng, vì các API Office có nghĩa là cho tự động hóa máy tính để bàn (cho phép các vấn đề cấp phép một mình). Không biết điều đó có quan trọng với OP hay không, nhưng chỉ để có được nó trong hồ sơ. –

+0

Đó là một sự phân biệt tốt, John. Việc tôi sử dụng từ "mở" là cẩu thả. –

+0

Đó là một sự phân biệt tốt, nhưng trong trường hợp tệp Excel, tôi có thể làm điều gì đó tương tự như thế. – h0cc0i

6

Thực sự rất, rất dễ dàng.

Sử dụng System.Drawing.Printing.PrintDocument.

Làm theo ví dụ trong liên kết đó hoặc chỉ sử dụng mã ở đây (mà tôi trích từ thứ gì đó làm tự động in mà tôi đang sử dụng hàng ngày).

ví dụ, để in ra một .jpg (BTW, điều này sẽ không mở bất kỳ ứng dụng chỉnh sửa, nó cuộn vào máy in ở chế độ nền)

public void SetupPrintHandler() 
{ 
    PrintDocument printDoc = new PrintDocument(); 
    printDoc.PrintPage += new PrintPageEventHandler(OnPrintPage); 

    printDoc.Print(); 
} 

private void OnPrintPage(object sender, PrintPageEventArgs args) 
{ 
    using (Image image = Image.FromFile(@"C:\file.jpg")) 
    { 
     Graphics g = args.Graphics; 
     g.DrawImage(image, 0, 0); 
    } 
} 
+0

Das sieht gut aus. Jedenfalls für jpegs. – Tobias

+5

Bản dịch của Tobias: "Điều đó có vẻ tốt. Bất cứ cách nào cho jpegs" –

+0

xin lỗi, vô tình chuyển sang tiếng Đức ... – Tobias

1

tôi phải đồng ý với câu trả lời khác ở chỗ bạn không thể in nó mà không cần mở nó.

Cách duy nhất tôi nghĩ bạn có thể thực hiện việc này là nếu bạn có tệp postscript thẳng và máy in tương thích với postscript được đính kèm trực tiếp.

Trong trường hợp đó, bạn chỉ có thể đổ tệp .ps vào cổng LPT và máy in sẽ xử lý chính xác.

0

Một số máy in hỗ trợ gửi tệp đến máy in bằng dòng lệnh LPR. Chúng tôi có một máy photocopy thực hiện điều này. Điều này thực sự không mở tập tin trên máy tính cả. Nó sẽ gửi tệp đến máy in và máy in diễn giải nó và in nó.

LPR -S <Server Name> -P <Printer Name> -o l "C:\Temp\Sample.PDF" 

Chúng tôi làm điều đó với các tệp PostScript và PDF với thành công lớn. Không biết nếu nó hoạt động cho các loại tệp khác; kiểm tra tài liệu máy in.

Đối với các phiên bản Windows gần đây, bạn cần bật "Màn hình cổng LPR". Control Panel> Programs and Features> Turn Windows Features On hoặc tắt> In và Document Services/Cảng LPR Monitor

TechNet LPR Command Line

Các vấn đề liên quan