gpt4 book ai didi

java - 打印时在PC上添加裁剪

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:30 24 4
gpt4 key购买 nike

我已经有几年没有接触过Java了,但我多次被要求编写一些Java代码来打印图片和一些文本。它在 Mac 上工作正常,但从 Windows 机器打印时,打印输出会被裁剪。该图像是他的分辨率,大约 8x10,300DPI。

public class printClass implements Printable {

BufferedImage image;
private URL url;

printClass(URL url1) {
url = url1;
}

public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());

AffineTransform theAT = g2d.getTransform();

double theScaleFactor = (72d / 300d);

Font font = new Font("Arial", Font.PLAIN, 10);
Font font2 = new Font("Arial", Font.PLAIN, 5);

g2d.setFont(font);

if (page < 10) {
g2d.scale(theScaleFactor, theScaleFactor);
g2d.drawRenderedImage(image, null);
g2d.setTransform(theAT);
return PAGE_EXISTS;
} else {
return NO_SUCH_PAGE;
}

}public void init() {

try {
img = ImageIO.read(url);
image = (BufferedImage) img;
} catch (IOException e) {
System.out.println("Error: " + e);
}
PrinterJob job = PrinterJob.getPrinterJob();
PrinterResolution pr = new PrinterResolution(300, 300, PrinterResolution.DPI);
PrintRequestAttributeSet attrib = new HashPrintRequestAttributeSet();
PageFormat pFormat = job.getPageFormat(attrib);
Paper paper = pFormat.getPaper();
paper.setImageableArea(0.0,0.0,pFormat.getPaper().getWidth(), pFormat.getPaper().getHeight());
pFormat.setPaper(paper);


attrib.add(pr);
attrib.add(PrintQuality.HIGH);

job.setPrintable(this);

boolean ok = job.printDialog();
if (ok) {
try {
job.print(attrib);
} catch (PrinterException ex) {
}
}
}
}

URL 是正在打印的图像。这是 Java 小程序的一部分。此代码中缺少文本添加部分,但如下所示:

 g.drawString(markUpText, x, y);

最佳答案

好吧,我解决了我自己的问题。我没有将打印格式包含在可打印文件中。

 job.setPrintable(this,pFormat);

这会导致 Windows 中的打印质量和位置以及 Mac 中的位置出现一些其他有趣的问题。

我通过从属性中删除 DPI 和 PrintQuality.HIGH 解决了质量问题。

我在 prinatble 函数中使用以下代码解决了位置问题:

 g2d.translate(pf.getImageableX() + 30, pf.getImageableY()+30);

我还切换到了新的“份数”属性,以便我可以轻松控制要打印的份数。

仍然不确定这是否是解决此问题的最佳方法,但它确实有效!

关于java - 打印时在PC上添加裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com