/** {@inheritDoc} */
public void handleElement(RendererContext context, Element el,
PDF3DAnnotation annot) throws Exception {
Vector3 pos = DOMUtil.get3DVectorAttribute(el, "at", true);
String text = el.getTextContent().trim();
if (text.length() == 0) {
return;
}
String intDest = DOMUtil.getAttribute(el, "internal-destination");
String resName = RESOURCE_NAME_PREFIX + textSpriteCount++;
// Generate text image
BufferedImage bi = getTextImage(text);
// Debugging generated images
// ImageIO.write(bi, "gif", new File("D:\\" + resName + ".gif"));
// Add generated image to PDF document (as 3D stream resource)
FO3DPDFDocument pdfDoc = (FO3DPDFDocument) context
.getProperty(PDFRendererContextConstants.PDF_DOCUMENT);
PDFResourceContext resContext = (PDFResourceContext) context
.getProperty(PDFRendererContextConstants.PDF_CONTEXT);
ImageInfo imgInfo = new ImageInfo(null, null);
ImageSize imgSize = new ImageSize();
imgSize.setSizeInPixels(bi.getWidth(), bi.getHeight());
imgSize.setResolution(72);
imgInfo.setSize(imgSize);
ImageBuffered img = new ImageBuffered(imgInfo, bi, null);
PDFImage pdfimage = new ImageRenderedAdapter(img, resName);
PDFXObject xobj = pdfDoc.addImage(resContext, pdfimage);
PDF3DStream stream = annot.getStreamSafely();
stream.addResource(resName, xobj);
// load JavaScript library code once (per 3D stream)
// this is because the DOM element could exist multiple times within
// the extension section.
if (!libLoadedList.contains(stream.referencePDF())) {
stream.addJSCode(getLibJSCode());
libLoadedList.add(stream.referencePDF());
}
// Add JavaScript code for initializing a new textsprite
stream.addJSCode("\naddTextSprite('"
+ JavaScriptUtil.escapeString(resName)
+ "',"
+ pos.toPDF3DJSString()
+ (intDest.length() > 0 ? ",'"
+ JavaScriptUtil.escapeString(intDest) + "'" : "")
+ ");");
}