2011-05-04 63 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