in src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxImageHandler.java [54:97]
public void handleImage(RenderingContext context, Image image, Rectangle destRect) throws IOException {
assert context instanceof PDFRenderingContext;
PDFRenderingContext pdfContext = (PDFRenderingContext)context;
PDFContentGenerator generator = pdfContext.getGenerator();
PDFPage targetPage = pdfContext.getPage();
assert image instanceof ImagePDF;
ImagePDF pdfImage = (ImagePDF)image;
try {
// destRect in points. Because destRect size is in millipoints.
float x = (float)destRect.getX() / 1000f; // Offset from left of page (IPD origin).
float y = (float)destRect.getY() / 1000f; // Offset from top of page (BPD origin).
float w = (float)destRect.getWidth() / 1000f; // Width of image.
float h = (float)destRect.getHeight() / 1000f; // Height of image.
AffineTransform pageAdjust = new AffineTransform();
AffineTransform at = generator.getAffineTransform();
if (at != null) {
pageAdjust.setToTranslation(
(float)(generator.getState().getTransform().getTranslateX()),
(float)(generator.getState().getTransform().getTranslateY() - h - y));
}
FontInfo fontinfo = (FontInfo)context.getHint("fontinfo");
Object stream = createStreamForPDF(pdfImage, targetPage, pdfContext.getUserAgent(),
pageAdjust, fontinfo, destRect, pdfContext.getUsedFieldNames(), pdfContext.getPageNumbers(),
pdfContext.getPdfLogicalStructureHandler(), pdfContext.getCurrentSessionStructElem());
if (stream == null) {
return;
}
if (stream instanceof String) {
if (pageAdjust.getScaleX() != 0) {
pageAdjust.translate(x * (1 / pageAdjust.getScaleX()), -y * (1 / -pageAdjust.getScaleY()));
}
generator.placeImage(pageAdjust, (String) stream);
} else {
generator.placeImage(x, y, w, h, (PDFXObject) stream);
}
pdfImage.close();
} catch (Throwable t) {
throw new RuntimeException(
"Error on PDF page: " + pdfImage.getInfo().getOriginalURI() + " " + t.getMessage(), t);
}
}