How to Convert HTML to PDF

Hello everybody, recently I written a code for converting HTML to PDF. Initially, I thought of using iText PDF library to generate PDF file as an attachment while sending emails to the user. When I started working on it one of my team members told me that iText is no more open source. Without even knowing the actual details like from which version iText is not Open Source, I started using PDFBox jars for PDF related operations.

Even though PDFBox is one of the good libraries, I felt difficult to align the things inside PDF if content is changing dynamically. So, I thought of using some techniques like converting Image to PDF or HTML to PDF to avoid alignment problems but of no luck.

Finally, I started reading about iText license, based on information provided in wikipedia, I came to know that till 2.1.7 iText is available under LGPL, then again I started using iText for HTML to PDF convertion.

Following are the Code snippets for  HTML to PDF Conversion :

  1. Maven Dependency Details:
    <dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>0.1</version>
     </dependency>
     <dependency>
     <groupId>com.lowagie</groupId>
     <artifactId>itext</artifactId>
     <version>2.1.7</version>
     </dependency>
    
    <dependency>
     <groupId>org.xhtmlrenderer</groupId>
     <artifactId>flying-saucer-pdf</artifactId>
     <version>9.0.1</version>
     </dependency>
    
  2. Code to convert HTML to PDF:

Content in this post has been moved,  please Click Here…  for new location of the actual content

Sorry for the inconvenience. Please click the above link to continue to read.This is all because the content has been moved to the new website www.dailypaper.in/technical/.

Please follow me in the new website www.dailypaper.in/technical for more technical stuff.

Integrating DWR3 and Spring3

Exceptions while integrating DWR3 and Spring3.X annotation based MVC:

Following are the solutions for the Exception commonly occur while integration:

  1. “org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionParser for element [annotation-scan]”.

Solution:

  • Don’t use DWR with version number  DWR 3.0M1(available in Maven Repository)
  • Use DWR0-RC1-116 or later version. You can down load the latest version from
<repositories>
 <repository>
   <id>repository.sonatype.org -public</id>
   <name>DWR repository</name>
   <url>https://oss.sonatype.org/content/groups/public</url>
 </repository>
</repositories>
<dependency>
 <groupId>org.directwebremoting</groupId>
 <artifactId>dwr</artifactId>
 <version>3.0.0-rc3-SNAPSHOT</version>
</dependency>
 2.If you are trying to keep DWR and Spring Configuration in the same xml file there may be a chance to occur duplicate name found Exception. 
org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘DwrAnnotationURLMapper’: Initialization of bean failed;nested exception is org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘dwrController’: Invocation of init method failed;nested exception is java.lang.IllegalArgumentException:java.lang.IllegalArgumentException:Duplicate name found
Solution: keep separate dwr.xml and don’t import into spring-config.xml file instead configure in web.xml as shown below

<servlet>
<servlet-name>SampleDWR</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: dwr.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
  1. No adapter for handler [directwebremoting.spring.DwrController@1b3f577]: Does your handler implement a supported interface like Controller?

Solution: keep the following line of code in dwr.xml file

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

This is because mvc: annotation-driven element doesn’t declare a SimpleControllerHandlerAdapter

  1. If you are using Tomcat7 and DWR.0-RC1-116.jar file then you will get

“CSRF Security Error”: java.lang.SecurityException: CSRF Security Error
Solution:

  • One fix is to make the default Tomcat 7 tomcat/conf/context.xml (or your application’s context XML) put the useHTTPOnly on the Context element, like so:
    <Context useHttpOnly=”false”>
  • You can also fix this issue by using the latest DWR build

https://oss.sonatype.org/content/groups/public/org/directwebremoting/dwr/3.0.0-rc3-SNAPSHOT/