java - 如何2 : Add a JPanel to a Document then export to PDF

标签 java pdf itext jpanel add

关于编程的任何论坛上的第一篇帖子......我通常只是搜索直到找到答案......但这次我真的卡住了......

问题来了... 我有一个 JPanel,最近发现 itext 为您提供了一种将 Java GUI 导出为 PDF 的方法...

我似乎无法理解 itext 的语言,也无法理解如何将简单的 JPanel 添加到文档然后将该文档导出为 PDF...这就是我目前所拥有的...

import java.io.FileOutputStream;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;

import java.awt.Color;
import javax.swing.*;
public class HelloWorld {

public static void main(String[] args) {
    try
    {
        //Panel creation and setup
        JPanel panel    = new JPanel();

        //just to ensure that the panel has content...
        JLabel label    = new JLabel("i am a label");
        panel.add(label);
        panel.setSize(100,100);
        //so that even if the label doesnt get added... 
        //i can see that the panel does
        panel.setBackground(Color.red);


        //my understanding of the code below: the virtual document
        Document document   = new Document();

        //my interpretation just writes the virtual pdf document to the hdd
        PdfWriter writer    = PdfWriter.getInstance
                (document, new FileOutputStream("C:/test.pdf"));

        //begin editing the vpdf
        document.open();


        //i wanna do something like this
        //document.add(panel);

        //end editing the vpdf
        document.close();

    } catch (Exception e)
    {
        System.out.println(e);
    }
}

请帮忙...我试着让代码尽可能短以避免无用的东西...

提前致谢... 克雷格

最佳答案

需要在面板上调用print,指定要打印到的pdf的图形,如下图:

JPanel panel    = new JPanel();

//just to ensure that the panel has content...
JLabel label    = new JLabel("i am a label");
panel.add(label);
panel.setSize(100,100);
//so that even if the label doesnt get added... 
//i can see that the panel does
panel.setBackground(Color.red);

//the frame containing the panel
JFrame f = new JFrame();
f.add(panel);
f.setVisible(true);
f.setSize(100,100);

//print the panel to pdf
Document document = new Document();
try {
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\temp\\test.pdf"));
    document.open();
    PdfContentByte contentByte = writer.getDirectContent();
    PdfTemplate template = contentByte.createTemplate(500, 500);
    Graphics2D g2 = template.createGraphics(500, 500);
    panel.print(g2);
    g2.dispose();
    contentByte.addTemplate(template, 30, 300);
} catch (Exception e) {
    e.printStackTrace();
}
finally{
    if(document.isOpen()){
        document.close();
    }
}

关于java - 如何2 : Add a JPanel to a Document then export to PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4517907/

相关文章:

java - 如何在 DDD 中嵌套实体

java - 从输入流 Java 读取时有没有超时的方法?

python - PyPDF2==1.26.0 文本提取不适用于某些 pdf

android - 在 Android 上使用 iText 生成波斯语和英语 PDF

java - 日期框自定义约束

java - 递归寻找路径

pdf - TCPDF SetProtection 方法未按预期工作

javascript - 在 javascript MVC 框架 (Backbone.js) 中生成 PDF 报告

c# - 使用 iTextSharp 4.1.6.0 对 PDF 进行数字签名

unicode - iText v5 unicode 和 ColdFusion