Skip to content

Commit 55bab5f

Browse files
authored
Merge pull request #165 from rototor/basic-objects
WIP: Make a basic Objects Package
2 parents 09833be + 256be9c commit 55bab5f

File tree

13 files changed

+641
-51
lines changed

13 files changed

+641
-51
lines changed

openhtmltopdf-examples/pom.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@
5454
<artifactId>openhtmltopdf-java2d</artifactId>
5555
<version>${project.version}</version>
5656
</dependency>
57-
57+
<dependency>
58+
<groupId>com.openhtmltopdf</groupId>
59+
<artifactId>openhtmltopdf-objects</artifactId>
60+
<version>${project.version}</version>
61+
</dependency>
62+
5863
<dependency>
5964
<groupId>com.vladsch.flexmark</groupId>
6065
<artifactId>flexmark</artifactId>
@@ -76,8 +81,14 @@
7681
<artifactId>jfreechart</artifactId>
7782
<version>1.5.0</version>
7883
</dependency>
84+
<dependency>
85+
<groupId>org.freemarker</groupId>
86+
<artifactId>freemarker</artifactId>
87+
<version>2.3.27-incubating</version>
88+
<type>jar</type>
89+
<scope>compile</scope>
90+
</dependency>
7991

80-
8192
<dependency>
8293
<groupId>junit</groupId>
8394
<artifactId>junit</artifactId>
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.openhtmltopdf.freemarker;
2+
3+
import com.openhtmltopdf.bidi.support.ICUBidiReorderer;
4+
import com.openhtmltopdf.bidi.support.ICUBidiSplitter;
5+
import com.openhtmltopdf.objects.StandardObjectDrawerFactory;
6+
import com.openhtmltopdf.pdfboxout.PdfBoxRenderer;
7+
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
8+
import com.openhtmltopdf.swing.NaiveUserAgent.DefaultUriResolver;
9+
import freemarker.cache.ClassTemplateLoader;
10+
import freemarker.template.*;
11+
12+
import java.io.ByteArrayOutputStream;
13+
import java.io.IOException;
14+
import java.io.StringWriter;
15+
import java.net.URL;
16+
import java.util.Locale;
17+
18+
public class FreeMarkerGenerator {
19+
private Configuration cfg;
20+
21+
public static class FreemarkerRootObject {
22+
public int countChar(String s, String ch) {
23+
int ret = 0;
24+
int idx = 0;
25+
while (true) {
26+
idx = s.indexOf(ch, idx);
27+
if (idx == -1)
28+
break;
29+
ret++;
30+
idx++;
31+
}
32+
return ret;
33+
}
34+
}
35+
36+
public FreeMarkerGenerator() {
37+
setupConfig();
38+
}
39+
40+
private void setupConfig() {
41+
Version ourVersion = Configuration.VERSION_2_3_27;
42+
cfg = new Configuration(ourVersion);
43+
cfg.setObjectWrapper(new DefaultObjectWrapper(ourVersion));
44+
cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);
45+
cfg.setDefaultEncoding("UTF-8");
46+
cfg.setOutputEncoding("UTF-8");
47+
cfg.setLocale(Locale.ENGLISH);
48+
cfg.setTemplateLoader(new ClassTemplateLoader(this.getClass(), "/freemarker"));
49+
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.DEBUG_HANDLER);
50+
}
51+
52+
public String generateHTML(String templateName, Locale locale, FreemarkerRootObject object)
53+
throws IOException, TemplateException {
54+
StringWriter stringWriter = new StringWriter();
55+
cfg.getTemplate(templateName, locale, "UTF-8").process(object, stringWriter);
56+
return stringWriter.toString();
57+
}
58+
59+
public byte[] generatePDF(String html) throws IOException {
60+
PdfRendererBuilder builder = new PdfRendererBuilder();
61+
builder.useUnicodeBidiSplitter(new ICUBidiSplitter.ICUBidiSplitterFactory());
62+
builder.useUnicodeBidiReorderer(new ICUBidiReorderer());
63+
builder.defaultTextDirection(PdfRendererBuilder.TextDirection.LTR);
64+
builder.withHtmlContent(html, "/freemarker");
65+
builder.useUriResolver(new DefaultUriResolver() {
66+
@Override
67+
public String resolveURI(String baseUri, String uri) {
68+
if (!uri.startsWith("/")) {
69+
// Classpath Resource
70+
URL resource = FreeMarkerGenerator.this.getClass().getResource(uri);
71+
if (resource != null)
72+
return resource.toString();
73+
resource = FreeMarkerGenerator.this.getClass().getResource(baseUri + "/" + uri);
74+
if (resource != null)
75+
return resource.toString();
76+
}
77+
return super.resolveURI(baseUri, uri);
78+
}
79+
});
80+
StandardObjectDrawerFactory objectDrawerFactory = new StandardObjectDrawerFactory();
81+
builder.useObjectDrawerFactory(objectDrawerFactory);
82+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
83+
builder.toStream(outputStream);
84+
PdfBoxRenderer pdfBoxRenderer = builder.buildPdfRenderer();
85+
try {
86+
pdfBoxRenderer.layout();
87+
pdfBoxRenderer.createPDF();
88+
} catch (Exception e) {
89+
pdfBoxRenderer.close();
90+
}
91+
outputStream.close();
92+
return outputStream.toByteArray();
93+
}
94+
}

openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
package com.openhtmltopdf.testcases;
22

3+
import java.awt.*;
4+
import java.awt.geom.Line2D;
5+
import java.awt.geom.Rectangle2D;
6+
import java.awt.image.BufferedImage;
7+
import java.io.*;
8+
import java.util.ArrayList;
9+
import java.util.Map;
10+
import java.util.logging.Level;
11+
12+
import javax.imageio.ImageIO;
13+
14+
import org.apache.pdfbox.io.IOUtils;
15+
import org.apache.pdfbox.util.Charsets;
16+
import org.w3c.dom.Element;
17+
318
import com.openhtmltopdf.bidi.support.ICUBidiReorderer;
419
import com.openhtmltopdf.bidi.support.ICUBidiSplitter;
520
import com.openhtmltopdf.extend.FSObjectDrawer;
@@ -10,6 +25,7 @@
1025
import com.openhtmltopdf.java2d.api.FSPageOutputStreamSupplier;
1126
import com.openhtmltopdf.java2d.api.Java2DRendererBuilder;
1227
import com.openhtmltopdf.mathmlsupport.MathMLDrawer;
28+
import com.openhtmltopdf.objects.StandardObjectDrawerFactory;
1329
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
1430
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder.TextDirection;
1531
import com.openhtmltopdf.render.DefaultObjectDrawerFactory;
@@ -19,20 +35,6 @@
1935
import com.openhtmltopdf.util.XRLog;
2036
import com.openhtmltopdf.util.XRLogger;
2137

22-
import org.apache.pdfbox.io.IOUtils;
23-
import org.apache.pdfbox.util.Charsets;
24-
import org.w3c.dom.Element;
25-
26-
import javax.imageio.ImageIO;
27-
28-
import java.awt.*;
29-
import java.awt.geom.Line2D;
30-
import java.awt.geom.Rectangle2D;
31-
import java.awt.image.BufferedImage;
32-
import java.io.*;
33-
import java.util.ArrayList;
34-
import java.util.Map;
35-
import java.util.logging.Level;
3638

3739
public class TestcaseRunner {
3840

@@ -100,7 +102,7 @@ public static void main(String[] args) throws Exception {
100102
runTestCase("transform");
101103

102104
runTestCase("quoting");
103-
105+
104106
runTestCase("math-ml");
105107

106108
/*
@@ -112,19 +114,13 @@ public static void main(String[] args) throws Exception {
112114

113115
/**
114116
* Will throw an exception if a SEVERE or WARNING message is logged.
115-
*
116-
* @param testCaseFile
117-
* @throws Exception
118117
*/
119118
public static void runTestWithoutOutput(String testCaseFile) throws Exception {
120119
runTestWithoutOutput(testCaseFile, false);
121120
}
122121

123122
/**
124123
* Will silently let ALL log messages through.
125-
*
126-
* @param testCaseFile
127-
* @throws Exception
128124
*/
129125
public static void runTestWithoutOutputAndAllowWarnings(String testCaseFile) throws Exception {
130126
runTestWithoutOutput(testCaseFile, true);
@@ -189,10 +185,8 @@ private static void renderPDF(String html, OutputStream outputStream) throws Exc
189185
}
190186

191187
private static DefaultObjectDrawerFactory buildObjectDrawerFactory() {
192-
DefaultObjectDrawerFactory objectDrawerFactory = new DefaultObjectDrawerFactory();
188+
DefaultObjectDrawerFactory objectDrawerFactory = new StandardObjectDrawerFactory();
193189
objectDrawerFactory.registerDrawer("custom/binary-tree", new SampleObjectDrawerBinaryTree());
194-
objectDrawerFactory.registerDrawer("jfreechart/pie", new JFreeChartPieDiagramObjectDrawer());
195-
objectDrawerFactory.registerDrawer("jfreechart/bar", new JFreeChartBarDiagramObjectDrawer());
196190
return objectDrawerFactory;
197191
}
198192

Binary file not shown.

0 commit comments

Comments
 (0)