1

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

到目前为止,我已经尝试了以下方法:

    //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 的巧妙解决方案,我愿意接受。

4

2 回答 2

2

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

或者,您可以定义BufferedImage传递所需的宽度/高度>使用图像getGraphics()并应用AffineTransform您需要的(在最简单的情况下缩放)。然后只需调用yourJEditorPane.paint(g)其中 g 是图像的Graphics.

于 2013-06-01T14:02:35.307 回答
0

不要使用 setpreferredsize(),而是尝试使用 setmaximumsize,而不是直接分配 pf.getImageableWidth()、pf.getImageableHeight(),而是将其分配给某个 int 并尝试打印它。然后根据需要的大小改变int

于 2013-05-31T15:54:11.053 回答