title: iText: convert html and css to PDF in Java
body: <p>I'm trying to convert HTML to PDF. Firstly, I converted my HTML code to XHTML from the following link.
  <a href="http://www.cruto.com/resources/code-generators/code-converters/html-to-xhtml.asp" rel="nofollow noreferrer">http://www.cruto.com/resources/code-generators/code-converters/html-to-xhtml.asp</a></p>
  
  <p>Then, to test it, I created a HTML file with generated XHTML code and it displayed successfully on browser. After that, I tried to convert the HTML file to PDF with the following java code.</p>
  
  <pre><code>public static final String DEST = "C:/Users/Turgut/Desktop/test12.pdf";
  public static final String[] HTML = { "C:/Users/Turgut/Desktop/New Text Document (5).html", "C:/Users/Turgut/Desktop/New Text Document (5).html" };
  
  public static void main(String[] args) {
  
      File file = new File(DEST);
      file.getParentFile().mkdirs();
      new TestHtmlToPdf().createPdf(DEST);
  }
  
  public void createPdf(String file) {
      Document document = new Document();
      try {
          //String HTML = "C:/Users/Turgut/Desktop/test12.html";
          PdfWriter.getInstance(document, new FileOutputStream(file));
          document.open();
          String css = readCSS();
          for (String htmlfile : HTML) {
              String html = Utilities.readFileToString(htmlfile);
              ElementList list = XMLWorkerHelper.parseToElementList(html, css);
              for (Element e : list) {
                  document.add(e);
              }
              document.newPage();
          }
          document.close();
      }
      catch(IOException e) {
          e.printStackTrace();
      }
      catch(DocumentException ex) {
          ex.printStackTrace();
      }
  }
  
  private String readCSS() throws IOException {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      byte[] buffer = new byte[1024];
      int length;
      InputStream is = XMLWorkerHelper.class.getResourceAsStream("/default.css");
      while ((length = is.read(buffer)) != -1) {
          baos.write(buffer, 0, length);
      }
      return new String(baos.toByteArray());
  }
  </code></pre>
  
  <p>I have a style tag in the head tag like below.</p>
  
  <pre><code>&lt;style type="text/css"&gt;
                  body {
                  background-color: #FFFFFF;
                  font-family: 'Tahoma', "Times New Roman", Times, serif;
                  font-size: 11px;
                  color: #666666;
                  }
                  h1, h2 {
                  padding-bottom: 3px;
                  padding-top: 3px;
                  margin-bottom: 5px;
                  color : #000000;
                  text-transform: uppercase;
                  font-family: Arial, Helvetica, sans-serif;
                  }
                  h5 {
                  padding-bottom: 0px;
                  padding-top: 0px;
                  margin-top: 0px;
                  margin-bottom: 0px;
                  color : #000000;
                  font-style: normal;
                  font-family: Arial, Helvetica, sans-serif;
                  font-size: 1em;
                  text-transform:none;
                  }
                  h5x {
                  padding-bottom: 0px;
                  padding-top: 0px;
                  margin-top: 0px;
                  margin-bottom: 0px;
                  color : #000000;
                  font-style: bold;
                  font-family: Arial, Helvetica, sans-serif;
                  font-size: 1em;
                  text-transform:none;
                  }                   
                  h6 {
                  padding-bottom: 0px;
                  padding-top: 0px;
                  margin-top: 0px;
                  margin-bottom: 0px;
                  color : #666666;
                  font-style: normal;
                  font-family: Arial, Helvetica, sans-serif;
                  font-size: 1em;
                  text-transform:none;
                  }
  
                  h1 {
                  font-size: 1.4em;
                  text-transform:none;
                  }
                  h2 {
                  font-size: 1em;
                  color: brown;
                  }
                  h3 {
                  font-size: 1em;
                  color: #333333;
                  text-align: justify;
                  margin: 0;
                  padding: 0;
                  }
                  h4 {
                  font-size: 1.4em;
                  font-style: bold;
                  font-family: Arial, Helvetica, sans-serif;
                  color: #000000;
                  margin: 0;
                  padding: 0;
                  }
                  h4x {
                  font-size: 1.4em;
                  font-style: bold;
                  font-family: Arial, Helvetica, sans-serif;
                  color: #666666;
                  margin: 0;
                  padding: 0;
                  }
                  hr {
                  height:2px;
                  color: #000000;
                  background-color: #000000;
                  border-bottom: 1px solid #000000;
                  }
                  p, ul, ol {
                  margin-top: 1.5em;
                  }
                  ul, ol {
                  margin-left: 3em;
                  }
                  blockquote {
                  margin-left: 3em;
                  margin-right: 3em;
                  font-style: italic;
                  }
                  a {
                  text-decoration: none;
                  color: #70A300;
                  }
                  h7 {
                  font-size: 1.1em;
                  font-style: bold;
                  font-family: Arial, Helvetica, sans-serif;
                  color: #000000;
                  margin: 0;
                  padding: 0;
                  }
                  a:hover {
                  border: none;
                  color: #70A300;
                  }
                  #customerPartyTable {
                  border-width: 1px;
                  border-spacing: 0px;
                  border-style: solid;
                  border-color: #FFFFFF; 
                  border-collapse: collapse;
                  background-color: #FFFFFF
                  }
                  #lineTable {
                  border-width:2px;
                  border-spacing:;
                  border-style: solid;
                  border-color: #000000; 
                  border-collapse: collapse;
                  background-color:;
                  }
                  #lineTableTd {
                  border-width: 1px; 
                  padding: 1px;
                  border-style:  none solid none none;
                  border-color: black;
                  background-color: white;
                  }
                  #lineTableTh {
                  border-width: 1px; 
                  padding: 1px;
                  border-style:  none solid none none;
                  background-color: white;
                  }
                  #lineTableTrx {
                  border-width: 0px; 
                  padding: 0px;
                  border-style: solid;
                  border-color: #000000;
                  background-color: white;
                  -moz-border-radius:;
                  }
                  #lineTableThx {
                  border-width: 1px; 
                  padding: 1px;
                  border-style:  none solid solid none;
                  background-color: white;
                  }
                  #lineTableTr {
                  border-width: 0px; 
                  padding: 0px;
                  border-style: solid;
                  border-color: #000000;
                  background-color: white;
                  -moz-border-radius:;
                  }
                  #lineTableBudgetTd {
                  border-width: 0px;  
                  border-spacing:0px;
                  padding: 1px;
                  border-style: solid;
                  border-color: #000000; 
                  background-color: white;
                  -moz-border-radius:;
                  }                    
                  table {
                  border-spacing:0px;
                  }
                  td {
                  border-color:#000000; 
                  }&lt;/style&gt;
  </code></pre>
  
  <p>There is no problem to generate PDF file from the HTML file, but I can not read css block i guess. Because, PDF file and HTML file is not same. In the PDF file some text's colors are different from HTML file.</p>
  
  <p>How can I generate a PDF file with css? Thank you for suggestions.</p>