【问题标题】:Java GUI to PDF using PDFBoxJava GUI 到 PDF 使用 PDFBox
【发布时间】:2013-08-12 11:35:30
【问题描述】:

使用 PDFBox 将 Java GUI 组件(例如 JPanel)嵌入到 pdf 的最佳方法是什么? 我目前正在使用此代码:

    PDDocument doc = null;
    PDPage page = null;
    PDXObjectImage ximage = null;      
    try {
        doc = new PDDocument();
        page = new PDPage(PDPage.PAGE_SIZE_A4);
        doc.addPage(page);
        PDPageContentStream content = new PDPageContentStream(doc, page);
        BufferedImage image = new BufferedImage((int)PDPage.PAGE_SIZE_A4.getWidth()*2,(int)PDPage.PAGE_SIZE_A4.getHeight()*2, BufferedImage.TYPE_4BYTE_ABGR); 

        Graphics2D g = image.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
        g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        panel.setBounds(0, 0,(int)PDPage.PAGE_SIZE_A4.getWidth()*2,(int)PDPage.PAGE_SIZE_A4.getHeight()*2);
        panel.doLayout();
        panel.validate();
        panel.paint(g);
        g.dispose();

        ximage = new PDPixelMap(doc, image);
        content.drawXObject(ximage, 0 , 0 ,(int)PDPage.PAGE_SIZE_A4.getWidth(),(int)PDPage.PAGE_SIZE_A4.getHeight() );
        content.close();
        if (path==null || path.equals(""))
            doc.print();
        else
            doc.save(path);
        doc.close();

    } catch(Exception ie) {
        ie.printStackTrace();
    }

但是我遇到的两个问题是 1. 有时我会因为某种原因得到一个空白的 pdf,以及 2. 当它工作时 PDF 看起来像素化了。

有没有更好的方法?

PS:我的项目中不允许使用 iText

【问题讨论】:

    标签: java pdf pdfbox


    【解决方案1】:

    因为您通过 PDFPixelMap 将(矢量)面板图形添加到 PDF 页面,所以面板图形将始终被像素化(转换为光栅)。

    如果要防止光栅化,则必须使用drawLine、stroke、drawText等矢量绘图命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-23
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多