iTextSharp HTMLWorker ParseHTML Tablestyle et PDFStamper
Salut j'ai réussi à utilisé un HTMLWorker pour convertir un gridview à l'aide de asp.NET /C#.
(1) j'ai appliqué un peu limitée style à la table, mais ne peut pas voir comment appliquer la tablestyle par exemple les lignes de la grille ou appliquer d'autres style de mise en forme comme une grande largeur de colonne par exemple, pour une colonne particulière.
(2) je voudrais mettre ce texte sur un pré-modèle existant qui contient un logo, etc. J'ai utilisé des PDF Stamper avant pour cela, mais ne vois pas comment je peux utiliser les deux PDFStamper et HTMLWorker à la fois. HTMLWorker besoin d'un Document qui met en œuvre iDocListener ... mais qui ne semble pas compatible avec un PDFStamper. Je crois que je suis à la recherche d'un moyen de créer un PDFStamper, écrire le titre etc, puis ajouter le HTML analysée à partir de la grille. L'autre problème est que l'analyse de contenu ne marche pas interagir avec les autres choses sur la page. Pour l'exemple ci-dessous j'ai ajouter un titre du morceau de la page. Plutôt que de commencer en dessous, le HTML analysée écrit plus haut. Comment puis-je placer /interagir analysé le contenu HTML avec le reste de ce qui est sur le document PDF ?
Merci d'avance
Rob
Ici"; s le code je l'ai déjà
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 30f, 0f);
HTMLWorker htmlWorker = new HTMLWorker(pdfDoc);
StyleSheet styles = new StyleSheet();
styles.LoadTagStyle("th", "size", "12px");
styles.LoadTagStyle("th", "face", "helvetica");
styles.LoadTagStyle("span", "size", "10px");
styles.LoadTagStyle("span", "face", "helvetica");
styles.LoadTagStyle("td", "size", "10px");
styles.LoadTagStyle("td", "face", "helvetica");
htmlWorker.SetStyleSheet(styles);
PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);
pdfDoc.Open();
//Title - but this gets obsured by data, doesnt move it down
Font font = new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD);
Chunk chunk = new Chunk(title, font);
pdfDoc.Add(chunk);
//Body
htmlWorker.Parse(sr);
OriginalL'auteur Rob | 2011-12-07
Vous devez vous connecter pour publier un commentaire.
Permettez-moi de vous donner quelques liens pour regarder de plus quand vous obtenez une chance:
Ces réponses d'aller plus loin dans ce qu'il se passe et je vous recommande la lecture lorsque vous obtenez une chance. Plus précisément, la seconde va vous montrer pourquoi vous avez besoin d'utiliser
pt
au lieu depx
.Pour répondre à votre première question, permettez-moi de vous montrer une autre façon d'utiliser le
HTMLWorker
classe. Cette classe possède une méthode statique sur elle appelleParseToList
qui va convertir le HTMLList<IElement>
. Les objets de la liste sont tous des iTextSharp des versions spécifiques de votre code HTML. Normalement, vous feriez unforeach
sur ceux et simplement les ajouter à un document, mais vous peut de les modifier avant de l'ajout de ce qui est ce que vous voulez faire. Voici le code qui prend une chaîne statique et ne fait que:J'espère que vous pouvez voir qu'une fois que vous obtenez l'accès à la crue
PdfPTable
vous pouvez l'ajuster si nécessaire.Pour répondre à votre deuxième question, si vous souhaitez utiliser la normale
Paragraph
etChunk
objets avec unPdfStamper
alors vous devez utiliser unPdfContentByte
objet. Vous pouvez obtenir ce à partir de votre tampon encreur dans l'une des deux façons, soit en demandant pour celui qui se trouve "au-dessus" d'un contenu existant,stamper.GetOverContent(int)
ou celui qui se trouve "au-dessous" du contenu existant,stamper.GetUnderContent(int)
. Les deux versions de prendre un seul paramètre de dire ce que la page de travailler avec. Une fois que vous avez unPdfContentByte
vous pouvez créer unColumnText
objet lié à elle et à l'utilisation de cet objetAddElement()
méthode pour ajouter le cours normal de vos éléments. Avant de le faire (et ceci répond à votre troisième question), vous devez créer au moins une "colonne". Quand je fais ce que j'ai généralement en créer un qui couvre essentiellement la totalité de la page. (Cette partie peut sembler bizarre, mais nous sommes essentiellement une seule ligne, une seule colonne de la table de la cellule pour nos objets.)Ci-dessous est un travail plein de C# 2010 WinForms application ciblant iTextSharp 5.1.1.0 qui montre tout ce qui précède. D'abord, il crée un générique PDF sur le bureau. Il crée ensuite un deuxième document basé sur le premier, ajoute un paragraphe et puis un peu de HTML. Voir les commentaires dans le code pour toutes les questions.
OriginalL'auteur Chris Haas
OriginalL'auteur b p sharma