문제

Java에서 특정 IPP 프린터로 인쇄할 수 있는 방법이 있습니까?내가 찾은 모든 샘플 코드와 튜토리얼은 다음과 같은 방법을 사용하여 특정 유형의 문서를 인쇄하는 방법에 중점을 둡니다.

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
             PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
    DocPrintJob pj = pservices[0].createPrintJob();
    try {
        FileInputStream fis = new FileInputStream("test.ps");
        Doc doc = new SimpleDoc(fis, flavor, null);
        pj.print(doc, aset);
    } catch (FileNotFoundException fe) {
    } catch (PrintException e) { 
    }
}

이 조각은 문서를 인쇄할 수 있는 첫 번째 프린터로 인쇄합니다.내 경우에는 URI로 프린터를 조회하고 싶지만 PrintServiceLookup 이것을 지원하지 않는 것 같습니다.나는 PrintServiceAttributeSet, 대신에 PrintRequestAttributeSet, 그리고 PrinterURI 속성이지만 프린터를 반환하지 않습니다.조회 서비스가 해당 URI가 있는 프린터를 찾는 대신 대상 URI를 변경할 수 있는 프린터를 찾고 있는 것 같습니다.

최후의 수단으로, 나는 모든 것을 열거하는 것에 대해 생각했습니다. PrintService에 의해 반환됨 lookupPrintServices, 이지만 URI가 어떤 속성에도 없습니다.프린터 이름이 있지만 URI가 필요합니다.

배경의 경우 내 웹앱은 현재 사용자를 기반으로 바코드를 특정 프린터로 인쇄해야 합니다.각 사용자는 CUPS 서버의 프린터를 가리키는 프린터 URI와 연결됩니다.프린터 URI는 내가 갖고 있는 유일한 정보이며 프린터 이름을 URI 또는 ​​URI의 하위 문자열과 일치하도록 제한할 수 없습니다.

편집하다: 좀 더 명확하게 설명하자면 데이터를 렌더링할 필요가 없으며 블롭을 특정 프린터에 복사하기만 하면 됩니다.내가 알 수 없는 부분은 IPP URI로 프린터를 식별하는 방법입니다.

도움이 되었습니까?

해결책

마침내 다음을 사용하여 이 작업을 수행하는 방법을 찾았습니다. jipsi:

URI printerURI = new URI("ipp://SERVER:631/printers/PRINTER_NAME");
IppPrintService svc = new IppPrintService(printerURI);
InputStream stream = new BufferedInputStream(new FileInputStream("image.epl"));
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc myDoc = new SimpleDoc(stream, flavor, null);
DocPrintJob job = svc.createPrintJob();
job.print(myDoc, null);

특정 프린터로 인쇄하는 것처럼 간단해 보이는 작업을 수행하기 위해 타사 라이브러리를 사용해야 한다는 점에 실망했다는 점을 인정해야 합니다.

업데이트

DR은 다음과 같이 지적합니다. 코멘트 그 집시한테 새로운 게 생겼어 , 그리고 새로운 이름.

컵4J 좋은 대안이지만 이름에서 알 수 있듯이 대상이 CUPS 서버가 아닌 경우 올바르게 작동하지 않을 수 있습니다.저는 Cups4J를 사용하여 Zebra 열전사 프린터로 직접 인쇄하여 좋은 결과를 얻었습니다.

다른 팁

나는 당신이 원하는 방식으로 프린터를 얻을 수 있다고 생각하지 않습니다. (제 생각에는 Java Print 메커니즘이 IPP보다 앞선 것 같습니다.)

그러나 제 기억으로는 인쇄 작업을 로컬로 올바르게 렌더링한 다음 출력 스트림의 바이트를 대상 CUPS 서버에 "수동으로" 전달할 수 있을 것입니다.이것이 당신에게 "충분히 좋은" 것이겠습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top