首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mac上的Java A3打印将以A4规模推出

Mac上的Java A3打印将以A4规模推出
EN

Stack Overflow用户
提问于 2010-09-22 18:55:54
回答 2查看 1.8K关注 0票数 3

我有一个奇怪的问题,似乎是Mac电脑特有的。我有一个程序可以将AWT绘图图面的内容打印到一张A3纸上。在Linux和windows机器上,输出是OK的。从Mac打印我得到相同的对话框和相同的预设参数,打印机按预期在一张A3纸上打印,但由于某些原因图像被缩放以适应A4区域。以下是代码的相关部分:

代码语言:javascript
运行
复制
public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    PageFormat format = new PageFormat();
    format.setOrientation(PageFormat.LANDSCAPE);

    double margin = 18; // quarter inch
    double m2 = margin * 2;
    Paper paper = format.getPaper();
    paper.setSize(16.54 * 72, 11.69 * 72); // A3 Landscape
    paper.setImageableArea(margin, margin,  paper.getWidth()-m2, paper.getHeight()-m2);
    format.setPaper(paper);
    printJob.setPrintable(this, format);

    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
    attributes.add(MediaSizeName.ISO_A3);
    attributes.add(OrientationRequested.LANDSCAPE);
    attributes.add(new MediaPrintableArea((int)margin, (int)margin,
            (int)(paper.getWidth()-m2), (int)(paper.getHeight()-m2),
            MediaPrintableArea.INCH));

    if(printJob.printDialog(attributes) ){
      try {
        printJob.print(attributes);
      } catch(PrinterException pe) {
        pe.printStackTrace();
      }
    }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      if(this.componentToBePrinted instanceof PlannerView){
          setScale(g2d);
      }
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  public void setScale(Graphics2D g2d){
      PlannerView planner = (PlannerView)this.componentToBePrinted;
      planner.resetZoom();
      double scale = 1.0 / planner.getRowLength();
      scale *= 4.0; 
      g2d.scale(scale, scale);
  }

有人知道这可能是什么原因吗?

干杯。

EN

回答 2

Stack Overflow用户

发布于 2010-11-23 11:54:06

试着打电话

代码语言:javascript
运行
复制
PageFormat newFormat =printJob.pageDialog(format);

在打印之前,打印机可能会修改页边距。

至少看一下调试器,看看它变成了什么样子。

另请注意,用于横向的Macintosh原生打印坐标系是颠倒的。

因此,可以尝试使用REVERSE_LANDSCAPE而不是横向(它可能会被翻转,但可能无法获得翻译列表)

票数 1
EN

Stack Overflow用户

发布于 2014-12-05 15:13:16

处理setImageableArea(),更改值并尝试。同样适用于mac的reverse_landscape。并设置A3大小: 1190 & 842,非十进制值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3768515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档