Package com.adobe.dp.epubtest

Source Code of com.adobe.dp.epubtest.HelloEPUB3

package com.adobe.dp.epubtest;

import java.io.FileOutputStream;

import com.adobe.dp.css.CSSLength;
import com.adobe.dp.css.CSSName;
import com.adobe.dp.css.CSSQuotedString;
import com.adobe.dp.css.CSSValue;
import com.adobe.dp.css.CSSValueList;
import com.adobe.dp.css.Selector;
import com.adobe.dp.css.SelectorRule;
import com.adobe.dp.epub.io.DataSource;
import com.adobe.dp.epub.io.OCFContainerWriter;
import com.adobe.dp.epub.io.ResourceDataSource;
import com.adobe.dp.epub.ncx.TOCEntry;
import com.adobe.dp.epub.opf.BitmapImageResource;
import com.adobe.dp.epub.opf.NCXResource;
import com.adobe.dp.epub.opf.OPSResource;
import com.adobe.dp.epub.opf.Publication;
import com.adobe.dp.epub.opf.StyleResource;
import com.adobe.dp.epub.ops.Element;
import com.adobe.dp.epub.ops.HyperlinkElement;
import com.adobe.dp.epub.ops.ImageElement;
import com.adobe.dp.epub.ops.OPSDocument;
import com.adobe.dp.epub.ops.SVGElement;
import com.adobe.dp.epub.style.Stylesheet;
import com.adobe.dp.otf.DefaultFontLocator;
import com.adobe.dp.otf.FontLocator;

/**
* Advanced epubgen example. Using bitmap images, font embedding, links and
* inline SVG.
*/
public class HelloEPUB3 {

