2011-02-08 82 views
5

我使用ITextSharp库将html转换为pdf。 我的用户在她/他的html文件中使用了波斯语的句子,所以这个库不能转换波斯语。通过ITextSharp创建PDF文件的波斯语html文件

为了解决这个和从右到左的问题,我用波纹管代码:

 Document document = new Document(PageSize.A4, 80, 50, 30, 65); 
     PdfWriter.GetInstance(document, new FileStream(strPDFpath, FileMode.Create)); 
     document.Open(); 

     ArrayList objects; 
     document.NewPage(); 

     var stream = new StreamReader(strHTMLpath, Encoding.Default).ReadToEnd(); 
     objects = iTextSharp.text.html.simpleparser. 
     HTMLWorker.ParseToList(new StreamReader(strHTMLpath, Encoding.UTF8), styles);    

     BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\Tahoma.ttf", 
             BaseFont.IDENTITY_H, true); 
     for (int k = 0; k < objects.Count; k++) 
     { 
      PdfPTable table = new PdfPTable(1); 
      table.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 

      var els = (IElement)objects[k]; 
      foreach (Chunk el in els.Chunks) 
      { 
       #region set persian font 
       iTextSharp.text.Font f2 = new iTextSharp.text.Font(bf, el.Font.Size, 
               el.Font.Style, el.Font.Color); 
       el.Font = f2; 
       #endregion set persian font 

       #region Set right to left for persian words 
       PdfPCell cell = new PdfPCell(new Phrase(10, el.Content, el.Font)); 
       cell.BorderWidth = 0; 
       table.AddCell(cell); 
       #endregion Set right to left for persian words 
      } 
      //document.Add((IElement)objects[k]);     
      document.Add(table); 
     } 

     document.Close(); 
     Response.Write(strPDFpath); 
     Response.ClearContent(); 
     Response.ClearHeaders(); 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + strPDFpath); 
     Response.ContentType = "application/octet-stream"; 
     Response.WriteFile(strPDFpath); 
     Response.Flush(); 
     Response.Close(); 
     if (File.Exists(strPDFpath)) 
     { 
      File.Delete(strPDFpath); 
     } 

我的左和转换波斯的话语权得到了解决,但还有一个问题。

我的算法无法解析和转换html文件中使用的表标签的内容。

现在的问题是:如何解析具有表格标签,div和段落标记与波斯语的句子,并将其转换为PDF格式的HTML文件?

+0

“我的算法不能分析和转换,在HTML文件中使用table标签的内容“。 - 是否意味着对象不包含原始HTML文档的表格或什么? – Roman 2011-02-26 10:34:13

+1

Hello Kia _Salam aziz;)_看到这个链接http://hasheminezhad.com/itextsharp – Shahin 2011-03-06 22:04:05

回答

1

尝试使用此 http://code.google.com/p/wkhtmltopdf/

该应用程序在一个HTML页面读取,并将其保存为PDF。只需使用shell脚本在C#中运行该功能即可。

+0

谢谢你的回应。我明白了,但我想使用iTextSharp库。你有使用iTextSharp库的解决方案吗? – 2011-04-23 09:55:07

3

iTextSharp也可以解析表格标签。但它不设置其属性的RTL,你需要自己解决它:

  foreach (var htmlElement in parsedHtmlElements) 
      { 
       fixRunDirection(htmlElement); 
       pdfCell.AddElement(htmlElement); 
      } 

... 

     private static void fixRunDirection(IElement htmlElement) 
     { 
      if (!(htmlElement is PdfPTable)) return; 

      var table = (PdfPTable)htmlElement; 
      table.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 

      foreach (var row in table.Rows) 
      { 
       foreach (var cell in row.GetCells()) 
       { 
        cell.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 
        foreach (var element in cell.CompositeElements) 
        { 
         fixRunDirection(element); 
        } 
       } 
      } 
     } 

更多信息:(^

相关问题