描述:我正在编写一个需要生成报告的小程序(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;}