  public static void main(String[] args) {

    try {

      // create new EPUB document
      Publication epub = new Publication();

      // set up title and author
      epub.addDCMetadata("title", "My Third EPUB");
      epub.addDCMetadata("creator", System.getProperty("user.name"));
      epub.addDCMetadata("language", "en");

      // prepare table of contents
      NCXResource toc = epub.getTOC();
      TOCEntry rootTOCEntry = toc.getRootTOCEntry();

      // create a stylesheet
      StyleResource style = epub.createStyleResource("OPS/styles.css");
      Stylesheet stylesheet = style.getStylesheet();

      // style h1 element
      Selector h1Selector = stylesheet.getSimpleSelector("h1", null);
      SelectorRule h1Rule = stylesheet.getRuleForSelector(h1Selector,
          true);
      h1Rule.set("color", new CSSName("gray"));
      CSSValue[] border = { new CSSLength(2, "px"), new CSSName("solid"),
          new CSSName("gray") };
      h1Rule.set("border-bottom", new CSSValueList(' ', border));
      h1Rule.set("text-align", new CSSName("right"));
      CSSValue[] margin = { new CSSLength(2, "em"),
          new CSSLength(8, "px"), new CSSLength(1, "em"),
          new CSSLength(0, "px") };
      h1Rule.set("margin", new CSSValueList(' ', margin));
      h1Rule.set("font-family", new CSSQuotedString("Adobe Garamond Pro"));

      // style p element
      Selector pSelector = stylesheet.getSimpleSelector("p", null);
      SelectorRule pRule = stylesheet.getRuleForSelector(pSelector, true);
      pRule.set("margin", new CSSLength(0, "px"));
      pRule.set("text-indent", new CSSLength(1, "em"));
      pRule.set("text-align", new CSSName("justify"));
      h1Rule.set("font-family", new CSSQuotedString("Chaparral Pro"));

      // style bitmap class (JPEG image)
      Selector bitmapSelector = stylesheet.getSimpleSelector(null,
          "bitmap");
      SelectorRule bitmapRule = stylesheet.getRuleForSelector(
          bitmapSelector, true);
      bitmapRule.set("width", new CSSLength(80, "%"));
      bitmapRule.set("max-width", new CSSLength(553, "px"));

      // style container class (container for JPEG image)
      Selector containerSelector = stylesheet.getSimpleSelector("p",
          "container");
      SelectorRule containerRule = stylesheet.getRuleForSelector(
          containerSelector, true);
      containerRule.set("text-align", new CSSName("center"));
      containerRule.set("text-indent", new CSSLength(0, "px"));
      CSSValue[] padval = { new CSSLength(0.5, "em"), new CSSLength(0, "px") };
      containerRule.set("padding", new CSSValueList(' ', padval));

      // style svgimage class (embedded SVG)
      Selector svgimageSelector = stylesheet.getSimpleSelector(null,
          "svgimage");
      SelectorRule svgimageRule = stylesheet.getRuleForSelector(svgimageSelector, true);
      svgimageRule.set("width", new CSSLength(80, "%"));
      CSSValue[] padval1 = { new CSSLength(0.5, "em"), new CSSLength(10, "%") };
      svgimageRule.set("padding", new CSSValueList(' ', padval1));

      // style label1 class (text in embedded SVG)
      Selector label1Selector = stylesheet.getSimpleSelector(null,
          "label1");
      SelectorRule label1Rule = stylesheet.getRuleForSelector(label1Selector, true);
      label1Rule.set("font-size", new CSSLength(36, "px"));
      label1Rule.set("font-family", new CSSQuotedString("Chaparral Pro"));

      // style label2 class (text in embedded SVG)
      Selector label2Selector = stylesheet.getSimpleSelector(null,
          "label2");
      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
      TOCEntry chapter2TOCEntry = toc.createTOCEntry("Chapter 2",
          chapter2Doc.getRootXRef());
      rootTOCEntry.add(chapter2TOCEntry);

      // chapter XHTML body element
      Element body2 = chapter2Doc.getBody();

      // add a header
      Element header2 = chapter1Doc.createElement("h1");
      header2.add("Two");
      body2.add(header2);

      // add a paragraph
      Element paragraph2 = chapter2Doc.createElement("p");
      StringBuffer sb2 = new StringBuffer();
      for (int i = 1; i <= 6; i++)
        sb2.append("This is sentence " + i
            + " of the second chapter's first paragraph. ");
      paragraph2.add(sb2.toString());
      body2.add(paragraph2);

      // add a bitmap resource
      DataSource dataSource = new ResourceDataSource(HelloEPUB3.class,
          "cassini.jpg");
      BitmapImageResource imageResource = epub.createBitmapImageResource(
          "OPS/images/cassini.jpg", "image/jpeg", dataSource);

      // add a bitmap image
      Element container = chapter2Doc.createElement("p");
      container.setClassName("container");
      body2.add(container);
      ImageElement bitmap = chapter2Doc.createImageElement("img");
      bitmap.setClassName("bitmap");
      bitmap.setImageResource(imageResource);
      container.add(bitmap);

      // and another paragraph
      Element paragraph3 = chapter2Doc.createElement("p");
      StringBuffer sb3 = new StringBuffer();
      for (int i = 1; i <= 6; i++)
        sb3.append("This is sentence " + i
            + " of the second chapter's second paragraph. ");
      paragraph3.add(sb3.toString());
      body2.add(paragraph3);

      // add a link to the target paragraph in the first chapter
      HyperlinkElement a = chapter2Doc.createHyperlinkElement("a");
      a.setXRef(target.getSelfRef());
      a.add("Here is a link.");
      paragraph3.add(a);

      // embed fonts
      // NB: on non-Windows platforms you need to supply your own
      // FontLocator implementation or place fonts in ~/.epubfonts
      FontLocator fontLocator = DefaultFontLocator.getInstance();
      // epub.useAdobeFontMangling();
      epub.cascadeStyles();
      epub.addFonts(style, fontLocator);

      // save EPUB to an OCF container
      OCFContainerWriter writer = new OCFContainerWriter(
          new FileOutputStream("n:\\tmp\\hello.epub"));
      epub.serialize(writer);

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
TOP

Related Classes of com.adobe.dp.epubtest.HelloEPUB3

TOP
Copyright © 2015 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.