iTextSharp de code Html vers Pdf image src
Convertir des pages html au format pdf en utilisant iTextSharp
public static MemoryStream CreatePdfFromHtml(
string html, List<Attachment> attachments)
{
MemoryStream msOutput = new MemoryStream();
using (TextReader reader = new StringReader(html))
using (Document document = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(document, msOutput);
document.Open();
foreach (var a in attachments)
{
var image = iTextSharp.text.Image.GetInstance(a.File);
document.Add(image);
}
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
writer.CloseStream = false;
document.Close();
msOutput.Position = 0;
return msOutput;
}
}
Le code html contient plusieurs images embarquées de cette façon. Cette méthode a été privilégiée comme le même code HTML est envoyé par e-mail à l'aide de LinkedResources
dans un AlternateView
.
foreach (var a in attachments)
{
//not production code
html += string.Format("<img src=\"cid:{0}\"></img>", a.Id.ToString());
}
Toutefois, lorsque le pdf est généré, il n'y a aucun moyen de lier l'id de l'image avec la src
partie de la img
balise html.
En fin de compte, le document pdf contient toutes les images, et puis le code HTML avec le <img src...
ignoré.
J'ai lu à plusieurs solutions possibles en utilisant soit les Paragraphes ou les ImageAbsolutePosition mais ils ne semblent pas s'intégrer.
OriginalL'auteur Ovi | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Essayer de cette façon:
OriginalL'auteur Prasanth
Regarder ce site, ressemble à ce qui peut fonctionner.
EDIT:
Voici le code et le texte du Site Référencé
Les personnes qui ont travaillé avec iTextSharp et ses HTMLWorker classe pour le rendu d'une page HTML au format PDF sait de quoi je parle: si le code HTML contenant des images avec chemin d'accès relatif, vous aurez probablement la "friendly" jaune de l'écran!
Cela signifie que iTextShap essayé d'obtenir une image avec le chemin relatif "images/screenshot.3.jpg" tant que le fichier local "C:\images\screenshot.3.jpg", de sorte que l'image n'existe pas.
Après avoir fait beaucoup de recherches sur la façon de fournir à iTextSharp à la bonne image, j'ai trouvé que un gars a mentionné "IImageProvider" de l'interface qui donne à iTextSharp la capacité de trouver l'image à l'aide de méthodes personnalisées. Eh bien, j'ai fait un exemple d'utilisation de iTextSharp 5.0.2.0. vous pouvez le télécharger ici.
Tout d'abord, vous devez créer une classe qui implémente l'IImageProvider Interface:
Après cela, vous devez affecter cette image de fournisseur de la "img_provider" de l'interface de la propriété de la HTMLWorker classe avant de rendre le Contenu HTML:
Maintenant, lorsque vous effectuez le rendu HTML, il devrait travailler avec les images correspondantes.
Bien que c'est un exemple réalisé pour ASP.Net, l'idée principale est de savoir comment créer une Image personnalisée Fournisseur pour iTextSharp lors du rendu HTML et il pourrait être utilisé sur n'importe quelle application, en outre, cela pourrait vous aider non seulement pour obtenir des images à partir d'un emplacement relatif, je l'ai utilisé (avec plus de code, évidemment) pour obtenir des images à partir de SharePoint ou des Sites qui nécessitent une authentification.
OriginalL'auteur Pierre
ou vous pouvez convertir chemin d'accès virtuel au chemin d'accès physique au Serveur.MapPath comme ceci:
OriginalL'auteur mRizvandi
J'ai trouvé avant qu'il y est un problème lorsque vous utilisez des chemins relatifs dans les Itextsharp html de la génération des pdf comme vous l'avez mentionné, vous pouvez utiliser le ImageAbsolutePosition ce qui vous obligerait à utiliser paragraphe de la position de votre image correctement ou si vous souhaitez toujours utiliser de l'html
vous devez donner le chemin direct quelque chose comme
OriginalL'auteur COLD TOLD
OriginalL'auteur Venkatesh