我目前在使用默认打印机打印jpeg文件时陷入困境。在我的程序中,当我从文件夹中选择图像时,我需要使用打印机默认设置(纸张尺寸,边距,方向)进行打印。
目前我得到这个:
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
final BufferedImage image = ImageIO.read(new File("car.jpg"));
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintService(printService);
printJob.setPrintable(new Printable(){
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException{
if (pageIndex == 0) {
graphics.drawImage(image, 0, 0, (int)pageFormat.getWidth(), (int)pageFormat.getHeight(), null);
return PAGE_EXISTS;
else return NO_SUCH_PAGE;
}
}
printJob.print();
现在,我的打印机的默认大小设置为:10 x 15厘米(4 x 6英寸),但是当我将程序设置为打印给定图像时,它仅显示一小部分纸张。
请帮帮我。
首先,请确保您将Graphics
上下文翻译成适合可成像的区域…
g2d.translate((int) pageFormat.getImageableX(),
(int) pageFormat.getImageableY());
接下来,请确保您使用的是imageableWidth
和imageableHeight
的PageFormat
double width = pageFormat.getImageableWidth();
double height = pageFormat.getImageableHeight();
而不是width
/ height
属性。其中许多东西都是从不同的上下文中翻译过来的…
graphics.drawImage(image, 0, 0, (int)width, (int)height, null);
该getImageableWidth/Height
页面方向的范围内返回页面大小
打印几乎都假设dpi为72(不要强调,打印API可以处理更高的分辨率,但是核心API假设72dpi)
这意味着10x15cm的页面应转换为283.46456664x425.19684996
像素。您可以通过使用System.out.println
并转储结果getImageableWidth/Height
到控制台来验证此信息。
如果您获得不同的设置,则可能是Java覆盖了默认页面属性
你有两个选择
显示PrintDialog
并确保选择了正确的页面设置
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new PrinterResolution(300, 300, PrinterResolution.DPI));
aset.add(new MediaPrintableArea(0, 0, 150, 100, MediaPrintableArea.MM));
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(new PrintTask()); // You Printable here
if (pj.printDialog(aset)) {
try {
pj.print(aset);
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
只需手动设置纸张/页面值…
public static void main(String[] args) {
PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat pf = pj.defaultPage();
Paper paper = pf.getPaper();
// 10x15mm
double width = cmsToPixel(10, 72);
double height = cmsToPixel(15, 72);
paper.setSize(width, height);
// 10 mm border...
paper.setImageableArea(
cmsToPixel(0.1, 72),
cmsToPixel(0.1, 72),
width - cmsToPixel(0.1, 72),
height - cmsToPixel(0.1, 72));
// Orientation
pf.setOrientation(PageFormat.PORTRAIT);
pf.setPaper(paper);
PageFormat validatePage = pj.validatePage(pf);
pj.setPrintable(new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
// Your code here
return NO_SUCH_PAGE;
}
}, validatePage);
try {
pj.print();
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
// The number of CMs per Inch
public static final double CM_PER_INCH = 0.393700787d;
// The number of Inches per CMs
public static final double INCH_PER_CM = 2.545d;
// The number of Inches per mm's
public static final double INCH_PER_MM = 25.45d;
/**
* Converts the given pixels to cm's based on the supplied DPI
*
* @param pixels
* @param dpi
* @return
*/
public static double pixelsToCms(double pixels, double dpi) {
return inchesToCms(pixels / dpi);
}
/**
* Converts the given cm's to pixels based on the supplied DPI
*
* @param cms
* @param dpi
* @return
*/
public static double cmsToPixel(double cms, double dpi) {
return cmToInches(cms) * dpi;
}
/**
* Converts the given cm's to inches
*
* @param cms
* @return
*/
public static double cmToInches(double cms) {
return cms * CM_PER_INCH;
}
/**
* Converts the given inches to cm's
*
* @param inch
* @return
*/
public static double inchesToCms(double inch) {
return inch * INCH_PER_CM;
}
我使用PdfiumViewer来打印PDF文件: 在我的,,和事件中,我没有执行任何操作,只是对文件进行一些日志。 PDF文件已打印,但文档每页的左右边距都被剪掉了,因此我正在尝试将每个PDF文档页面与默认打印机中当前默认选择的纸张尺寸相匹配。我该怎么做?
问题内容: 我需要用Java打印图像。因此我实现了接口方法。但是打印机始终只打印一些原始图像。如何使图像适合打印区域(A4),以便打印机能够打印整个图像,而不是整个图像?现在我的代码如下: 问题答案: 您需要按比例缩小图像以适合可用区域。
我正在尝试获取mongodb中存在的所有数据库的值,迭代所有数据库和集合,然后打印it文档。我可以打印作为变量传递集合的文档,但不能在所有数据库和集合上进行迭代(作为变量的值)。有人知道pymongo是否支持动态地作为值传递,而不是将集合和数据库作为变量本身传递?
我正在使用适用于Android的兄弟打印SDK。我的代码基于手册中所示的示例代码: } 当打印机的盖子打开时,flushPTTPrint()函数会立即返回,状态为ERROR\u cover\u open。这太棒了。 当打印机没有纸时,flushPTTPrint()函数仅在大约三分钟后返回,状态为ERROR_COMMUNICATION_ERROR。不太好。 问题:如何检测打印机何时缺纸?任何方法都可
我使用的是爱普生lx 300 II点阵打印机,我使用的是半信纸大小的纸张(拖拉机进纸),并且我已将自定义纸张大小设置为宽8.5英寸,高5.5英寸。 当我打印一页时,它打印得很好,但如果打印多页,第一页打印的很好,而对于其他页面,半个字母的大小没有继续(顶部有3/4空行,因此底部的文本打印在下一页的顶部)。我正在使用adobe阅读器打印从jasper报告导出的pdf文档,操作系统是windows7。
我尝试在A4纸上以横向打印JavaFX WebView (JavaFX 8_25)中的HTML页面,但它以纵向打印出来,字体很小 系统输出显示纵向方向 纸张=纸:A4 (210 x 297mm) 尺寸=594.90087890625x841.3598022460938 MM 东方=纵向左边缘=54.0 右边缘=54.0 顶部边缘=54.0 底部边缘=54.0 我发现以横向模式打印HTML页面的唯一