0

使用 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

4

1 回答 1

0

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

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

于 2013-08-12T13:39:40.497 回答