保存ボタンをクリックすると、JEditorPaneからPDFとしてテキストを保存しようとしています。JEditorPaneをPDFとして保存する方法は?
saveAs.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String title = JOptionPane.showInputDialog(null, "Enter a name for file...");
try{
paintToPDF(newBlanktoEdit, title);
}catch (Exception exc){
exc.printStackTrace();
}
}
});
正しく仕事をしpaintToPDF
方法は、しかしながら、Pane
はgraphics2D
成分として解析され、そのためラインを包むことは不可能です。
int inch = Toolkit.getDefaultToolkit().getScreenResolution();
float pixelToPoint = (float) 72/(float) inch;
、と
protected void paintToPDF(JEditorPane newPane, String title) throws Exception{
newPane.setBounds(0, 0, (int) convertToPixels(612 - 58), (int) convertToPixels(792 - 60));
Document doc = new Document();
FileOutputStream out = new FileOutputStream(title + ".pdf");
PdfWriter writer = PdfWriter.getInstance(doc, out);
doc.setPageSize(new com.lowagie.text.Rectangle(612, 792));
doc.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 g = cb.createGraphics(612, 792, mapper, true, .92f);
AffineTransform at = new AffineTransform();
at.translate(convertToPixels(20), convertToPixels(20));
at.scale(pixelToPoint, pixelToPoint);
g.transform(at);
g.setColor(Color.WHITE);
g.fill(newPane.getBounds());
Rectangle alloc = getVisivleEditorRect(newPane);
newPane.getUI().getRootView(newPane).paint(g, alloc);
g.setColor(Color.BLACK);
g.draw(newPane.getBounds());
g.dispose();
cb.restoreState();
doc.close();
out.flush();
out.close();
}
private float convertToPixels(int points){
return (float) (points/pixelToPoint);
}
private Rectangle getVisivleEditorRect(JEditorPane newPane){
Rectangle alloc = newPane.getBounds();
if((alloc.width > 0) && (alloc.height > 0)){
alloc.x = alloc.y = 0;
Insets insets = newPane.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;
}
私は外部のライブラリに基づいて解決策を探しています、私は、これまで無駄に、iTextのとPDFBoxでexpermentingてみました。
上記の解決方法は、com.lowagie
ライブラリを使用していることを指摘します。
は? – Frakcool
テキストは、分かりやすくするために、あなたが気をつけている解決策に応じて、JTextPaneまたはJTextAreaに変更することができます。 –
StandardPrintを使用してJEditorPane(または他のComponent)ディスプレイをImageに変換し、lowagieを使用してPDFに変換できます。https://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/ print/StandardPrint.java – ControlAltDel