2013-02-04 2 views
3

아파치의 pdfbox를 사용하여 pdf 파일을 인쇄하려고합니다. 따라서 pdf 파일을 인쇄 할 책임이있는 컨트롤러를 만들었습니다. 아래 코드에서 볼 수 있듯이 컨트롤러에는 파일 경로 매개 변수가있는 공용 메서드가 하나만 있습니다. 컨트롤러는 예외없이 실행되지만 아무것도 인쇄되지 않습니다 받는다는와 나는 pdfbox 버전 1.7.0을 사용하고pdfbox를 사용하여 아무 것도 인쇄 할 수 없습니다.

public class ControladorImpressao { 

    @Value("${nome.impressora}") 
    private String nomeImpressora; 
    private PDDocument arquivoPDF; 
    private Logger logger = LoggerFactory.getLogger(this.getClass()); 

    public boolean imprimir(String arquivo) { 
     try { 
      carregarArquivoPDF(arquivo); 
      iniciarImpressao(arquivo); 
      return true; 
     } catch (Exception e) { 
      logger.error("Erro ao tentar imprimir documento!",e); 
     } 
     return false; 
    } 

    private void carregarArquivoPDF(String arquivo) { 
     try { 
      arquivoPDF=new PDDocument(); 
      arquivoPDF.load(arquivo); 
     } 
     catch (Exception e) { 
      logger.error("Erro ao abrir pdf!",e); 
     } 
    } 

    private void iniciarImpressao(String nomeArquivo) throws PrinterException { 
     PrintService impressora=recuperarImpressora(); 
     PrinterJob job = PrinterJob.getPrinterJob(); 
     job.setPrintService(impressora); 
     job.setJobName(nomeArquivo); 
     job.setCopies(1); 
     arquivoPDF.silentPrint(job); 
    } 

    private PrintService recuperarImpressora() { 
     PrintService[] printServices = PrinterJob.lookupPrintServices(); 
     for (int count = 0; count < printServices.length; ++count) { 
      if (nomeImpressora.equalsIgnoreCase(printServices[count].getName())) { 
       return printServices[count]; 
      } 
     } 
     return null; 
    } 
} 

: 내가 잘못

<dependency> 
     <groupId>org.apache.pdfbox</groupId> 
     <artifactId>pdfbox</artifactId> 
     <version>1.7.0</version> 
</dependency> 

을하고있어 무엇을?

답변

1

해결 나는 PDDocument (지금은 정하중 사용하고) 내가있는 PrinterJob를 사용하는 방법 변경을 인스턴스화 할 방법을 변경 문제 :

public class ControladorImpressao { 

    @Value("${nome.impressora}") 
    private String nomeImpressora; 
    private PDDocument arquivoPDF; 
    private Logger logger = LoggerFactory.getLogger(this.getClass()); 

    public boolean imprimir(String arquivo) { 
     try { 
      arquivoPDF=PDDocument.load(new File(arquivo)); 
      PrinterJob job = PrinterJob.getPrinterJob(); 
      job.setPrintService(recuperarImpressora()); 
      job.setJobName(arquivo); 
      job.setPageable(arquivoPDF); 
      job.print(); 
      return true; 
     } catch (Exception e) { 
      logger.error("Erro ao tentar imprimir documento!",e); 
     } 
     return false; 
    } 

    private PrintService recuperarImpressora() { 
     PrintService[] printServices = PrinterJob.lookupPrintServices(); 
     for (int count = 0; count < printServices.length; ++count) { 
      if (nomeImpressora.equalsIgnoreCase(printServices[count].getName())) { 
       return printServices[count]; 
      } 
     } 
     return null; 
    } 
} 

내가 눈치 intersting 것 대신 ou는 경우 정적 하중의 방법을 사용하는 것이있다 내가 사용 :

arquivoPDF=new PDDocument(); 
arquivoPDF.load(arquivo); 

여전히 인쇄 할 수없는, 아마도 문제는로드 방법입니다. @yms 덕분에, 그는 PdfBox의 문서에있는 메모에 대해 말하지 않았다면 아마도 다른 경로로 갈 것입니다.

관련 문제