ITextSharp - html vers pdf : appliquer css

Fermé
nagashima Messages postés 4280 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 26 nov. 2013 à 13:26
salut à tous !

Voilà je cherche (désespérément =p) à convertir du contenu web (une page) en pdf en conservant la mise en forme. Suite à un périple sur google qui perdure encore, j'ai trouvé l'objet iTextSharp ainsi qu'un moyen de mettre en forme du contenu en utilisant
StyleSheet 
,
Document
,
PdfWriter
et
HTMLWorker
:
ce code fonctionne :


string Html = @"<h1>h1</h1>
<p class='redSmallText'>Default paragraph</p>
<p class='redBigText'>A paragraph with CSS class</p>
";
StyleSheet styles = new StyleSheet();
styles.LoadStyle("redBigText", "size", "20pt");
styles.LoadStyle("redBigText", "color", "#ff0000");
styles.LoadStyle("redSmallText", "size", "8pt");
styles.LoadStyle("redSmallText", "color", "#ff0000");
using (Document document = new Document())
{
PdfWriter.GetInstance(document, new FileStream("c:\\temp\\test3.pdf", FileMode.Create));
document.Open();
List<IElement> objects = HTMLWorker.ParseToList(
new StringReader(Html), styles
);
foreach (IElement element in objects)
{
document.Add(element);
}
}
Ca fonctionne donc dans le cas où je donne le nom de classe et c'est tout.

De même, si je fais


string Html = @"<h1>h1</h1>
<p>Default paragraph</p>
<p>A paragraph with CSS class</p>
";
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.P, "color", "#FFCC66");
using (Document document = new Document())
{
PdfWriter.GetInstance(document, new FileStream("c:\\temp\\test3.pdf", FileMode.Create));
document.Open();
List<IElement> objects = HTMLWorker.ParseToList(
new StringReader(Html), styles
);
foreach (IElement element in objects)
{
document.Add(element);
}
}
en donnant donc uniquement les balise : ok.

par contre, si je veux combiner :


string Html = @"<h1>h1</h1>
<p>Default paragraph</p>
<p>A paragraph with CSS class</p>
";
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle(HtmlTags.H1, "color", "#FFCC66");
styles.LoadStyle("redBigText", "size", "20pt");
styles.LoadStyle("redBigText", "color", "#ff0000");
styles.LoadStyle("redSmallText", "size", "8pt");
styles.LoadStyle("redSmallText", "color", "#ff0000");
using (Document document = new Document())
{
PdfWriter.GetInstance(document, new FileStream("c:\\temp\\test3.pdf", FileMode.Create));
document.Open();
List<IElement> objects = HTMLWorker.ParseToList(
new StringReader(Html), styles
);
foreach (IElement element in objects)
{
document.Add(element);
}
}

seul mon h1 est mit en forme (j'ai essayer, ca ne vient pas du fait qu'il soit en premier => dès qu'on utilise la mise en forme par tag, elle prend le dessus).

Quelqu'un pourrai-t'il m'éclairer ? J'essaye d'avancer seul mais là je lutte -_-'

merci d'avance.
naga

PS: le but final est de générer un pdf par appel d'une page, soit pouvoir traiter un contenu html/css et générer moi même le style/contenu du pdf dynamiquement
A voir également: