2009-09-10 10 views
13

우리는 Java 내에서 PDF 문서의 자동 인쇄를 조사하고 있습니다. 인쇄는 브라우저가 아닌 데스크탑에서 호출되므로 JavaScript를 사용할 수 없습니다. PDF Renderer는 작동 솔루션이지만 렌더링 품질이 허용되지 않습니다. iText는 Java 인쇄 서비스와 함께 플러그 할 수없는 것 같습니다. Qoppa, JPedal 및 ICEpdf의 상용 Java 라이브러리 jPDFPrint가 있습니다. 아직 시도하지 않았습니다.Java 내에서 PDF 자동 인쇄

누구든지 Java로 PDF 자동 인쇄 기능을 사용해 본 경험이 있습니까?

+0

일의 PDFRender와 문제가 무엇입니까? 나는 여기에 프린트 아웃을 가지고 있고 그들은 깨끗하고 멋있어 보인다. 문제를 일으키는 특별한 요소 나 이미지가 있습니까? – Stroboskop

답변

11

Apache PDFBox. 현재 보육 중이지만 PDF 인쇄 기능은 그 전부터있었습니다. 내부적으로는 Java 인쇄 서비스를 사용하여 인쇄 작업을 생성하며 silent printing도 지원합니다.

Fontbox도 필요하며 현재 버전 (곧 출시 될 0.8.0 버전)에는 Type 0 글꼴이있는 문서에 대한 올바른 폴백이 포함되어 있습니다. 유형 1 글꼴이 올바르게 인쇄됩니다. 그러나 0.7.3에서는 Type 0 글꼴로 문서를 인쇄하려고 시도하면 예외가 발생합니다.

+1

나는 이것을 시도했지만, pdf는 적어도 주로 공백 (때로는 완전히 빈 페이지, 때로는 섹션)을 인쇄했습니다. – Stephen

+1

글쎄, 커맨드 라인 (PrintPDF)이 작동하고 모든 것을 프린트하는 것처럼 보입니다 (투명 PNG 이미지를 엉망으로 만든다 고하더라도) – Stephen

+0

커맨드 라인 프린팅이 효과가 있었던 것 같습니다 (PNG 이미지 제외) . PNG가 PDFBox 모델에서 어떻게 표현되는지 확인하겠습니다. 그건 그렇고, 0.7.3 또는 그 이후 버전에서 이것을 시도하고 있습니까? –

0

www.pdflib.com을 참조하십시오. Comercial이지만 PDFlib Lite는 오픈 소스 프로젝트에 무료로 제공됩니다. 그것은 자바에 대한 바인딩을 가지고 있습니다.

2

어쩌면 내가 잘못 이해하고 있지만 인쇄 서비스 API를 직접 사용하지 않는 이유는 무엇입니까? 당신이 전체 글꼴을 원하는 경우

DocFlavor flavor = DocFlavor.BYTE_ARRAY.PDF; 
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null); 
if (services.length > 0) 
{ 
    DocPrintJob printJob = services[0].createPrintJob(); 
    Doc document = new SimpleDoc(pdfBytes, flavor, null) 
    printJob.print(document, null); 
} 
else 
{ 
    System.out.println("No PDF printer available."); 
} 
+6

이 프린터는 네이티브 프린터가 기본적으로 PDF를 지원하는 경우에만 작동합니다. - 거의하지 않습니다. –

+0

모든 것들 리눅스에서 작동시키려는 시도가 있었는데, Windows에서는 드라이버를 업데이트해야했습니다. –

+0

Windows 및 Linux에서이 작업을 시도하고 있습니다.하지만 업데이트 된 버전은 있지만 작동하지 않습니다. 어떻게 파일을로드 할 수 있습니까? c : \ print.pdf 그리고 자동 인쇄로 푸시? 제안 제안 : https://gist.github.com/1093987 – YumYumYum

0

http://www.jpedal.org/support_egSP.php

에서 JPedal를 사용하는 예제가있다 당신은 IcePdf의 상용 버전이 필요합니다 : 나를 위해 다음 작품 (당신이 바이트 배열로 PDF 문서를 가정) 지원하다.

0

필자는 Acrobat (Reader 또는 Full)을 제작 한 경험이 있지만 침묵하는 것입니다. (무인 상태입니다. 침묵하는 요구 사항이 '침묵하는'방식에 달려 있습니다.) 관심이 있다면 필요한 DDE 호출을하는 네이티브 코드를 만들 수 있습니다.

+0

코드를 보여 주시겠습니까? – asalamon74

+0

인쇄 작업을 시작하는 명령 행 스위치가 있습니다. Acrobat reader에서 읽었지만 판독기는 계속 열려 있습니다 ... 한 가지 해결책은 외부 유틸리티를 사용하는 것입니다 (http://www.rgagnon.com/javadetails/java-print-a-pdf.html 참조). 물론, 이것은 Windows 전용입니다 ! – RealHowTo

+0

및 해당 명령 줄 스위치 w가 없습니다. orked for me (Acrobat 및/또는 Reader의 최신 버전에서는 이전 버전에서 작동 함) ... –

0

iText는 PDF 파일 (작성자가 본 게시물 당)을 작성하기위한 것이므로 아마도 원하는 내용이 아닐 수 있습니다.

저는이 용도로 Qoppa의 jPDFPrint를 사용했지만 가격이 저렴하지 않았습니다. 당신이 그것을 감당할 수 있다면, 그것은 지금까지 찾은 가장 강력한 솔루션입니다. 나는 또한 지원 수준에 매우 감동했습니다. 그들은 나를 위해 맞춤 샘플 코드를 생성하기까지했다.

PDFBox를 사용해 보았지만 Acrobat과 함께하는 "인쇄 가능한 영역으로 축소"페이지 배율을 지원하지 않습니다. 모든 사람이이 기능을 신경 쓰지는 않지만 필자에게는 필수적입니다.

2

이 나를 위해 작동합니다

public void print() { 
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null); 
    FileInputStream psStream = null; 
    try { 
     psStream = new FileInputStream("c:\\test.pdf"); 
     } catch (FileNotFoundException ffne) { 
      ffne.printStackTrace(); 
     } 
    if (psStream == null) { 
     return; 
    }  
    if (services.length > 0) 
    { 
     PrintService myService = null; 
     for(PrintService service : services) { 
      System.out.println(service.getName()); 
      if(service.getName().contains("my printer")) { 
       myService = service; 
       break; 
      } 
     } 
     DocPrintJob printJob = myService.createPrintJob(); 
     Doc document = new SimpleDoc(psStream, flavor, null); 
     try { 
      printJob.print(document, null); 
     } catch (PrintException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    else 
    { 
     System.out.println("No PDF printer available."); 
    }  
}