diff --git a/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java b/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
index 101df334c..ed56f1bc8 100644
--- a/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
+++ b/openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
@@ -152,10 +152,7 @@ private static void renderPDF(String html, OutputStream outputStream) throws Exc
builder.useUnicodeBidiReorderer(new ICUBidiReorderer());
builder.defaultTextDirection(TextDirection.LTR);
builder.useSVGDrawer(new BatikSVGDrawer());
-
- DefaultObjectDrawerFactory objectDrawerFactory = new DefaultObjectDrawerFactory();
- objectDrawerFactory.registerDrawer("custom/binary-tree", new SampleObjectDrawerBinaryTree());
- builder.useObjectDrawerFactory(objectDrawerFactory);
+ builder.useObjectDrawerFactory(buildObjectDrawerFactory());
builder.withHtmlContent(html, TestcaseRunner.class.getResource("/testcases/").toString());
builder.toStream(outputStream);
@@ -165,9 +162,16 @@ private static void renderPDF(String html, OutputStream outputStream) throws Exc
}
}
+ private static DefaultObjectDrawerFactory buildObjectDrawerFactory() {
+ DefaultObjectDrawerFactory objectDrawerFactory = new DefaultObjectDrawerFactory();
+ objectDrawerFactory.registerDrawer("custom/binary-tree", new SampleObjectDrawerBinaryTree());
+ return objectDrawerFactory;
+ }
+
private static void renderPNG(String html, final String filename) throws Exception {
Java2DRendererBuilder builder = new Java2DRendererBuilder();
builder.useSVGDrawer(new BatikSVGDrawer());
+ builder.useObjectDrawerFactory(buildObjectDrawerFactory());
builder.withHtmlContent(html, TestcaseRunner.class.getResource("/testcases/").toString());
BufferedImagePageProcessor bufferedImagePageProcessor = new BufferedImagePageProcessor(
BufferedImage.TYPE_INT_RGB, 2.0);
diff --git a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DObjectDrawerReplacedElement.java b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DObjectDrawerReplacedElement.java
new file mode 100644
index 000000000..ad5de5094
--- /dev/null
+++ b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DObjectDrawerReplacedElement.java
@@ -0,0 +1,29 @@
+package com.openhtmltopdf.java2d;
+
+import com.openhtmltopdf.extend.FSObjectDrawer;
+import com.openhtmltopdf.extend.OutputDevice;
+import com.openhtmltopdf.extend.ReplacedElement;
+import com.openhtmltopdf.java2d.api.Java2DRendererBuilder;
+import com.openhtmltopdf.render.RenderingContext;
+import org.w3c.dom.Element;
+
+public class Java2DObjectDrawerReplacedElement extends Java2DRendererBuilder.Graphics2DPaintingReplacedElement
+ implements ReplacedElement {
+ private final Element e;
+ private final int dotsPerPixel;
+ private final FSObjectDrawer drawer;
+
+ public Java2DObjectDrawerReplacedElement(Element e, FSObjectDrawer drawer, int width, int height,
+ int dotsPerPixel) {
+ super(width, height);
+ this.e = e;
+ this.drawer = drawer;
+ this.dotsPerPixel = dotsPerPixel;
+ }
+
+ @Override
+ public void paint(OutputDevice outputDevice, RenderingContext ctx, double x, double y, final double width,
+ final double height) {
+ drawer.drawObject(e, x, y, width, height, outputDevice, ctx, dotsPerPixel);
+ }
+}
diff --git a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DRenderer.java b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DRenderer.java
index f12c50d66..9c94751bd 100644
--- a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DRenderer.java
+++ b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DRenderer.java
@@ -50,6 +50,7 @@ public class Java2DRenderer implements IJava2DRenderer {
private BidiReorderer _reorderer;
private final SVGDrawer _svgImpl;
+ private final FSObjectDrawerFactory _objectDrawerFactory;
private final FSPageProcessor _pageProcessor;
private static final int DEFAULT_DOTS_PER_PIXEL = 1;
@@ -74,12 +75,14 @@ public Java2DRenderer(
boolean testMode,
FSPageProcessor pageProcessor,
Graphics2D layoutGraphics,
- int initialPageNumber, short pagingMode) {
+ int initialPageNumber, short pagingMode,
+ FSObjectDrawerFactory objectDrawerFactory) {
_pagingMode = pagingMode;
_pageProcessor = pageProcessor;
_initialPageNo = initialPageNumber;
_svgImpl = svgImpl;
+ _objectDrawerFactory = objectDrawerFactory;
_outputDevice = new Java2DOutputDevice(layoutGraphics);
NaiveUserAgent uac = new NaiveUserAgent();
@@ -107,7 +110,7 @@ public Java2DRenderer(
Java2DFontResolver fontResolver = new Java2DFontResolver(_sharedContext);
_sharedContext.setFontResolver(fontResolver);
- Java2DReplacedElementFactory replacedFactory = new Java2DReplacedElementFactory(_svgImpl);
+ Java2DReplacedElementFactory replacedFactory = new Java2DReplacedElementFactory(_svgImpl, _objectDrawerFactory);
_sharedContext.setReplacedElementFactory(replacedFactory);
_sharedContext.setTextRenderer(new Java2DTextRenderer());
diff --git a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DReplacedElementFactory.java b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DReplacedElementFactory.java
index 9b869b0fb..f15439591 100644
--- a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DReplacedElementFactory.java
+++ b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/Java2DReplacedElementFactory.java
@@ -2,19 +2,19 @@
import org.w3c.dom.Element;
-import com.openhtmltopdf.extend.ReplacedElement;
-import com.openhtmltopdf.extend.SVGDrawer;
-import com.openhtmltopdf.extend.UserAgentCallback;
+import com.openhtmltopdf.extend.*;
import com.openhtmltopdf.layout.LayoutContext;
import com.openhtmltopdf.render.BlockBox;
import com.openhtmltopdf.swing.SwingReplacedElementFactory;
public class Java2DReplacedElementFactory extends SwingReplacedElementFactory {
- private SVGDrawer _svgImpl;
+ private final SVGDrawer _svgImpl;
+ private final FSObjectDrawerFactory _objectDrawerFactory;
- public Java2DReplacedElementFactory(SVGDrawer svgImpl) {
+ public Java2DReplacedElementFactory(SVGDrawer svgImpl, FSObjectDrawerFactory objectDrawerFactory) {
this._svgImpl = svgImpl;
+ this._objectDrawerFactory = objectDrawerFactory;
}
@Override
@@ -26,8 +26,14 @@ public ReplacedElement createReplacedElement(LayoutContext context, BlockBox box
}
String nodeName = e.getNodeName();
- if (nodeName.equals("svg") && _svgImpl != null)
+ if (nodeName.equals("svg") && _svgImpl != null) {
return new Java2DSVGReplacedElement(e, _svgImpl, cssWidth, cssHeight);
+ } else if (nodeName.equals("object") && _objectDrawerFactory != null) {
+ FSObjectDrawer drawer = _objectDrawerFactory.createDrawer(e);
+ if (drawer != null)
+ return new Java2DObjectDrawerReplacedElement(e, drawer, cssWidth, cssHeight,
+ context.getSharedContext().getDotsPerPixel());
+ }
/*
* Default: Just let the base class handle everything
diff --git a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java
index 33bfff118..a81ca5641 100644
--- a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java
+++ b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java
@@ -51,6 +51,7 @@ public class Java2DRendererBuilder {
private Graphics2D _layoutGraphics;
private int _initialPageNumber;
private short _pagingMode = Layer.PAGED_MODE_PRINT;
+ private FSObjectDrawerFactory _objectDrawerFactory;
public static enum TextDirection { RTL, LTR; }
public static enum PageSizeUnits { MM, INCHES }
@@ -411,9 +412,19 @@ public Java2DRenderer buildJava2DRenderer() {
_layoutGraphics = bf.createGraphics();
}
- return new Java2DRenderer(doc, unicode, _httpStreamFactory, _resolver, _cache, _svgImpl, pageSize, _replacementText, _testMode, _pageProcessor, _layoutGraphics, _initialPageNumber, _pagingMode);
+ return new Java2DRenderer(doc, unicode, _httpStreamFactory, _resolver, _cache, _svgImpl, pageSize, _replacementText, _testMode, _pageProcessor, _layoutGraphics, _initialPageNumber, _pagingMode, _objectDrawerFactory);
}
+ /**
+ * Set a factory for <object> drawers
+ * @param objectDrawerFactory Object Drawer Factory
+ * @return this for method chaining
+ */
+ public Java2DRendererBuilder useObjectDrawerFactory(FSObjectDrawerFactory objectDrawerFactory) {
+ this._objectDrawerFactory = objectDrawerFactory;
+ return this;
+ }
+
public static abstract class Graphics2DPaintingReplacedElement extends EmptyReplacedElement {
protected Graphics2DPaintingReplacedElement(int width, int height) {
super(width, height);
diff --git a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfRendererBuilder.java b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfRendererBuilder.java
index 614a426c3..95a889e65 100644
--- a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfRendererBuilder.java
+++ b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfRendererBuilder.java
@@ -398,11 +398,11 @@ public PdfRendererBuilder useFont(FSSupplier supplier, String fontF
/**
* Set a factory for <object> drawers
- * @param _objectDrawerFactory Object Drawer Factory
+ * @param objectDrawerFactory Object Drawer Factory
* @return this for method chaining
*/
- public PdfRendererBuilder useObjectDrawerFactory(FSObjectDrawerFactory _objectDrawerFactory) {
- this._objectDrawerFactory = _objectDrawerFactory;
+ public PdfRendererBuilder useObjectDrawerFactory(FSObjectDrawerFactory objectDrawerFactory) {
+ this._objectDrawerFactory = objectDrawerFactory;
return this;
}
}