Mega Code Archive

 
Categories / Java Tutorial / PDF
 

JTextPane To Pdf

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.AffineTransform; import java.io.FileOutputStream; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledEditorKit; import com.lowagie.text.Document; import com.lowagie.text.pdf.DefaultFontMapper; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfWriter; public class MainClass {   int inch = Toolkit.getDefaultToolkit().getScreenResolution();   float pixelToPoint = (float) 72 / (float) inch;   JTextPane textPane;   public MainClass() {     JFrame frame = new JFrame();     textPane = new JTextPane();     JScrollPane scrollPane = new JScrollPane(textPane);     JPanel north = new JPanel();     JButton print = new JButton("Print");     print.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent ae) {         paintToPDF(textPane);       }     });     JMenuBar menu = new JMenuBar();     JMenu styleMenu = new JMenu();     styleMenu.setText("Style");     Action boldAction = new BoldAction();     boldAction.putValue(Action.NAME, "Bold");     styleMenu.add(boldAction);     Action italicAction = new ItalicAction();     italicAction.putValue(Action.NAME, "Italic");     styleMenu.add(italicAction);     menu.add(styleMenu);     north.add(menu);     north.add(print);     frame.getContentPane().setLayout(new BorderLayout());     frame.getContentPane().add(north, BorderLayout.NORTH);     frame.getContentPane().add(scrollPane, BorderLayout.CENTER);     frame.setSize(800, 500);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setVisible(true);   }   public static void main(String[] args) {     new MainClass();   }   public void paintToPDF(JTextPane ta) {     try {       ta.setBounds(0, 0, (int) convertToPixels(612 - 58), (int) convertToPixels(792 - 60));       Document document = new Document();       FileOutputStream fos = new FileOutputStream("2.pdf");       PdfWriter writer = PdfWriter.getInstance(document, fos);       document.setPageSize(new com.lowagie.text.Rectangle(612, 792));       document.open();       PdfContentByte cb = writer.getDirectContent();       cb.saveState();       cb.concatCTM(1, 0, 0, 1, 0, 0);       DefaultFontMapper mapper = new DefaultFontMapper();       mapper.insertDirectory("c:/windows/fonts");       Graphics2D g2 = cb.createGraphics(612, 792, mapper, true, .95f);       AffineTransform at = new AffineTransform();       at.translate(convertToPixels(20), convertToPixels(20));       at.scale(pixelToPoint, pixelToPoint);       g2.transform(at);       g2.setColor(Color.WHITE);       g2.fill(ta.getBounds());       Rectangle alloc = getVisibleEditorRect(ta);       ta.getUI().getRootView(ta).paint(g2, alloc);       g2.setColor(Color.BLACK);       g2.draw(ta.getBounds());       g2.dispose();       cb.restoreState();       document.close();       fos.flush();       fos.close();     } catch (Exception e) {       e.printStackTrace();     }   }   public float convertToPoints(int pixels) {     return (float) (pixels * pixelToPoint);   }   public float convertToPixels(int points) {     return (float) (points / pixelToPoint);   }   protected Rectangle getVisibleEditorRect(JTextPane ta) {     Rectangle alloc = ta.getBounds();     if ((alloc.width > 0) && (alloc.height > 0)) {       alloc.x = alloc.y = 0;       Insets insets = ta.getInsets();       alloc.x += insets.left;       alloc.y += insets.top;       alloc.width -= insets.left + insets.right;       alloc.height -= insets.top + insets.bottom;       return alloc;     }     return null;   } } class BoldAction extends StyledEditorKit.StyledTextAction {   private static final long serialVersionUID = 9174670038684056758L;   public BoldAction() {     super("font-bold");   }   public String toString() {     return "Bold";   }   public void actionPerformed(ActionEvent e) {     JEditorPane editor = getEditor(e);     if (editor != null) {       StyledEditorKit kit = getStyledEditorKit(editor);       MutableAttributeSet attr = kit.getInputAttributes();       boolean bold = (StyleConstants.isBold(attr)) ? false : true;       SimpleAttributeSet sas = new SimpleAttributeSet();       StyleConstants.setBold(sas, bold);       setCharacterAttributes(editor, sas, false);     }   } } class ItalicAction extends StyledEditorKit.StyledTextAction {   private static final long serialVersionUID = -1428340091100055456L;   public ItalicAction() {     super("font-italic");   }   public String toString() {     return "Italic";   }   public void actionPerformed(ActionEvent e) {     JEditorPane editor = getEditor(e);     if (editor != null) {       StyledEditorKit kit = getStyledEditorKit(editor);       MutableAttributeSet attr = kit.getInputAttributes();       boolean italic = (StyleConstants.isItalic(attr)) ? false : true;       SimpleAttributeSet sas = new SimpleAttributeSet();       StyleConstants.setItalic(sas, italic);       setCharacterAttributes(editor, sas, false);     }   } }