You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by vs...@apache.org on 2009/06/08 14:58:35 UTC

svn commit: r782610 - in /maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main: java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java resources/org/apache/maven/doxia/docrenderer/pdf/itext/TOC.xslt

Author: vsiveton
Date: Mon Jun  8 12:58:35 2009
New Revision: 782610

URL: http://svn.apache.org/viewvc?rev=782610&view=rev
Log:
o improved the cover of iText to be similar to the fo renderer

Modified:
    maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java
    maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/resources/org/apache/maven/doxia/docrenderer/pdf/itext/TOC.xslt

Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java?rev=782610&r1=782609&r2=782610&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/itext/ITextPdfRenderer.java Mon Jun  8 12:58:35 2009
@@ -24,8 +24,10 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.Writer;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -46,6 +48,8 @@
 
 import org.apache.maven.doxia.docrenderer.DocumentRendererException;
 import org.apache.maven.doxia.docrenderer.pdf.AbstractPdfRenderer;
+import org.apache.maven.doxia.document.DocumentCover;
+import org.apache.maven.doxia.document.DocumentMeta;
 import org.apache.maven.doxia.document.DocumentModel;
 import org.apache.maven.doxia.document.DocumentTOCItem;
 import org.apache.maven.doxia.module.itext.ITextSink;
@@ -329,6 +333,8 @@
 
             transformer.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
 
+            // No doctype since itext doctype is not up to date!
+
             return transformer;
         }
         catch ( TransformerConfigurationException e )
@@ -348,55 +354,112 @@
      *
      * @param transformer the Transformer to set the parameters.
      * @param documentModel the DocumentModel to take the parameters from, could be null.
+     * @param iTextFile the iTextFile not null for the relative paths.
      */
