Author: vsiveton
Date: Mon Jun  1 12:31:02 2009
New Revision: 780635

URL: http://svn.apache.org/viewvc?rev=780635&view=rev
Log:
DOXIA-327: Add PDF metadata

o set the foUserAgent with non empty documentModel meta
o updated the renderer

Modified:
    
maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java
    
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java

Modified: 
maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java?rev=780635&r1=780634&r2=780635&view=diff
==============================================================================
--- 
maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java
 (original)
+++ 
maven/doxia/doxia-sitetools/trunk/doxia-doc-renderer/src/main/java/org/apache/maven/doxia/docrenderer/pdf/fo/FoPdfRenderer.java
 Mon Jun  1 12:31:02 2009
@@ -62,31 +62,8 @@
     public void generatePdf( File inputFile, File pdfFile )
         throws DocumentRendererException
     {
-        if ( getLogger().isDebugEnabled() )
-        {
-            getLogger().debug( "Generating: " + pdfFile );
-        }
-
-        try
-        {
-            FoUtils.convertFO2PDF( inputFile, pdfFile, null );
-        }
-        catch ( TransformerException e )
-        {
-            if ( ( e.getCause() != null ) && ( e.getCause() instanceof 
SAXParseException ) )
-            {
-                SAXParseException sax = (SAXParseException) e.getCause();
-
-                StringBuffer sb = new StringBuffer();
-                sb.append( "Error creating PDF from " ).append( 
inputFile.getAbsolutePath() ).append( ":" )
-                    .append( sax.getLineNumber() ).append( ":" ).append( 
sax.getColumnNumber() ).append( "\n" );
-                sb.append( e.getMessage() );
-
-                throw new DocumentRendererException( sb.toString() );
-            }
-
-            throw new DocumentRendererException( "Error creating PDF from " + 
inputFile + ": " + e.getMessage() );
-        }
+        // Should take care of the document model for the metadata...
+        generatePdf( inputFile, pdfFile, null );
     }
 
     /** {...@inheritdoc} */
@@ -169,7 +146,7 @@
             IOUtil.close( writer );
         }
 
-        generatePdf( outputFOFile, pdfOutputFile );
+        generatePdf( outputFOFile, pdfOutputFile, documentModel );
     }
 
     private void mergeAllSources( Map filesToProcess, FoAggregateSink sink )
@@ -258,4 +235,41 @@
             }
         }
     }
+
+    /**
+     * @param inputFile
+     * @param pdfFile
+     * @param documentModel could be null
+     * @throws DocumentRendererException if any
+     * @since 1.1.1
+     */
+    private void generatePdf( File inputFile, File pdfFile, DocumentModel 
documentModel )
+        throws DocumentRendererException
+    {
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( "Generating: " + pdfFile );
+        }
+
+        try
+        {
+            FoUtils.convertFO2PDF( inputFile, pdfFile, null, documentModel );
+        }
+        catch ( TransformerException e )
+        {
+            if ( ( e.getCause() != null ) && ( e.getCause() instanceof 
SAXParseException ) )
+            {
+                SAXParseException sax = (SAXParseException) e.getCause();
+
+                StringBuffer sb = new StringBuffer();
+                sb.append( "Error creating PDF from " ).append( 
inputFile.getAbsolutePath() ).append( ":" )
+                  .append( sax.getLineNumber() ).append( ":" ).append( 
sax.getColumnNumber() ).append( "\n" );
+                sb.append( e.getMessage() );
+
+                throw new DocumentRendererException( sb.toString() );
+            }
+
+            throw new DocumentRendererException( "Error creating PDF from " + 
inputFile + ": " + e.getMessage() );
+        }
+    }
 }

Modified: 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java?rev=780635&r1=780634&r2=780635&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoUtils.java
 Mon Jun  1 12:31:02 2009
@@ -38,7 +38,9 @@
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.MimeConstants;
+import org.apache.maven.doxia.document.DocumentModel;
 import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
 
 /**
  * <code>FO Sink</code> utilities.
@@ -55,21 +57,42 @@
     /**
      * Converts an FO file to a PDF file using FOP.
      *
-     * @param fo the FO file.
-     * @param pdf the target PDF file.
-     * @param resourceDir The base directory for relative path resolution.
+     * @param fo the FO file, not null.
+     * @param pdf the target PDF file, not null.
+     * @param resourceDir The base directory for relative path resolution, 
could be null.
      * If null, defaults to the parent directory of fo.
+     * @param documentModel the document model to add PDF metadatas like 
author, title and keywords, could be null.
      * @throws javax.xml.transform.TransformerException In case of a 
conversion problem.
+     * @see 1.1.1
      */
-    public static void convertFO2PDF( File fo, File pdf, String resourceDir )
+    public static void convertFO2PDF( File fo, File pdf, String resourceDir, 
DocumentModel documentModel )
         throws TransformerException
     {
         FOUserAgent foUserAgent = FOP_FACTORY.newFOUserAgent();
-
         foUserAgent.setBaseURL( getBaseURL( fo, resourceDir ) );
+        foUserAgent.setCreator( System.getProperty( "user.name" ) );
 
-        OutputStream out = null;
+        if ( documentModel != null )
+        {
+            // http://xmlgraphics.apache.org/fop/embedding.html#user-agent
+            String authors = documentModel.getMeta().getAllAuthorNames();
+            if ( StringUtils.isNotEmpty( authors ) )
+            {
+                foUserAgent.setAuthor( authors );
+            }
+            String title = documentModel.getMeta().getTitle();
+            if ( StringUtils.isNotEmpty( title ) )
+            {
+                foUserAgent.setTitle( title );
+            }
+            String keywords = documentModel.getMeta().getAllKeyWords();
+            if ( StringUtils.isNotEmpty( keywords ) )
+            {
+                foUserAgent.setKeywords( keywords );
+            }
+        }
 
+        OutputStream out = null;
         try
         {
             try
@@ -82,7 +105,6 @@
             }
 
             Result res = null;
-
             try
             {
                 Fop fop = FOP_FACTORY.newFop( MimeConstants.MIME_PDF, 
foUserAgent, out );
@@ -94,7 +116,6 @@
             }
 
             Transformer transformer = null;
-
             try
             {
                 // identity transformer
@@ -114,6 +135,22 @@
     }
 
     /**
+     * Converts an FO file to a PDF file using FOP.
+     *
+     * @param fo the FO file, not null.
+     * @param pdf the target PDF file, not null.
+     * @param resourceDir The base directory for relative path resolution, 
could be null.
+     * If null, defaults to the parent directory of fo.
+     * @throws javax.xml.transform.TransformerException In case of a 
conversion problem.
+     * @see #convertFO2PDF(File, File, String, DocumentModel)
+     */
+    public static void convertFO2PDF( File fo, File pdf, String resourceDir )
+        throws TransformerException
+    {
+        convertFO2PDF( fo, pdf, resourceDir, null );
+    }
+
+    /**
      * Returns a base URL to be used by the FOUserAgent.
      *
      * @param fo the FO file.


Reply via email to