【发布时间】:2020-04-24 14:56:08
【问题描述】:
我正在尝试以 300 dpi 打印质量在 1 英寸 x 2 英寸标签上打印图像
public void print() {
RepaintManager currentManager = RepaintManager.currentManager(this);
currentManager.setDoubleBufferingEnabled(false);
PrinterJob job = PrinterJob.getPrinterJob();
try {
HashPrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
set.add(PrintQuality.HIGH);
set.add(MediaSize.findMedia(2.125f, 1f, MediaSize.INCH));
// 2" x 1" PrintableArea
set.add(new MediaPrintableArea(1f/16f, 0f, 2.0f, 1f, MediaPrintableArea.INCH));
set.add(new PrinterResolution(300, 300, ResolutionSyntax.DPI));
set.add(OrientationRequested.PORTRAIT);
job.setPrintable(this);
job.setJobName("Label");
job.print(set);
} catch (PrinterException e) {
// The job did not complete successfully
e.printStackTrace();
}
currentManager.setDoubleBufferingEnabled(true);
}
我的 BufferedImage 是 300 x 600 像素,应该适合
BufferedImage bi = freeze(this); //getting BufferedImage from JPanel
System.out.println("Image dim: "+bi.getWidth()+" X "+bi.getHeight());
控制台输出:图像暗淡:600 X 300。
但有问题的部分是当我打印出像这样的可成像尺寸时
double x=pf.getImageableX();
double y=pf.getImageableY();
int w = (int)Math.round(pf.getImageableWidth());
int h = (int)Math.round(pf.getImageableHeight());
System.out.println("X: "+x);
System.out.println("Y: "+y);
System.out.println("W: "+w);
System.out.println("H: "+h);
输出是:
X: 4.50141716003418
Y: 0.0
W: 144
H: 72
来自 h & w:我这里每英寸只有 72 个像素,任何调整大小都没有效果,这没有任何意义,
HashPrintRequestAttributeSet 请求 300 DPI 有什么用?
【问题讨论】: