java - 无法使用 pdfbox 打印任何内容

标签 java pdf printing pdfbox

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

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>

我做错了什么?

最佳答案

解决了更改我实例化 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 文档中的注释,我可能会走另一条路。

关于java - 无法使用 pdfbox 打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14692951/

相关文章:

java - 从购物车中删除商品 -Spring MVC

java - org.hibernate.hql.internal.ast.tree.Node 在 jmap 堆转储中意味着什么

java - 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

c++ - 使用 PoDoFo 获得的字符位移不正确

c - 从文本文件中读取和打印输出

printing - Javascript - 如何判断 window.print() 是否成功?

java - Apache Commons Lang StringUtils 较慢

java - 在 Java 中创建包含所有父文件夹的文件

pdf - 将修剪框与 ImageMagick 结合使用

jquery - 如何打印包含很多列的 html 表