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>