Hi Jaleelak

I have used an XSL file to transform an infopath xml into the required format for itextsharp to generate a PDF.  I have found that it works well for what I am doing.

This code is not all mine as I copied it from one of the tutorials around the place.

dim pdfFileName as string = "c:\temp\test.pdf"
dim tmpTransformFile as string

Private Sub PDFForm()
 Console.WriteLine("Create PDF")
 tmpTransformFile = IO.Path.Combine(IO.Path.GetTempPath, IO.Path.GetTempFileName)

 InfopathToIText(tmpTransformFile)
 createPDF(tmpTransformFile)

 Console.WriteLine("Finished PDF")
End Sub

Public Sub InfopathToIText(ByVal strFilename As String)
 Dim writer As XmlTextWriter
 Dim doc As XmlDocument
 Try
  doc = New XmlDocument
  doc.LoadXml(thisXDocument.DOM.xml)

  ' Modify the XML file.
  Dim root As XmlElement = doc.DocumentElement

  ' Create an XPathNavigator to use for the transform.
  Dim nav As XPath.XPathNavigator = root.CreateNavigator()

  ' Transform the file.
  Dim xslt As Xsl.XslTransform = New Xsl.XslTransform

  xslt.Load(config.GetValue("xslt-file"))
  writer = New XmlTextWriter(strFilename, Nothing)
  xslt.Transform(nav, Nothing, writer, Nothing)

 Catch ex As Exception
  Throw ex
 Finally
  Try
   If writer.WriteState <> WriteState.Closed Then writer.Close()
  Catch
   'ignore exception
  End Try
 End Try
End Sub

Public Sub createPDF(ByVal strFilename As String)

 ' step 1: creation of a document-object
 Dim _document As Document = New Document(PageSize.A4, 14, 14, 14, 14)
 Dim fs As FileStream
 Try

  ' step 2:
  ' we create a writer that listens to the document
  ' and directs a XML-stream to a file
  Dim ndInvoiceNo As DOMNode = thisXDocument.DOM.selectSingleNode("/my:myFields/my:invoiceNo")
  fs = New FileStream(pdfFileName, FileMode.Create)
  PdfWriter.GetInstance(_document, fs)

  ' step 3: we create a parser
  Dim h As iTextSharp.text.xml.ITextHandler = New iTextSharp.text.xml.ITextHandler(_document)

  ' step 4: we parse the document
  h.Parse(strFilename)

 Catch bee As iTextSharp.text.BadElementException
  Console.WriteLine(bee.Message)
  Console.WriteLine(bee.StackTrace)

  Throw New ApplicationException("There is a problem creating the PDF", bee)
 Catch e As Exception
  Console.WriteLine(e.Message)
  Console.WriteLine(e.StackTrace)

  Throw New ApplicationException("There is a problem creating the PDF", e)
 Finally
  Try
   _document.Close()
   _document = Nothing
   fs.Close()
  Catch
   'ignore exception
  End Try
 End Try
End Sub


Hope this helps