2013-05-31 30 views
1

我想创建一个将在Swing应用程序中打印的HTML的小预览。基本上,它将以PageFormat类的大小(即可打印页面的大小)显示页面,但大小为页面的1/4或更小。创建预览的打印的HTML页面

到目前为止,我已经试过如下:

//Create components 
    JDialog frame = new JDialog(new JFrame("Test"), "Test", true); 
    JPanel panel = new JPanel(){ 
    @Override 
    public void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 
     g2.scale(0.5,0.5); 
     super.paintComponent(g2); 
    }}; 
    PageFormat pf = new PageFormat(); 
    Dimension dimension = new Dimension(); 
    dimension.setSize(pf.getImageableWidth(), pf.getImageableHeight()); 
    panel.setPreferredSize(dimension); 

    panel.add(new JEditorPane("text/html", "<i>Testing, testing, one two three</i>")); 

    //Finalize everything 
    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setVisible(true); 

不幸的是,这将创建一个JPanel是完整的页面大小,但缩放的JEditorPane到屏幕因为尺寸的左上四分之一JPanel似乎也没有扩展。另外,如果您单击JEditorPane,它将以全尺寸显示。我怎样才能得到我想要的效果?另外,这并不一定是一个可编辑的HTML页面,所以如果有一些巧妙的解决方案不涉及直接显示HTML,我可以接受。

回答

2

http://java-sl.com/JEditorPanePrinter.html您可以使用代码来查看预览是如何实现的。

备选地宇可以定义一个BufferedImage传递所需的宽度/高度>使用图像的getGraphics()和(在最简单情况下,标度)应用AffineTransform需要。然后,请拨打yourJEditorPane.paint(g),其中g是图片的Graphics

0

除了使用了setPreferredSize()的请尝试使用setmaximumsize和而不是分配 pf.getImageableWidth(),pf.getImageableHeight()直接将其分配到一些int和尝试打印。然后根据所需的大小更改int值

+0

调用setMaximumSize()代替setPreferredSize()将JPanel缩小为JLabel大小的4倍。调用两者都会产生与描述相同的情况。我不确定为什么将pf.getImageableWidth()分配给int(通过'Double.inValue()')会产生任何影响。此外,重点是在实际打印项目之前创建此预览。 – Thunderforge