2011-03-10 3 views
2

특정 인쇄 서비스에 일반 텍스트 (아마도 cp1252 또는 Windows가 사용하는 모든 것)를 인쇄하려고합니다. 쉽지, 그렇지? 그러나 성공은 사용하는 프린터 유형에 크게 의존하는 것 같습니다.javax.print API로 일반 텍스트 인쇄

세 가지 프린터를 사용할 수 있습니다. 하나는 HP LaserJet (일반 프린터)이고, 하나는 무료 PDF (가상 PDF 프린터)이고 다른 하나는 Tobit Faxware (가상 팩스 서비스 - 이것은 내가 인쇄하고 싶은 것입니다.)입니다.

지원되는 doc 형식에 따르면 none은 "text/plain"또는 기타 "text"형식을 제공합니다.

DocFlavor.URL.AUTOSENSE을 사용하여 인쇄 할 때 HP 프린터는 텍스트를 올바르게 인쇄하지만 다른 두 개는 자동으로 실패합니다. "텍스트"DocFlavors는 지원되지 않기 때문에 프린터에 "자동 감지"이외의 힌트를 더 이상 제공 할 수 없습니다.

Windows 메모장을 사용하여 파일을 인쇄 할 때 세 프린터 모두에서 정상적으로 작동합니다. 차이점은 메모장에서 "NT EMF 1.008"을 사용하는 동안 "RAW"데이터를 인쇄하고있는 것으로 보입니다.

Java PrintService를 사용하여 작동하게하려면 어떤 방법이 있습니까?

답변

0

Java PrintService를 사용하여 작동하게하려면 어떤 방법이 있습니까?

확실히. 다음은 오라클의 Java Print Service에 대한 기사입니다.

이전 AWT 인쇄 서비스를 사용했습니다. AWT 인쇄 서비스를 사용하면 텍스트를 이미지로 변환하고 이미지를 인쇄해야합니다.

+0

이미지에서 차용. – Stroboskop

+0

사실 ... 나는 때때로 printString에 텍스트를 "그리기"때문에 drawString을 사용하면 마크 업할 수있는 텍스트가됩니다 (프린터로 FreePDF 사용). 그러나 대부분의 경우 이미지 조각의 PrintJob에 의해 구성 요소가 잘라지고 텍스트가 없기 때문에 일관되게 작동하지 않습니다. 어떤 방법을 사용하는지 아직 알지 못했습니다. – Stroboskop

0
윈도우 메모장 [NT EMF 1.008]를 사용하는 경우 [...]이 세 가지 프린터 잘 작동

FreeHEP 자바에 대한 EMF의 출력 형식을 제공합니다 : http://java.freehep.org/, 바이너리 파일 향상된 메타 파일 형식 드라이버에 따라 만들어집니다.

public void write(EMFOutputStream emf) throws IOException { 
    emf.writePOINTL(pos); 
    emf.writeDWORD(string.length()); 
    emf.writeDWORD(8 + 28 + 40); // TagHeader + ExtTextOutA + Text 
    emf.writeDWORD(options); 
    emf.writeRECTL(bounds); 
    int pad = (string.length()) % 4; 
    if (pad > 0) 
     pad = 4 - pad; 
    emf.writeDWORD(8 + 28 + 40 + string.length() + pad); // offset to 
                 // character 
                // spacing array 
    emf.writeBYTE(string.getBytes()); 
    for (int i = 0; i < pad; i++) 
     emf.writeBYTE(0); 
    for (int i = 0; i < string.length(); i++) 
     emf.writeDWORD(widths[i]); 
} 

샘플 팩스 인쇄 드라이버 키워드에 대한 출력을 스캔하기 때문에 작동하지 않습니다 programcreek.com