-    private void addTransformerParameters( Transformer transformer, DocumentModel documentModel )
+    private void addTransformerParameters( Transformer transformer, DocumentModel documentModel, File iTextFile )
     {
         if ( documentModel == null )
         {
             return;
         }
 
-        if ( documentModel.getMeta().getTitle() != null )
-        {
-            transformer.setParameter( "title", documentModel.getMeta().getTitle() );
-        }
-
-        if ( documentModel.getMeta().getAuthor() != null )
-        {
-            transformer.setParameter( "author", documentModel.getMeta().getAuthor() );
+        // Meta parameters
+        boolean hasNullMeta = false;
+        if ( documentModel.getMeta() == null )
+        {
+            hasNullMeta = true;
+            documentModel.setMeta( new DocumentMeta() );
+        }
+        addTransformerParameter( transformer, "meta.author", documentModel.getMeta().getAllAuthorNames(),
+                                 System.getProperty( "user.name", "null" ) );
+        addTransformerParameter( transformer, "meta.creator", documentModel.getMeta().getCreator(),
+                                 System.getProperty( "user.name", "null" ) );
+        // see com.lowagie.text.Document#addCreationDate()
+        SimpleDateFormat sdf = new SimpleDateFormat( "EEE MMM dd HH:mm:ss zzz yyyy" );
+        addTransformerParameter( transformer, "meta.creationdate", documentModel.getMeta().getCreationDate_(),
+                                 sdf.format( new Date() ) );
+        addTransformerParameter( transformer, "meta.keywords", documentModel.getMeta().getAllKeyWords() );
+        addTransformerParameter( transformer, "meta.pagesize", documentModel.getMeta().getSubject(),
+                                 ITextUtil.getPageSize( ITextUtil.getDefaultPageSize() ) );
+        addTransformerParameter( transformer, "meta.producer", documentModel.getMeta().getGenerator(),
+                                 "Apache Doxia iText" );
+        addTransformerParameter( transformer, "meta.subject", documentModel.getMeta().getSubject(),
+                                 ( documentModel.getMeta().getTitle() != null ? documentModel.getMeta().getTitle()
+                                                 : "" ) );
+        addTransformerParameter( transformer, "meta.title", documentModel.getMeta().getTitle() );
+        if ( hasNullMeta )
+        {
+            documentModel.setMeta( null );
+        }
+
+        // cover parameter
+        boolean hasNullCover = false;
+        if ( documentModel.getCover() == null )
+        {
+            hasNullCover = true;
+            documentModel.setCover( new DocumentCover() );
+        }
+        addTransformerParameter( transformer, "cover.author", documentModel.getCover().getAllAuthorNames(),
+                                 System.getProperty( "user.name", "null" ) );
+        String companyLogo = getLogoURL( documentModel.getCover().getCompanyLogo(), iTextFile.getParentFile() );
+        addTransformerParameter( transformer, "cover.companyLogo", companyLogo );
+        addTransformerParameter( transformer, "cover.companyName", documentModel.getCover().getCompanyName() );
+        if ( documentModel.getCover().getCoverDate_() == null )
+        {
+            documentModel.getCover().setCoverDate( new Date() );
+            addTransformerParameter( transformer, "cover.date", documentModel.getCover().getCoverDate_() );
+            documentModel.getCover().setCoverDate( null );
         }
-
-        transformer.setParameter( "creationdate", new Date().toString() );
-
-        if ( documentModel.getMeta().getSubject() != null )
+        else
         {
-            transformer.setParameter( "subject", documentModel.getMeta().getSubject() );
+            addTransformerParameter( transformer, "cover.date", documentModel.getCover().getCoverDate_() );
         }
-
-        if ( documentModel.getMeta().getKeywords() != null )
+        addTransformerParameter( transformer, "cover.subtitle", documentModel.getCover().getCoverSubTitle() );
+        addTransformerParameter( transformer, "cover.title", documentModel.getCover().getCoverTitle() );
+        addTransformerParameter( transformer, "cover.type", documentModel.getCover().getCoverType() );
+        addTransformerParameter( transformer, "cover.version", documentModel.getCover().getCoverVersion() );
+        String projectLogo = getLogoURL( documentModel.getCover().getProjectLogo(), iTextFile.getParentFile() );
+        addTransformerParameter( transformer, "cover.projectLogo", projectLogo );
+        addTransformerParameter( transformer, "cover.projectName", documentModel.getCover().getProjectName() );
+        if ( hasNullCover )
         {
-            transformer.setParameter( "keywords", documentModel.getMeta().getKeywords() );
+            documentModel.setCover( null );
         }
+    }
 
-        transformer.setParameter( "producer", "Generated with Doxia by " + System.getProperty( "user.name" ) );
-
-        if ( ITextUtil.isPageSizeSupported( documentModel.getMeta().getTitle() ) )
+    /**
+     * @param transformer not null
+     * @param name not null
+     * @param value could be empty
+     * @param defaultValue could be empty
+     * @since 1.1.1
+     */
+    private void addTransformerParameter( Transformer transformer, String name, String value, String defaultValue )
+    {
+        if ( StringUtils.isEmpty( value ) )
         {
-            transformer.setParameter( "pagesize", documentModel.getMeta().getPageSize() );
+            addTransformerParameter( transformer, name, defaultValue );
         }
         else
         {
-            transformer.setParameter( "pagesize", "A4" );
+            addTransformerParameter( transformer, name, value );
         }
+    }
 
-        transformer.setParameter( "frontPageHeader", "" );
-
-        if ( documentModel.getMeta().getTitle() != null )
+    /**
+     * @param transformer not null
+     * @param name not null
+     * @param value could be empty
+     * @since 1.1.1
+     */
+    private void addTransformerParameter( Transformer transformer, String name, String value )
+    {
+        if ( StringUtils.isEmpty( value ) )
         {
-            transformer.setParameter( "frontPageTitle", documentModel.getMeta().getTitle() );
+            return;
         }
 
-        transformer.setParameter( "frontPageFooter", "Generated date " + new Date().toString() );
+        transformer.setParameter( name, value );
     }
 
     /**
@@ -412,7 +475,7 @@
     {
         Transformer transformer = initTransformer();
 
-        addTransformerParameters( transformer, documentModel );
+        addTransformerParameters( transformer, documentModel, iTextFile );
 
         try
         {
@@ -514,4 +577,36 @@
 
         return iTextFiles;
     }
+
+    /**
+     * @param logo
+     * @param parentFile
+     * @return the logo url or null if unable to create it.
+     * @since 1.1.1
+     */
+    private String getLogoURL( String logo, File parentFile )
+    {
+        if ( logo == null )
+        {
+            return null;
+        }
+
+        try
+        {
+            return new URL( logo ).toString();
+        }
+        catch ( MalformedURLException e )
+        {
+            try
+            {
+                return new File(parentFile, logo ).toURL().toString();
+            }
+            catch ( MalformedURLException e1 )
+            {
+                // nope
+            }
+        }
+
+        return null;
+    }
 }

Modified: maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/resources/org/apache/maven/doxia/docrenderer/pdf/itext/TOC.xslt
URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/resources/org/apache/maven/doxia/docrenderer/pdf/itext/TOC.xslt?rev=782610&r1=782609&r2=782610&view=diff
==============================================================================
--- maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/resources/org/apache/maven/doxia/docrenderer/pdf/itext/TOC.xslt (original)
+++ maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/resources/org/apache/maven/doxia/docrenderer/pdf/itext/TOC.xslt Mon Jun  8 12:58:35 2009
@@ -21,51 +21,86 @@
 <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
