3

Apacheのpdfboxを使用してpdfファイルを印刷しようとしているので、pdfファイルを印刷するコントローラーを作成しました。次のコードでわかるように、コントローラーにはファイル パス パラメーターを持つパブリック メソッドが 1 つしかありません。コントローラーは例外なく実行されますが、何も出力されません。

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;
    }
}

私はmavenでpdfboxバージョン1.7.0を使用しています:

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

私が間違っていることは何ですか?

4

1 に答える 1

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;
    }
}

私が気づいた興味深いことは、代わりに私が使用する静的ロードメソッドを使用する場合です:

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

まだ何も印刷できません。おそらくロード メソッドに問題があります。@yms のおかげで、彼が PdfBox のドキュメントのメモについて教えてくれなかったら、おそらく別の道に進んでいたでしょう。

于 2013-02-04T19:49:17.370 に答える