【问题标题】:Can't print anything using pdfbox无法使用 pdfbox 打印任何内容
【发布时间】:2013-01-19 12:27:38
【问题描述】:

我正在尝试使用 apache 的 pdfbox 来打印 pdf 文件,所以我创建了一个控制器来负责打印任何 pdf 文件。正如您在下面的代码中看到的,控制器只有一个带有文件路径参数的公共方法。控制器无异常运行,但不打印任何内容:

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>

我做错了什么?

【问题讨论】:

    标签: java pdf printing pdfbox


    【解决方案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 文档中的注释,我可能会走另一条路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2020-11-23
      • 2019-05-26
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      相关资源
      最近更新 更多