2011-02-08 10 views
5

Używam biblioteki ITextSharp do konwersji html na pdf. Moi użytkownicy używają języka perskiego w swoich plikach html, więc ta biblioteka nie może przekształcić słowa perskiego.Utwórz plik PDF z perskiego pliku html przez ITextSharp

Aby rozwiązać ten problem i prawej do lewej problemu mogę użyć kodu poniżej:

 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); 
     } 

mojej prawej do lewej i konwertowania perski słowa został rozwiązany, ale mam inny problem.

Mój algorytm nie może parsować i konwertować zawartości znacznika tabeli używanego w pliku html.

Teraz pytanie brzmi: jak przeanalizować plik HTML, który ma tag tabeli, div i znacznik akapitu z językiem perskim i przekonwertować go do formatu pdf?

+0

„Mój algorytm nie można analizować i konwertować zawartość tagu tabeli, która korzysta w pliku html . " - Czy oznacza to, że obiekty nie zawierają tabel oryginalnego dokumentu html, czy co? – Roman

+1

Witaj Kia _Salam aziz;) _ zobacz ten link http://hasheminezhad.com/itextsharp – Shahin

Odpowiedz

1

Spróbuj użyć tego http://code.google.com/p/wkhtmltopdf/

że stosowanie czyta w stronę html i zapisuje go jako pdf. Po prostu uruchom tę rzecz w języku C# przy użyciu skryptu powłoki.

+0

Dziękuję za odpowiedź. Widzę to, ale chcę korzystać z biblioteki iTextSharp. Czy masz rozwiązanie przy użyciu biblioteki iTextSharp? –

+0

Link jest uszkodzony .. = ( – oCcSking

3

iTextSharp potrafi również analizować znaczniki tabeli. ale nie określa jego właściwości RTL i trzeba go naprawić samemu:

  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); 
        } 
       } 
      } 
     } 

Więcej informacji: (^)

+0

więcej informacji tutaj: http://www.dotnettips.info/post/1464 – VahidN

Powiązane problemy