2011-05-04 65 views
2

我試圖使用xhtmlrenderer和java打印來打印標籤。但是,我似乎無法將分辨率設置爲正確,因此圖像打印出的所有圖像都很鋒利。這是我的打印代碼:無法以正確的分辨率打印

val paperWidth = 62.0f 
val paperHeight = 70.0f 
def print(printable: Printable) { 
    val printJob = PrinterJob.getPrinterJob 
    printJob.setPrintService(printService) 

    val pageFormat = printJob.defaultPage 
    pageFormat.setOrientation(PageFormat.LANDSCAPE) 
    val labelPaper = pageFormat.getPaper 
    labelPaper.setImageableArea(mm2points(0f), mm2points(0f), mm2points(paperWidth), mm2points(paperHeight)) 
    labelPaper.setSize(mm2points(paperWidth), mm2points(paperHeight)) 
    pageFormat.setPaper(labelPaper) 

    val book = new Book 
    book.append(printable, pageFormat) 
    printJob.setPageable(book) 

    val attributeSet = new HashPrintRequestAttributeSet 
    attributeSet.add(new PrinterResolution(300, 300, ResolutionSyntax.DPI)) 
    printJob.print(attributeSet) 
} 

...這是我這一代的代碼:

def apply(url:URL):Printable = { 
    val renderer = new XHTMLPanel(UserAgent) 
    renderer.getSharedContext.setDPI(300f) 
    renderer.getSharedContext.setUserAgentCallback(UserAgent) 
    renderer.getSharedContext.setCss(new StyleReference(UserAgent)) 
    renderer.setDocument(url.toExternalForm) 
    new XHTMLPrintable(renderer) 
} 

在缺少了什麼在這裏,我的損失。我嘗試在xhtmlrenderer源和打印機目標上設置dpi,但似乎沒有任何影響。

順便說一句:我試圖在Mac OS X上的Brother QL-560上打印。我可以從相同尺寸的預覽中以相同質量打印相同的圖像。

更新:新增圖像示例。 Difference between print from Mac Preview and java print api

更新:使用xhtmlrenderer創建PDF,然後通過PDF渲染器(http://java.net/projects/pdf-renderer/)打印的伎倆。印刷品現在是完美的。

回答

1

很難說沒有一個例子是什麼問題。例如,您嘗試打印哪張圖片?它有什麼決議?

爲了確保它不是打印機驅動程序,我建議打印到PDF。這有幫助嗎?

如果不是:將預覽打印到PDF。這看起來如何?放大時會發生什麼?

+0

上面的圖像上的兩個打印使用相同的圖像(第一次與java打印,第二次與Mac預覽)有顯着的差異。打印到普通激光打印機也會出現同樣的問題。這讓我相信它的行爲奇怪的xhtml渲染器。我還沒有輪到打印到PDF格式。 – thoredge 2011-05-04 11:04:13

+0

較低的打印輸出看起來像一個矢量圖像(不是像素圖像)。你是怎麼創造的? – 2011-05-06 10:25:03

+0

它實際上是分辨率爲341x108(具有抗鋸齒)的完全相同的圖像,打印機似乎可以非常有效地使用 – thoredge 2011-05-06 10:32:32