SelectorRule label2Rule = stylesheet.getRuleForSelector(label2Selector, true);
label2Rule.set("font-size", new CSSLength(48, "px"));
label2Rule.set("font-family", new CSSQuotedString("Comic Sans MS"));
// create first chapter resource
OPSResource chapter1 = epub.createOPSResource("OPS/chapter1.html");
epub.addToSpine(chapter1);
// get chapter document
OPSDocument chapter1Doc = chapter1.getDocument();
// link our stylesheet
chapter1Doc.addStyleResource(style);
// add chapter to the table of contents
TOCEntry chapter1TOCEntry = toc.createTOCEntry("Chapter 1",
chapter1Doc.getRootXRef());
rootTOCEntry.add(chapter1TOCEntry);
// chapter XHTML body element
Element body1 = chapter1Doc.getBody();
// add a header
Element header1 = chapter1Doc.createElement("h1");
header1.add("One");
body1.add(header1);
// add a paragraph
Element paragraph1 = chapter1Doc.createElement("p");
StringBuffer sb1 = new StringBuffer();
for (int i = 1; i <= 6; i++)
sb1.append("This is sentence " + i
+ " of the first chapter's first paragraph. ");
paragraph1.add(sb1.toString());
body1.add(paragraph1);
// add SVG graphics area
SVGElement svg = chapter1Doc.createSVGElement("svg");
svg.setAttribute("viewBox", "0 0 400 200");
svg.setClassName("svgimage");
body1.add(svg);
// draw background
SVGElement bg = chapter1Doc.createSVGElement("rect");
bg.setAttribute("x", "1");
bg.setAttribute("y", "1");
bg.setAttribute("width", "398");
bg.setAttribute("height", "198");
bg.setAttribute("stroke", "black");
bg.setAttribute("stroke-width", "2");
bg.setAttribute("fill", "#FFF8EE");
svg.add(bg);
// draw a shape
SVGElement path = chapter1Doc.createSVGElement("path");
path.setAttribute("fill", "none");
path.setAttribute("stroke", "black");
path.setAttribute("stroke-width", "4");
String resistorPath = "M90 120h50l10 20l20-40l20 40l20-40l20 40l20-40l20 40l20-40l20 40l10-20h50";
path.setAttribute("d", resistorPath);
svg.add(path);
// draw a label
SVGElement label1 = chapter1Doc.createSVGElement("text");
label1.setClassName("label1");
label1.setAttribute("x", "150");
label1.setAttribute("y", "60");
label1.add("R = 30\u03A9");
svg.add(label1);
// draw rotated label
SVGElement label2 = chapter1Doc.createSVGElement("text");
label2.setClassName("label2");
label2.setAttribute("transform", "translate(40 110)rotate(-75)");
SVGElement t1 = chapter1Doc.createSVGElement("tspan");
t1.setAttribute("fill", "red");
t1.add("S");
label2.add(t1);
SVGElement t2 = chapter1Doc.createSVGElement("tspan");
t2.setAttribute("fill", "green");
t2.add("V");
label2.add(t2);
SVGElement t3 = chapter1Doc.createSVGElement("tspan");
t3.setAttribute("fill", "blue");
t3.add("G");
label2.add(t3);
svg.add(label2);
// create a small paragraph to use as a link target
Element target = chapter1Doc.createElement("p");
target.add("Link in the second chapter points here.");
body1.add(target);
// create second chapter resource
OPSResource chapter2 = epub.createOPSResource("OPS/chapter2.html");
epub.addToSpine(chapter2);
// get chapter document
OPSDocument chapter2Doc = chapter2.getDocument();
// link our stylesheet
chapter2Doc.addStyleResource(style);
// add chapter to the table of contents