Tôi có một tệp hoạt động tốt nếu tôi sử dụng lệnh lp filename
.In qua ly bằng cách sử dụng javax.print
Tệp là tệp ESC/P cho máy in tác động biên nhận. Điều đó có trình điều khiển CUPS gốc của Linux và tất cả đều hoạt động.
Tôi đang cố gắng sử dụng API javax.print
để tôi có thể kiểm soát tốt hơn việc in ấn và hy vọng giữ cho nền tảng tương thích, mặc dù Linux là nền tảng mục tiêu.
Tôi đã thử mọi sự kết hợp DocFlavor đối với loài người và tất cả các loại kiểu dữ liệu (InputStream
, byte[]
, Reader
vv)
Nó hoặc là chỉ cần bỏ qua lệnh print()
tất cả cùng nhau hay chỉ là lật mặt một tờ giấy trắng của giấy. Chạy lp filename
in nó hoàn hảo, vậy làm thế nào để tôi nhận được javax.print
để chỉ làm tương đương chức năng của lp filename
?
Tôi không được sử dụng javax.print
Tôi có thể sử dụng "thứ" khác và có thể bắt đầu điều tra cups4J nhưng có vẻ như nó sẽ giới hạn tôi chỉ với Linux/* nix. dung dịch.
Tôi chỉ có thể phát hành lệnh hệ thống lp
trên tệp nhưng, tôi cần kiểm soát chi tiết hơn. Đây không phải là biên nhận mà chúng tôi đang in, chúng là vé và vé có giá từ 5 đến 5 ngàn đô la. Hiện tại, nếu chúng tôi phát hiện sự cố in, chúng tôi sẽ hủy giao dịch và nếu bất kỳ nội dung nào được in, không hợp lệ, chúng tôi sẽ không in lại bản in nhẹ và phần lớn thời gian in bản sao mới nếu khách hàng mất bản sao của mình. Lý do để làm điều này là chúng tôi đang thay đổi hệ thống POS từ Windows sang Linux và máy in truy cập trực tiếp qua các cổng nối tiếp sang CUPS được quản lý qua USB. Đây là mã của tôi không hoạt động. Bất kỳ trợ giúp được đánh giá cao.
try {
// Find the default service
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// Create the print job
DocPrintJob job = service.createPrintJob();
InputStream in = new FileInputStream("/home/bart/real.escp");
Doc docNew = new SimpleDoc(in,flavor,null);
// Monitor print job events; for the implementation of PrintJobWatcher,
// see Determining When a Print Job Has Finished
PrintJobWatcher pjDone = new PrintJobWatcher(job);
// Print it
job.print(docNew, null);
// Wait for the print job to be done
pjDone.waitForDone();
// It is now safe to close the input stream
in.close();
} catch (PrintException e) {
} catch (IOException e) {
}
In ấn từ Java trên Linux là dicey lúc tốt nhất. Tôi đã thực hiện để bắn phá ra các dòng lệnh với một lệnh lpr để làm một số in ấn của tôi. Một tùy chọn có thể là để xem liệu bạn có thể chuyển đổi tệp của mình sang định dạng mà Java hiểu, như PDF và sau đó sử dụng javax.print trên đó hay không. – Mitch
Đó là vấn đề có thể có một trình chuyển đổi esc/p linux nhưng tại sao phải bận tâm khi lệnh lp in tốt, có vẻ như yêu cầu rắc rối để đi từ ESC/P (có thể được cấp trực tiếp cho máy in) -> PDF (để thực hiện Java Happy) -> ESC/P (thông qua trình điều khiển). Chúng tôi đang tạo ra các tập tin ESC/P. Dù sao hoạt động tốt với Cups4J, mất khoảng 15 phút để thực hiện. Đoán tôi sẽ sử dụng cups4J và đối phó với bất kỳ vấn đề hệ điều hành/in ấn khác khi chúng bật lên. –