2011-10-10 2 views
0

J'utilise flyingsaucer pour rendre HTML à une image, en utilisant Java2DRenderer:Comment faire une soucoupe volante générer une image avec un fond transparent?

Map<Key,Object> renderingHints = new HashMap<Key,Object>(); 
renderingHints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); 
renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
renderingHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
renderingHints.put(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); 
hints = new RenderingHints(renderingHints); 

Java2DRenderer renderer = new Java2DRenderer(dom, width, height); 
renderer.setRenderingHints(renderingHints); 
renderer.getSharedContext().setDPI(DPI); 
renderer.setBufferedImageType(BufferedImage.TYPE_INT_ARGB); 
img = renderer.getImage(); 

Puis-je ajouter l'image rendu à un document PDF, mise à l'échelle pour l'adapter à la page.

com.lowagie.text.Document pdf = new com.lowagie.text.Document(isLandscape ? PageSize.A4.rotate() : PageSize.A4); 
pdf.setMargins(MARGIN, MARGIN, MARGIN, MARGIN); 
Rectangle ps = pdf.getPageSize(); 
PdfWriter.getInstance(pdf, outputStream); 
pdf.open(); 
com.lowagie.text.Image pdfImage = com.lowagie.text.Image.getInstance(img, null); 
pdfImage.scaleAbsolute(
ps.getWidth() - pdf.leftMargin() - pdf.rightMargin(), 
ps.getHeight() - pdf.topMargin() - pdf.bottomMargin() 
); 
pdf.add(pdfImage); 
pdf.close(); 

Le problème est que l'image rendue par FS a comme couleur de fond solide blanc ... pour que l'imprimante remplit la page entière avec un gris très clair (je crois que l'échelle transforme le solide blanc en gris clair). Comment puis-je forcer flyingsaucer à générer une image transparente afin que je puisse éviter ce problème?

Répondre

2

Pour Java2DRenderer il est un moyen par le sous-classement Java2DRender

final java.awt.Color TRANSPARENT = new Color(255, 255, 255, 0); 
final int imageType = BufferedImage.TYPE_INT_ARGB; 
final Java2DRenderer java2dRenderer = new Java2DRenderer(doc, width, height) { 
    @Override 
    protected BufferedImage createBufferedImage(final int width, final int height) { 
     final BufferedImage image = org.xhtmlrenderer.util.ImageUtil.createCompatibleBufferedImage(width, height, imageType); 
     org.xhtmlrenderer.util.ImageUtil.clearImage(image, TRANSPARENT); 
     return image; 
    } 
}; 
java2dRenderer.setBufferedImageType(imageType); 
Questions connexes