Java JPanel扭曲缩放问题

Java JPanel扭曲缩放问题,java,printing,jpanel,report,scaling,Java,Printing,Jpanel,Report,Scaling,说明:我正在编写一个小程序,需要生成一份报告(1页)。这没什么大不了的,这是我第一次需要生成某种报告作为可打印输出。应该足够简单,所以我创建了一个JPanel,添加了使其看起来像报告所需的所有字段/面板和样式 问题:当我试图打印报告时,它不适合在A4上打印,并且在右侧和底部被切断。然后我尝试更改打印方法以缩放JPanel,但现在我在字体和其他一些项目上遇到了一些奇怪的压缩(对吗?)问题 我尝试的内容:我尝试将报告打印为JPEG/PNG格式(查看时看起来很完美),然后发送到打印机,但这会导致可怕的

说明:我正在编写一个小程序,需要生成一份报告(1页)。这没什么大不了的,这是我第一次需要生成某种报告作为可打印输出。应该足够简单,所以我创建了一个JPanel,添加了使其看起来像报告所需的所有字段/面板和样式

问题:当我试图打印报告时,它不适合在A4上打印,并且在右侧和底部被切断。然后我尝试更改打印方法以缩放JPanel,但现在我在字体和其他一些项目上遇到了一些奇怪的压缩(对吗?)问题

我尝试的内容:我尝试将报告打印为JPEG/PNG格式(查看时看起来很完美),然后发送到打印机,但这会导致可怕的图像质量问题。然后,我将JPanel的内容更改为更小,以适合打印,但这使得打印前在屏幕上查看报告时看起来很小

帮助:如果有人能给我指出正确的方向,或者告诉我缩放导致问题的原因,那就太好了。。。我真的不希望为每个报告创建不同的面板,只是为了正确地查看和打印

public int print(Graphics gc, PageFormat pageFormat, int pageIndex) {
if(pageIndex>0) {
        return NO_SUCH_PAGE;
    }

// Create a instance of the RepaintManager from the component being printed
RepaintManager mgr = RepaintManager.currentManager(component);
Graphics2D g2d = (Graphics2D)gc;

// Get the bounds of the component
Dimension dim = component.getSize();
double cHeight = dim.getHeight();
double cWidth = dim.getWidth();

// Get the bounds of the printable area
double pHeight = pageFormat.getImageableHeight();
double pWidth = pageFormat.getImageableWidth();

double pXStart = pageFormat.getImageableX();
double pYStart = pageFormat.getImageableY();

double xRatio = pWidth / cWidth;
double yRatio = pHeight / cHeight;

g2d.scale(xRatio, yRatio);

mgr.setDoubleBufferingEnabled(false);   // Only for swing components

component.paint(g2d);
mgr.setDoubleBufferingEnabled(true);    // Only for swing components

return PAGE_EXISTS;}


尝试使用仿射翻译,如回答此问题时所示:@samgak会看一看,我想我在搜索时找到了那篇文章,但肯定是因为JComponent在标题中而忽略了它。深夜sleep@samgak我已经试过了,同样的结果(这是我试过的第四种打印方法)。我玩了我喜欢的尺寸,甚至去掉了缩放,它仍然打印相同的。我开始怀疑字体是问题所在。您可能只需要在每个JTextField上设置字体大小。尽管这听起来与你想要的方法相反take@samgak目前,我有一种方法可以将JTextField字体设置为Trebuchet MS。我尝试过使用不同的字体,比如Arial,这会增加单词之间的空格,但看起来像是在每个地方都添加了双空格。