首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印时PDFBox输出内存

打印时PDFBox输出内存
EN

Stack Overflow用户
提问于 2017-04-24 08:15:00
回答 1查看 3.8K关注 0票数 0

我有一个问题的软件打印PDF文件直接与默认打印机。有时,当用户打印PDF文件时,我会收到一个OutOfMemoryError,但我不知道问题出在哪里。

代码语言:javascript
复制
java.lang.OutOfMemoryError: Java heap space 
    at java.awt.image.DataBufferInt.<init>(Unknown Source) 
    at java.awt.image.Raster.createPackedRaster(Unknown Source) 
    at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source) 
    at java.awt.image.BufferedImage.<init>(Unknown Source) 
    at org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray.toRGBImage(PDDeviceGray.java:78) 
    at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.from1Bit(SampledImageReader.java:216) 
    at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getRGBImage(SampledImageReader.java:142) 
    at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:340) 
    at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:793) 
    at org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:62) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.showForm(PDFStreamEngine.java:178) 
    at org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:70) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) 
    at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:189) 
    at org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:208) 
    at org.apache.pdfbox.rendering.PDFRenderer.renderPageToGraphics(PDFRenderer.java:169) 
    at org.apache.pdfbox.printing.PDFPrintable.print(PDFPrintable.java:184) 
    at sun.print.RasterPrinterJob.printPage(Unknown Source) 
    at sun.print.RasterPrinterJob.print(Unknown Source)

我使用这段代码用PDFBox加载PDF文件,用Java打印。

代码语言:javascript
复制
try (PDDocument doc = PDDocument.load(fileToPrint)) {

    PrinterJob job = PrinterJob.getPrinterJob();

    job.setJobName(jobName);
    job.setPageable(new PDFPageable(doc, Orientation.AUTO, false, 300));
    job.setPrintService(printerService);

    ...

    job.print(attributes);

    ...

} catch (IOException e) {
    ...
} catch (PrinterException e) {
    ...
}

方法进行PDFBox打印

代码语言:javascript
复制
@Test
   public void currentVersionTest() throws IOException, PrinterException {

      String jobName = testDocumentPdf.getFileName().toString();

      try (PDDocument doc = PDDocument.load(testDocumentPdf.toFile(), MemoryUsageSetting.setupTempFileOnly())) {

         PrinterJob job = PrinterJob.getPrinterJob();

         job.setJobName(jobName);
         job.setPageable(new PDFPageable(doc, Orientation.AUTO, false, 0));
         job.setPrintService(printService);

         PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
         attributes.add(Chromaticity.MONOCHROME);

         job.print(attributes);

      }

      checkJobInQueue(jobName);
   }
EN

回答 1

Stack Overflow用户

发布于 2017-04-24 08:56:19

内存消耗取决于几个因素,如图像数量、DPI设置等。您可能需要调整应用程序的内存设置。

请查看https://pdfbox.apache.org/2.0/faq.html#outofmemoryerror,了解一些改进内存需求/设置的建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43582988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档