2011-11-18 9 views
7

Tôi đang tạo PDF bằng iTextSharp.dll, nhưng vấn đề là tôi không thể áp dụng CSS đó. Tôi có một div:Không áp dụng CSS khi tạo PDF bằng iTextsharp.dll

<div id="personal" class="headerdiv"> 
     Personal Data 
</div> 

nay đang .aspx.cs của tôi là như thế này:

iTextSharp.text.html.simpleparser.StyleSheet styles = new   iTextSharp.text.html.simpleparser.StyleSheet(); 

    styles.LoadTagStyle("#headerdiv", "height", "30px"); 
    styles.LoadTagStyle("#headerdiv", "font-weight", "bold"); 
    styles.LoadTagStyle("#headerdiv", "font-family", "Cambria"); 
    styles.LoadTagStyle("#headerdiv", "font-size", "20px"); 
    styles.LoadTagStyle("#headerdiv", "background-color", "Blue"); 
    styles.LoadTagStyle("#headerdiv", "color", "White"); 
    styles.LoadTagStyle("#headerdiv", "padding-left", "5px"); 

    HTMLWorker worker = new HTMLWorker(document); 
    worker.SetStyleSheet(styles); 


    // step 4: we open document and start the worker on the document 
    document.Open(); 
    worker.StartDocument(); 
    // step 5: parse the html into the document  
    worker.Parse(reader); 
    // step 6: close the document and the worker  
    worker.EndDocument(); 
    worker.Close(); 
    document.Close(); 

Trả lời

12

Có một vài điều xảy ra ở đây. Đầu tiên và quan trọng nhất, trình phân tích cú pháp HTML/CSS trong iText và iTextSharp đã hoàn thành. Chúng chắc chắn rất mạnh nhưng vẫn có cách để đi. Mỗi phiên bản trở nên tốt hơn nên luôn đảm bảo rằng bạn đang sử dụng phiên bản mới nhất.

Thứ hai, tôi đã thấy nhiều hoạt động HTML/CSS hơn trong tiện ích bổ sung cho iText/iTextSharp được gọi là XMLWorker mà bạn có thể muốn xem. Bạn không "tải phong cách" nữa, bạn chỉ cần chuyển HTML/CSS thô vào và nó tính ra rất nhiều thứ. Bạn có thể thấy một số examples here, xem danh sách supported CSS attributes here, download it here (và nhận hai tệp bị thiếu herehere).

Thứ ba, LoadTagStyle là để tải thuộc tính kiểu cho thẻ HTML, không phải là ID hoặc Lớp CSS. Bạn muốn sử dụng LoadStyle để tải theo lớp học:

styles.LoadStyle("<classname>", "<attribute>", "<value>"); 

Thật không may phương pháp này vẫn không làm những gì bạn muốn làm luôn. Ví dụ, để thay đổi kích thước font bạn nghĩ rằng bạn muốn nói:

styles.LoadStyle("headerdiv", "font-size", "60ptx); 

Nhưng để có được nó để làm việc bạn chỉ có thể sử dụng tương đối cỡ chữ HTML (1,2, -1, vv) hoặc PT kích thước và bạn phải sử dụng size tài sản:

styles.LoadStyle("headerdiv", "size", "60pt"); 
//or 
styles.LoadStyle("headerdiv", "size", "2"); 

các LoadStyle thành thật cảm thấy như một suy nghĩ rằng đã được hoàn thành chỉ một phần và tôi khuyên bạn nên không sử dụng nó trên thực tế. Thay vào đó, tôi khuyên bạn nên viết thuộc tính kiểu trực tiếp nếu bạn có thể:

string html = "<div id=\"personal\" class=\"headerdiv\" style=\"padding-left:50px;font-size:60pt;font-family:Cambria;font-weight:700;\">Personal Data</div>"; 

Rõ ràng điều này đánh bại điểm CSS và một lần nữa, đó là lý do tại sao chúng hoạt động trên XMLWorker mới ở trên.

Cuối cùng, sử dụng phông chữ theo tên bạn phải đăng ký với iTextSharp đầu tiên, nó sẽ không đi tìm kiếm chúng:

iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria"); 
+0

Xin chào đây là ok ... nhưng tôi không thể áp dụng các hiệu ứng màu nền sử dụng ur trên những điều ... plz cho tôi giải pháp đó ........... – Kartik

+1

Thật không may là chỉ có hai cách để có được hỗ trợ màu nền là sử dụng bảng hoặc để vẽ hình dạng trên của riêng bạn –

+0

Thnxs Chris Haas sir .... tôi đang cố gắng nó kể từ hai ngày qua ..... thnxs cho thông tin hữu ích ur ..... – Kartik

1

Trong trường hợp ai đó vẫn còn có vấn đề với điều này. Phiên bản mới nhất của itextsharp (hiện tại là 5.3.2) cải thiện đáng kể bộ xử lý HTMLWorker.

bạn có thể lấy nó ở đây: http://sourceforge.net/projects/itextsharp/

1

Cách đúng để tham khảo các màu backgroud là thông qua các lớp HtmlTags

styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");