我正在使用JasperReports從我的Java應用程序進行打印。對於所有的顧客來說,所有的打印件都可以使用很長時間,但是最近我們已經安裝了適合所有柯尼卡美能達PagePro 1200或1350W打印機的顧客的軟件。所有這些客戶都會得到相同的結果 - 印刷是「延伸」 - 就像我在A5紙上打印A4報告一樣。除了我在A4上打印A4以及在所有其他打印機上打印效果良好。在Konica-Minolta PagePro打印機上展開Java打印
有沒有人有任何想法可能是什麼原因?
這個問題似乎與https://stackoverflow.com/questions/15854722/jasper-report-printing-stretched類似,但在那裏提出的解決方法(與打印機紙張大小等相關)並未達到預期結果。
這裏是打印的例子:
這是打印應該是什麼樣子(有slighlty不同的數據,但我想這個問題是清楚的)
感謝您的任何建議。
編輯:
這個問題可以用一個簡單的直接調用打印API被複制:
import java.awt.*;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
/**
*
* @author MaCe
*/
public class PrintTest {
static Printable printable = new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
Graphics2D grx = (Graphics2D)graphics;
grx.drawLine(20,20, getPageWidth()/2, 20);
return Printable.PAGE_EXISTS;
}
};
protected static int getPageWidth() {
//width of A4 in 1/72 of inches
return 595;
}
protected static int getPageHeight() {
//height of A4 in 1/72 of inches
return 842;
}
public static void main(String args[]) throws PrinterException {
Frame f = new Frame();
f.show();
//Build a buggy print job using PrinterJob class
PrinterJob printJob = PrinterJob.getPrinterJob();
/**
* Fix for bug ID 6255588 from Sun bug database
*/
try {
printJob.setPrintService(printJob.getPrintService());
} catch (PrinterException e) {
}
PageFormat pageFormat = printJob.defaultPage();
Paper paper = pageFormat.getPaper();
printJob.setJobName("Buggy output");
pageFormat.setOrientation(PageFormat.PORTRAIT);
paper.setSize(getPageWidth() , getPageHeight());
paper.setImageableArea(
0,
0, getPageWidth(), getPageHeight());
pageFormat.setPaper(paper);
Book book = new Book();
book.append(printable, pageFormat, 1);
printJob.setPageable(book);
if (printJob.printDialog()) {
printJob.print();
}
//Build a good print job using PrintJob class
PrintJob pjob = f.getToolkit().getPrintJob(f, "Good output", null);
if (pjob!=null) {
Graphics g = pjob.getGraphics();
g.drawLine(20, 20, pjob.getPageDimension().width/2, 20);
pjob.end();
}
System.exit(0);
}
}
下面這段代碼生成兩個打印,在大多數打印機無論是從左上角打印一行的紙張放在紙張的中間。然而,在上述打印機中,第一張打印紙在整個紙張上產生粗線(200%比例) - 即使在Minolta打印機上,第二種打印機也可以。
看起來像一個Java錯誤,因爲所有其他程序都能正常打印打印機。該錯誤被Sun接受,但由於無法在正確的打印機上執行操作而關閉(https://bugs.openjdk.java.net/browse/JDK-804159)
是的,保存爲PDF然後打印效果很好。請您詳細說明「切換到系統打印到Java打印」是什麼意思?谷歌搜索沒有透露任何相關信息......該平臺是Windows(包括7和XP)。 –