-    <!--  MetaData Parameters -->
-    <xsl:param name="title" />
-    <xsl:param name="author" />
-    <xsl:param name="creationdate" />
-    <xsl:param name="subject" />
-    <xsl:param name="keywords" />
-    <xsl:param name="producer" />
-    <xsl:param name="pagesize" />
+    <!-- MetaData Parameters -->
+    <xsl:param name="meta.author" />
+    <xsl:param name="meta.creator" />
+    <xsl:param name="meta.creationdate" />
+    <xsl:param name="meta.keywords" />
+    <xsl:param name="meta.pagesize" />
+    <xsl:param name="meta.producer" />
+    <xsl:param name="meta.subject" />
+    <xsl:param name="meta.title" />
 
     <!--  FrontPage Parameters -->
-    <xsl:param name="frontPageTitle" />
-    <xsl:param name="frontPageFooter" />
+    <xsl:param name="cover.author" />
+    <xsl:param name="cover.companyLogo" />
+    <xsl:param name="cover.companyName" />
+    <xsl:param name="cover.date" />
+    <xsl:param name="cover.subtitle" />
+    <xsl:param name="cover.title" />
+    <xsl:param name="cover.type" />
+    <xsl:param name="cover.version" />
+    <xsl:param name="cover.projectLogo" />
+    <xsl:param name="cover.projectName" />
 
     <xsl:template match="/itext">
-        <itext title="{$title}" author="{$author}" creationdate="{$creationdate}"
-            subject="{$subject}" keywords="{$keywords}" producer="{$producer}"
-            pagesize="{$pagesize}">
+      <itext
+        author="{$meta.author}"
+        creator="{$meta.creator}"
+        creationdate="{$meta.creationdate}"
+        keywords="{$meta.keywords}"
+        pagesize="{$meta.pagesize}"
+        producer="{$meta.producer}"
+        subject="{$meta.subject}"
+        title="{$meta.title}">
         <!-- Start Front page -->
         <paragraph>
             <chunk font="Helvetica" size="12.0" fontstyle="normal"
                 blue="0" green="0" red="0">
-                <table columns="1" left="false" right="false"
+                <table columns="2" left="false" right="false"
                     top="false" bottom="false" align="Center" width="100%">
                     <row>
                         <cell left="false" right="false" top="false"
                             bottom="false" horizontalalign="Left" verticalalign="middle">
-                            <image
-                                url="http://maven.apache.org/images/apache-maven-project.png"
-                                plainwidth="306.0" plainheight="27.867857" />
+                            <xsl:if test="$cover.companyLogo != ''">
+                                <image url="{$cover.companyLogo}" />
+                            </xsl:if>
+                        </cell>
+                        <cell left="false" right="false" top="false"
+                          bottom="false" horizontalalign="Left" verticalalign="middle">
+                          <xsl:if test="$cover.projectLogo != ''">
+                            <image url="{$cover.projectLogo}" />
+                          </xsl:if>
                         </cell>
                     </row>
                     <row>
                         <cell left="false" right="false" top="false"
                             bottom="false" horizontalalign="Center" verticalalign="middle"
-                            leading="330">
+                            leading="300" colspan="2">
                             <chunk font="Helvetica" size="24.0"
-                                fontstyle="bold" blue="0" green="0" red="0"><xsl:value-of select="$frontPageTitle"/></chunk>
+                              fontstyle="bold" blue="0" green="0" red="0"><xsl:value-of select="$cover.title"/></chunk>
+                        </cell>
+                    </row>
+                    <row>
+                        <cell left="false" right="false" top="false"
+                          bottom="false" horizontalalign="Center" verticalalign="middle"
+                          colspan="2">
+                          <chunk font="Helvetica" size="24.0"
+                            fontstyle="bold" blue="0" green="0" red="0"><xsl:value-of select="$cover.subtitle"/></chunk>
                         </cell>
                     </row>
                     <row>
                         <cell left="false" right="false" top="false"
                             bottom="false" horizontalalign="Left" verticalalign="middle"
-                            leading="330">
+                            leading="300">
+                            <chunk font="Helvetica" size="16.0"
+                              fontstyle="bold" blue="0" green="0" red="0"><xsl:value-of select="$cover.companyName"/></chunk>
+                        </cell>
+                        <cell left="false" right="false" top="false"
+                            bottom="false" horizontalalign="right" verticalalign="middle"
+                            leading="300">
                             <chunk font="Helvetica" size="16.0"
-                                fontstyle="bold" blue="0" green="0" red="0"><xsl:value-of select="$frontPageFooter"/></chunk>
+                              fontstyle="bold" blue="0" green="0" red="0"><xsl:value-of select="$cover.date"/></chunk>
                         </cell>
                     </row>
                 </table>
@@ -76,6 +111,7 @@
         <!-- Start TOC -->
         <newpage />
         <paragraph align="Center">
+          <!-- TODO i18N -->
             <chunk font="Helvetica" size="24" fontstyle="bold" blue="0"
                 green="0" red="0">Table Of Contents</chunk>
         </paragraph>