首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFBox打印:使用PDFBox打印时的空指针异常

PDFBox打印:使用PDFBox打印时的空指针异常
EN

Stack Overflow用户
提问于 2014-06-03 07:32:32
回答 2查看 1.9K关注 0票数 0

在使用CentOS在linux中使用以下代码打印pdf文件时:

代码语言:javascript
复制
    PrinterJob job = PrinterJob.getPrinterJob();
    PDDocument pdf = PDDocument.load(new ByteArrayInputStream(out.toByteArray()));
    job.setPageable(new PDPageable(pdf, job));
    job.print();

引发空指针异常:

2014-06-03 10:37:06警告PDFStreamEngine:542 - org.apache.pdfbox.pdmodel.font.PDCIDFont.getFontHeight(PDCIDFont.java:200) at org.apache.pdfbox.pdmodel.font.PDType0Font.getFontHeight(PDType0Font.java:119) at org.apache.pdfbox.util.PDFStreamEngine.processEncodedText(PDFStreamEngine.java:401) at org.apache.pdfbox.util.operator.ShowTextGlyph.process(ShowTextGlyph.java:62)在org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:529) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:258) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:225) at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:205) at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:154) at org.apache.pdfbox.pdmodel.PDPageable.print(PDPageable.java:195)在sun.print.RasterPrinterJob.printPage(RasterPrinterJob.java:1936) at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1431) at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1247)

当我们在Windows中执行同样的操作时,它可以正常工作。知道吗?请帮帮忙

EN

回答 2

Stack Overflow用户

发布于 2014-06-03 08:37:42

这可能是因为字体在linux/CentOs上不可用。

您可以使用acrobat阅读器检查pdf中的字体。从文件菜单->属性->字体选项卡

安装这些字体,然后重试。

票数 2
EN

Stack Overflow用户

发布于 2014-10-16 09:17:35

为此,始终使用pdfbox 1.8.6和fop0.93

代码语言:javascript
复制
PDDocument doc = null;
        try
        {
            doc = new PDDocument();
            PDPage page = new PDPage();
            doc.addPage(page);
            PDPageContentStream contentStream = new PDPageContentStream(doc, page);

            PDFont pdfFont = PDType1Font.HELVETICA;
            float fontSize = 25;
            float leading = 1.5f * fontSize;

            PDRectangle mediabox = page.findMediaBox();
            float margin = 72;
            float width = mediabox.getWidth() - 2*margin;
            float startX = mediabox.getLowerLeftX() + margin;
            float startY = mediabox.getUpperRightY() - margin;

            String text = "Hello sir finally PDF is created : thanks"; 
            List<String> lines = new ArrayList<String>();
            int lastSpace = -1;
            while (text.length() > 0)
            {
                int spaceIndex = text.indexOf(' ', lastSpace + 1);
                if (spaceIndex < 0)
                {
                    lines.add(text);
                    text = "";
                }
                else
                {
                    String subString = text.substring(0, spaceIndex);
                    float size = fontSize * pdfFont.getStringWidth(subString) / 1000;
                    if (size > width)
                    {
                        if (lastSpace < 0) // So we have a word longer than the line... draw it anyways
                            lastSpace = spaceIndex;
                        subString = text.substring(0, lastSpace);
                        lines.add(subString);
                        text = text.substring(lastSpace).trim();
                        lastSpace = -1;
                    }
                    else
                    {
                        lastSpace = spaceIndex;
                    }
                }
            }

            contentStream.beginText();
            contentStream.setFont(pdfFont, fontSize);
            contentStream.moveTextPositionByAmount(startX, startY);            
            for (String line: lines)
            {
                contentStream.drawString(line);
                contentStream.moveTextPositionByAmount(0, -leading);
            }
            contentStream.endText(); 
            contentStream.close();

            doc.save("E:\\document.pdf");
        }catch (Exception exp){
            logger.error("[GetInformation] email id is " +exp);

        }
        finally
        {
            if (doc != null)
            {
                try{
                doc.close();
                }catch (Exception expe){
                    logger.error("[GetInformation] email id is " +expe);

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

https://stackoverflow.com/questions/24009467

复制
相关文章

相似问题

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