2011-02-08 40 views
5

Tôi sử dụng thư viện ITextSharp để chuyển đổi html sang pdf. Người dùng của tôi sử dụng câu ngôn ngữ ba tư trong các tệp html của cô ấy, Vì vậy, thư viện này không thể chuyển đổi từ tiếng Ba Tư.Tạo pdf từ tệp html persian bởi ITextSharp

Đối với quyết tâm này và đúng cho vấn đề còn lại tôi sử dụng mã dưới đây:

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

phải vào My sang trái và chuyển đổi từ Ba Tư đã được giải quyết, nhưng nó có một vấn đề khác.

Thuật toán của tôi không thể phân tích cú pháp và chuyển đổi nội dung của thẻ bảng sử dụng trong tệp html.

Bây giờ câu hỏi là: Làm thế nào để phân tích cú pháp tệp html có thẻ bảng, thẻ div và đoạn bằng câu tiếng Ba Tư và chuyển đổi nó thành pdf?

+0

"thuật toán của tôi không thể phân tích và chuyển đổi nội dung của thẻ bảng sử dụng trong file html . " - Có nghĩa là các đối tượng không chứa các bảng của tài liệu html gốc hoặc gì? – Roman

+1

Xin chào Kia _Salam aziz;) _ xem liên kết này http://hasheminezhad.com/itextsharp – Shahin

Trả lời

1

Hãy thử sử dụng http://code.google.com/p/wkhtmltopdf/

ứng dụng Đó này đọc trong một trang html và lưu nó như một pdf. Chỉ cần chạy điều đó trong C# bằng cách sử dụng kịch bản lệnh shell.

+0

Cảm ơn bạn đã phản hồi. Tôi thấy điều đó, nhưng tôi muốn sử dụng thư viện iTextSharp. Bạn có một giải pháp bằng cách sử dụng thư viện iTextSharp? –

+0

Liên kết bị hỏng .. = ( – oCcSking

3

iTextSharp cũng có thể phân tích thẻ bảng. nhưng nó không thiết lập các thuộc RTL của mình và bạn cần phải sửa chữa nó bản thân:

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

Thông tin thêm: (^)

+0

thông tin thêm tại đây: http://www.dotnettips.info/post/1464 – VahidN

Các vấn đề liên quan