java jasper报表打印自定义纸张的问题,求大神指教,卡了2天了。
现在是一台电脑连接了2台打印机,一个打印单据,一个打印标签,2个是不同的模版。如果2个打印都不预览,1个使用默认打印机,一个指定打印机,第2个打印出来的纸张的规格就是取的第一个的设置。如果都使用预览出来,然后手动选择打印机打印出来的都没问题.只有使用默认打印机的是没问题的。
现在是需要设定纸张的大小,由于不是国标,自定义纸张,但是都是说高度要大于宽度。
有没有遇到此问题已经解决的,没有很多的分数,求指教!!!!!。
以下附部分代码:
/**
* 按指定打印机打印
* @param jasperPrint
*/
public static boolean directPrintByPrintName(final JasperPrint jasperPrint,String printer) {
if (jasperPrint != null) {
try {
if (checkPrinter(printer)) {
long start = System.currentTimeMillis();
final MediaPrintableArea area = new MediaPrintableArea(
0,
0,
(int) ((jasperPrint.getPageWidth()) * 0.353),// 将像素px转化成毫米mm,算法有待改进
(int) ((jasperPrint.getPageHeight()) * 0.353),
Size2DSyntax.MM);
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(area);
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
printServiceAttributeSet.add(new PrinterName(
printer, null));
final JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter
.setParameter(
JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
printRequestAttributeSet);
exporter
.setParameter(
JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
printServiceAttributeSet);
exporter
.setParameter(
JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
Boolean.FALSE);
exporter
.setParameter(
JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
Boolean.FALSE);
Thread thread = new Thread(new Runnable() {
public void run() {
try {
exporter.exportReport();
} catch (Exception ex) {
System.err.println(ex.getLocalizedMessage());
}
}
});
thread.start();
System.err.println("Printing time : "
+ (System.currentTimeMillis() - start));
}else{
Thread thread = new Thread(new Runnable() {
public void run() {
try {
JasperPrintManager.printReport(jasperPrint, false);
} catch (Exception ex) {
}
}
});
thread.start();
}
} catch (Exception ex) {
System.err.println(ex.getLocalizedMessage());
return false;
}
}
return true;
}