2008-12-16 34 views
11

Cách tốt nhất để in nội dung từ C# /. Net là gì?Cách tốt nhất để in từ C#/.net?

Câu hỏi liên quan đến các trang đơn lẻ cũng như báo cáo chứa nhiều trang.

Thật tuyệt vời khi nhận được danh sách các thư viện in phổ biến nhất có chứa các tính năng chính và khung công tác của mỗi người trong số họ.

[Cập nhật] cho các ứng dụng khách sổ chuẩn (hoặc máy chủ), không dành cho các ứng dụng web.

+0

bao nhiêu đã bạn đã nhìn vào không gian tên System.Drawing.Printing? –

+1

Tôi đã xem xét một vài cách in ấn, nhưng trước khi đi sâu vào một trong những điều tôi muốn biết nhiều hơn - đó là một sự lãng phí thời gian để chọn sai cách để tìm hiểu thêm. – Sam

Trả lời

9

Đối với báo cáo, tôi sử dụng điều khiển RDLC.

Đối với mọi thứ khác, tôi sử dụng các đối tượng in cố hữu trong .NET.

Chỉnh sửa Các đối tượng in cố hữu được tìm thấy trong không gian tên System.Drawing.Printing. Khi bạn sử dụng PrintDialog hoặc PrintPreviewDialog trong một ứng dụng WinForms (hoặc WPF), đó là những đối tượng mà bạn đang chuyển quyền kiểm soát.

Khái niệm cơ bản là bạn đang vẽ tới máy in. Hình thức đơn giản của việc này là:

Sub MyMethod() 
    Dim x as New PrintDocument 
    AddHandler x.PrintPage, AddressOf printDoc_PrintPage 
    x.Print 
End Sub 
Sub printDoc_PrintPage(sender as Object, e as PrintPageEventArgs) 
     Dim textToPrint as String= ".NET Printing is easy" 
     dim printFont as new Font("Courier New", 12) 
     dim leftMargin as int= e.MarginBounds.Left 
     dim topMargin as int = e.MarginBounds.Top 
     e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, leftMargin, topMargin) 
End Sub 

gì đang xảy ra ở đây là khi đối tượng của tôi (x) được gửi lệnh in, nó làm tăng "IN TRANG" sự kiện (được thiết kế để in 1 trang tại một thời điểm). Sự kiện này sau đó sử dụng thuộc tính Đồ họa của PrintPageEventArgs để vẽ chuỗi có liên quan trực tiếp đến bộ đệm in.

Here's one tutorial và tìm kiếm nhanh trên Google cho "Hướng dẫn in .NET" trả lại một chút hơn 200K kết quả.

+0

Bạn có thể mở rộng trên các đối tượng in cố hữu hơn một chút không? – Tigraine

+0

Vâng, đó sẽ là tuyệt vời !! – Sam

0

Phụ thuộc rất nhiều vào các yêu cầu của đơn đăng ký của bạn.

Mặc dù nó không phải là công cụ hoàn hảo (thực sự xa từ đó), Crystal Reports có xu hướng là một lựa chọn tốt. Nó cung cấp cho bạn tùy chọn nhận dữ liệu trực tiếp từ Cơ sở dữ liệu hoặc nếu bạn đã có danh sách đối tượng bạn muốn in, bạn có thể chuyển chúng vào tài liệu và liên kết thuộc tính đối tượng với nhãn của báo cáo.

Nhưng hãy cung cấp cho chúng tôi thêm một số thông tin về những gì bạn đang cố gắng làm để bạn có thể nhận được các đề xuất tốt hơn.

+0

Ồ, tôi có rất nhiều thứ in ấn đến tôi: các trang đơn, báo cáo dài, nhãn dính, đặt tên cho nó, tôi sẽ phải in nó (sớm). Vì vậy, tôi muốn có được một cái nhìn tổng quan về các giải pháp in ấn chuyên nghiệp và contra. – Sam

1

Chúng tôi đã sử dụng một tập hợp các DLL của bên thứ ba từ PDFSharp người lần lượt sử dụng các tệp DLL từ MigraDoc. Tôi không bí mật với tất cả những lý do mà chúng tôi đã đi theo hướng đó (quyết định đã được thực hiện bởi một nhà phát triển cao cấp), nhưng tôi có thể nói với bạn rằng:

  • Nó có vẻ là trong hoạt động phát triển.
  • Nó có hầu hết các tính năng chúng tôi cần.
  • Mã nguồn khả dụng. Mặc dù nó đã sử dụng một số mẫu và các quy ước mà tôi chưa từng thấy trước đây, khi tôi đã truy cập vào số , thật dễ dàng để thực hiện các thay đổi . Tôi đã thêm hỗ trợ để sử dụng System.Drawing.Image trực tiếp thay vì lưu tệp.
  • Đó là không được ghi lại đầy đủ hoặc nội bộ hoặc bên ngoài.
1

Tải nội dung, bạn nói. Hum, có vẻ như bạn nên sử dụng một giải pháp với một nhà thiết kế, vì vậy bạn nên nhìn vào Crystal Reports và RDLC. Ngoài ra còn có các giải pháp dịch vụ báo cáo, nhưng trong trường hợp đó bạn sẽ cần một máy chủ với SQL Server.

Báo cáo Crystal dường như cung cấp cho bạn nhiều lựa chọn hơn, nhưng cần học hỏi nhiều hơn RDLC.

Tôi sẽ không khuyên bạn nên tạo chúng trong HTML + CSS, vì những hạn chế và công việc phụ bạn sẽ phải ném vào nó.

1

Nếu bạn có thể xây dựng đầu ra của mình dưới dạng FlowDocument, bạn có thể biến nó thành XPS dễ dàng để có được phiên bản "điện tử" và in ấn XPS.

2

»Mẫu Mã để hiển thị căn bản về in ấn trong Windows Forms Ứng dụng:

using System.Drawing.Printing; 

    PrintDocument printDoc = new PrintDocument(); 
    printDoc.DefaultPageSettings.Landscape = true; 
    printDoc.DefaultPageSettings.Margins.Left = 100; //100 = 1 inch = 2.54 cm 
    printDoc.DocumentName = "My Document Name"; //this can affect name of output PDF file if printer is a PDF printer 
    //printDoc.PrinterSettings.PrinterName = "CutePDF"; 
    printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage); 

    PrintDialog printDialog = new PrintDialog(); 
    printDialog.Document = printDoc; //Document property must be set before ShowDialog() 

    DialogResult dialogResult = printDialog.ShowDialog(); 
    if (dialogResult == DialogResult.OK) 
    { 
     printDoc.Print(); //start the print 
    } 

    void printDoc_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     string textToPrint = ".NET Printing is easy"; 
     Font font = new Font("Courier New", 12); 
     // e.PageBounds is total page size (does not consider margins) 
     // e.MarginBounds is the portion of page inside margins 
     int x1 = e.MarginBounds.Left; 
     int y1 = e.MarginBounds.Top; 
     int w = e.MarginBounds.Width; 
     int h = e.MarginBounds.Height; 

     g.DrawRectangle(Pens.Red, x1, y1, w, h); //draw a rectangle around the margins of the page, also we can use: g.DrawRectangle(Pens.Red, e.MarginBounds) 
     g.DrawString(textToPrint, font, Brushes.Black, x1, y1); 

     e.HasMorePages = false; //set to true to continue printing next page 
    } 
+1

Cảm ơn rất nhiều, công trình này hoàn hảo: D – Vladivarius

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