2013-07-22 32 views
6

Đối với một hệ thống reciept đơn giản, tôi cần xác định bằng cách nào đó một tài liệu mẫu với định dạng đơn giản, điền nó với dữ liệu và in trên máy in windows tiêu chuẩn. Nó phải làm việc trên một cửa sổ dịch vụ. Tôi nên sử dụng công nghệ nào nhất?In bằng Template

EDIT:

Tôi đã thử sử dụng Biểu mẫu PDF. Tôi đã định nghĩa một vài hộp văn bản và điền chúng với iTextSharp. Nó hoạt động cho đến thời điểm tôi phải in chúng, điều này thực sự khó khăn, vì bạn phải sử dụng trực tiếp phần mềm đọc thực thi trực tiếp.

Một giải pháp thay thế có vẻ được tích hợp tốt hơn vào .NET có vẻ là sử dụng XPS. XPS có cung cấp chức năng tương tự không?

+3

In từ dịch vụ là Ý tưởng thực sự tồi. Trình điều khiển máy in được tạo cho các ứng dụng dành cho máy tính để bàn. Họ sẽ cho bạn biết rằng hộp mực là một nửa trống rỗng và nơi để đặt hàng một hộp mực khác. Nếu điều đó xảy ra trong một dịch vụ thì nó sẽ không in và bạn không biết tại sao. Một mẫu có thể là bất cứ điều gì, một bitmap sẽ làm.Rất nhiều và rất nhiều chương trình tạo báo cáo với các tính năng điền sẵn trong đó, bạn sẽ cần tự đi mua sắm. –

+0

Tôi viết trình điều khiển máy in để kiếm sống và tôi phải đồng ý với Hans Passant. In ấn từ một cửa sổ dịch vụ gần như không bao giờ là một ý tưởng tốt. – Jon

Trả lời

-1

Chúng tôi kết thúc bằng cách sử dụng định dạng của dòng EPSON TM-Intelligent.

1

Có nhiều cách khác nhau;

Tạo tệp văn bản và tìm kiếm và thay thế từ khóa bằng các giá trị thích hợp. Lưu/In cái này.

Tạo tệp html và tìm kiếm và thay thế từ khóa bằng các giá trị thích hợp. Lưu/In cái này.

Tạo tệp PDF có các trường được tạo sẵn và thay thế chúng bằng các giá trị phù hợp. Lưu/In cái này.

Và hơn thế nữa ...

3

Tạo mẫu biên nhận của riêng bạn bằng html hoặc văn bản thuần túy.

Ví dụ sử dụng html:

HTML

<html> 
    <head> 
    <title>Receipt</title> 
    </head> 
    <body> 
    <div>The price: <%Price%></div> 
    <div>The time: <%Time%></div> 
    <div>Payment Method: <%PaymentMethod%></div> 
    </body> 
</html> 

C#

static void Main(string[] args) 
    { 
     CreateReceipt("€1.50", "09.30", "Cash"); 
    } 

    private static void CreateReceipt(string price, string time, string paymentMethod) 
    { 
     string bodyFile; 
     string template = System.IO.Directory.GetCurrentDirectory() + "\\template.html"; 
     using (StreamReader reader = new StreamReader(template)) 
     { 
      bodyFile = reader.ReadToEnd(); 
      bodyFile = bodyFile.Replace("<%Price%>", price); 
      bodyFile = bodyFile.Replace("<%Time%>", time); 
      bodyFile = bodyFile.Replace("<%PaymentMethod%>", paymentMethod); 
     } 
     FileStream fs = File.OpenWrite(System.IO.Directory.GetCurrentDirectory() + "\\receipt.html"); 
     StreamWriter writer = new StreamWriter(fs, Encoding.UTF8); 
     writer.Write(bodyFile); 
     writer.Close(); 
    } 
} 
+0

Tôi cũng không thực sự muốn viết những thứ đó. Ngoài ra, tôi sẽ in nó sau đó như thế nào? Có cách nào để sử dụng một cái gì đó như Razor và sau đó in nó ra? – Philippe

+0

Xem chỉnh sửa. Bây giờ, phương thức này sẽ sử dụng template.html để tạo một tệp mới có tên là receipt.html với bất kỳ tham số nào được truyền cho nó. Tôi không quen với Razor. –

1

Bạn có thể thử ActiveReports

Link to ComponentOne

Đó không phải là miễn phí .. nhưng nó hoạt động để in những thứ như bạn muốn. Chỉ cần tạo Mẫu và nhúng chúng vào mã của bạn.