2012-08-30 65 views
2

我有一個列表java.awt.Image,它們每個都有300 DPI的分辨率。我想打印它們,當我開始打印這些圖像(使用javax.PrintService API)時,只打印了一些圖像,因爲Java的Print/3D類默認使用72DPI(相對於我的圖像的300 DPI)。但是,當我使用72 DPI(與Java默認設置相同的分辨率)的圖像時,所有圖像都可以正常打印(打印整個圖像時,不僅僅是它的一部分)。Java。在不縮放的情況下打印高分辨率圖像

問題:在哪裏可以設置我的圖像的打印分辨率以適應打印區域?

我試圖設置PrintRequestAttributeSet.add(new PrinterResolution(300, 300, ResolutionSyntax.DPI))但這沒有效果。

現在,我縮放我的圖像以適應打印區域,但縮放圖像後,我失去了質量,因此打印的文檔不可讀。

+1

你能告訴我們你正在使用什麼版本的java – fftk4323

+0

@ fftk4323 Java 1.6 – MyTitle

+0

請不要*如此劇烈地編輯你的問題。那些已經回答的人不公平,而且Stack Overflow的工作方式也不是這樣。如果您有新問題,請提出一個新問題。 –

回答

7

可以使用的drawImage(Image img時,INT DX1,詮釋DY1,詮釋DX2,詮釋DY2,詮釋SX1,詮釋SY1,詮釋SX2,INT SY2,ImageObserver的觀察者)

參數DX1,DY1,DX2和dy2定義了圖像必須適合的邊界。你需要做一些計算。這應該在該座標上打印高質量的圖像(不縮小)。

class MyPrintable implements Printable { 
    public int print(Graphics g, PageFormat pf, int pageIndex) { 
    if (pageIndex != 0) return NO_SUCH_PAGE; 

    Graphics2D g2 = (Graphics2D) g; 
    g2.printImage(....); 
    return PAGE_EXISTS; 
    } 
} 

然後

PrinterJob pj = PrinterJob.getPrinterJob(); 
... 
PageFormat pf = ...; 
... 
pj.setPrintable(new MyPrintable(), pf); 

你仍然需要設置分辨率像之前。

相關問題