java – 如何打印一个摆动窗口,使其非常适合一页

前端之家收集整理的这篇文章主要介绍了java – 如何打印一个摆动窗口,使其非常适合一页前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试为我们的swing UI添加打印功能.我尝试了以下方法

  1. protected void print() {
  2. PrinterJob job = PrinterJob.getPrinterJob();
  3. if(job.printDialog()){
  4. try {
  5. job.setPrintable(new Printable() {
  6. @Override
  7. public int print(Graphics graphics,PageFormat pageFormat,int pageIndex) throws PrinterException {
  8. if(pageIndex == 0){
  9. Graphics2D g2d = (Graphics2D)graphics;
  10. g2d.translate(pageFormat.getImageableX(),pageFormat.getImageableY());
  11. // BufferedImage snapshot = AnimUtilities.createSnapshotOfFrame(ApplicationFrame.this,Transparency.TRANSLUCENT);
  12. // double scaleX = pageFormat.getWidth()/snapshot.getWidth();
  13. // double scaleY = pageFormat.getHeight()/snapshot.getHeight();
  14. //
  15. // double scaleValue = Math.min(scaleX,scaleY);
  16. // g2d.scale(scaleValue,scaleValue);
  17. // g2d.drawImage(snapshot,snapshot.getWidth(),snapshot.getHeight(),ApplicationFrame.this);
  18. // ApplicationFrame.this.print(g2d);
  19. ApplicationFrame.this.printAll(g2d);
  20. return PAGE_EXISTS;
  21. }
  22. return NO_SUCH_PAGE;
  23. }
  24. });
  25. job.print();
  26. } catch (PrinterException e) {
  27. e.printStackTrace();
  28. }
  29. } else {
  30. System.err.println("Error printing");
  31. }
  32. }

没有注释掉的代码非常适用于打印的内容在纸上看起来非常好看.但是,JFrame比纸张大,所以它只是将其切断.我还尝试了注释掉的代码,该代码创建了JFrame的图像,适当地缩放图像以使其适合页面并保持相同的宽高比,但缩放使得屏幕上的文本看起来很糟糕.我发现这个advanced tutorial from Oracle,但它告诉我如何将屏幕分成多个页面.我只想打印JFrame的漂亮截图.如何打印JFrame而不切断它或导致工件缩放?

最佳答案
你可以从RenderingHints获得一些好处.我会特别关注KEY_ANTIALIASING,KEY_TEXT_ANTIALIASING和KEY_FRACTIONALMETRICS.

编辑:

RenderingHints.KEY_INTERPOLATION也有帮助,AffineTransformOp.TYPE_BICUBIC是另一种选择.

猜你在找的Java相关文章