2011-11-18 4 views
7

Sto generando PDF utilizzando iTextSharp.dll, ma il problema è che non sono in grado di applicare quel CSS. Ho un div:Non applicare il CSS durante la generazione di PDF utilizzando iTextsharp.dll

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

ora il mio codice .aspx.cs è come questo:

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

risposta

12

Ci sono un paio di cose che sta succedendo qui. Prima di tutto, il parser HTML/CSS in iText e iTextSharp è tutt'altro che completo. Sono decisamente molto potenti ma hanno ancora un modo per andare. Ogni versione migliora, quindi assicurati sempre di utilizzare la versione più recente.

In secondo luogo, ho visto più attività HTML/CSS in un componente aggiuntivo per iText/iTextSharp chiamato XMLWorker che potresti voler esaminare. Non si "caricano più stili", si passa semplicemente HTML/CSS non elaborati e si scoprono molte cose. È possibile vedere alcuni examples here, vedere un elenco di supported CSS attributes here, download it here (e ottenere i due file mancanti here e here).

Terzo, LoadTagStyle è per il caricamento di attributi di stile per tag HTML, non ID o classi CSS. Si desidera utilizzare LoadStyle per caricare per classe:

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

Purtroppo questo metodo ancora non fare quello che vuoi che faccia sempre. Ad esempio, per modificare la dimensione del carattere si potrebbe pensare che ci si dice:

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

Ma per farlo funzionare è possibile utilizzare solo dimensioni relative dei caratteri HTML (1,2, -1, ecc) o PT dimensioni ed è necessario utilizzare la proprietà size:

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

il LoadStyle sente onestamente come un ripensamento che è stato solo parzialmente completato e vi consiglio di non usarlo in realtà. Invece vi consiglio scrivere il attributi di stile direttamente in linea, se potete:

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

Ovviamente questo sconfigge i punti di CSS e ancora una volta, è per questo che stanno lavorando sul nuovo XMLWorker sopra.

Infine, per usare i font per nome è necessario registrarsi con loro iTextSharp prima, non andrà in cerca di loro:

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

Ciao questo è ok ... ma i cant applicare l'effetto colore di sfondo utilizzando ur sopra le cose ... vi prego di risolverlo ........... – Kartik

+1

Sfortunatamente l'unico modo per ottenere il supporto del colore di sfondo è usare le tabelle o disegnare forme da soli –

+0

Thnxs Chris Haas sir .... lo sto provando dagli ultimi due giorni ..... grazie per le tue informazioni utili ..... – Kartik

1

Nel caso che qualcuno continua ad avere problemi con questo. L'ultima versione di itextsharp (attualmente 5.3.2) migliora significativamente il processore HTMLWorker.

si può ottenere qui: http://sourceforge.net/projects/itextsharp/

1

Il modo corretto per fare riferimento al colore backgroud è attraverso la classe HtmlTags

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