J'utilise ITextShaRP DLL pour convertir HTML en PDF.
Le HTML a des caractères unicode comme α, μ² ... Lorsque j'essaie de convertir HTML en PDF, les caractères Unicode ne sont pas affichés dans PDF. p>
ma fonction: p>
5 Réponses :
Lorsque vous traitez avec des personnages UNICODE et ITEXTSTHARP, vous devez prendre soin de plusieurs choses. Le premier que vous avez déjà fait et que vous obtenez une police qui prend en charge vos personnages. La deuxième chose est que vous souhaitez réellement enregistrer la police avec iTextShaparpe de sorte que sa consciente.
string lucidaTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "l_10646.ttf"); iTextSharp.text.FontFactory.Register(lucidaTff);
Si le contenu HTML est comme
Cela m'a aidé tellement. J'ai déjà eu une configuration de la feuille de style, donc je devais simplement définir la police dans le CSS ... Corps {Font-famille: 'Arial Unicode MS'! IMPORTANT; } Vous pouvez également utiliser le nouveau strack> xmlworkerhelper strong> (de la bibliothèque itextSharap.xmlworker fort>), vous devez remplacer la mise en oeuvre de FontFactory par défaut.
Merci mec, mais le résultat que je reçois, les lettres sont séparées les unes des autres. Il montre تست comme ت س ت
Après la mise à niveau vers 5.5.5 et utilisez le front Microsoft Yasei, cela fonctionne correctement maintenant. Voici les quelques étapes pour afficher des caractères Unicode dans la conversion de HTML en PDF forte> p>
Vérifiez ci-dessous le lien pour plus de compréhension .... strong> p>
Les caractères hindi, turcs et spéciaux sont également affichés lors de la conversion de HTML en PDF en utilisant cette méthode. Vérifiez ci-dessous l'image de démonstration. P>
Pourriez-vous élaborer votre réponse? Peut-être expliquer pourquoi votre solution fonctionne et quel était le problème avec le code d'origine. Ce doit être l'un des problèmes les plus difficiles que j'ai dû comprendre à ce jour. Les réponses sur le Web, y compris le débordement de la pile contenant des informations pauvres ou obsolètes. La réponse de Gregor est très proche. Je voulais redonner à cette communauté parce que j'ai passé de nombreuses heures à atteindre cette réponse. Voici un programme très simple que j'ai écrit en C # comme exemple pour mes propres notes. P>
α, β td> tr> td> td> tr> TR> div> corps> html> la fonction ci-dessus ne fait pas travail.
votes
void GeneratePdfFromHtml()
{
const string outputFilename = @".\Files\report.pdf";
const string inputFilename = @".\Files\report.html";
using (var input = new FileStream(inputFilename, FileMode.Open))
using (var output = new FileStream(outputFilename, FileMode.Create))
{
CreatePdf(input, output);
}
}
void CreatePdf(Stream htmlInput, Stream pdfOutput)
{
using (var document = new Document(PageSize.A4, 30, 30, 30, 30))
{
var writer = PdfWriter.GetInstance(document, pdfOutput);
var worker = XMLWorkerHelper.GetInstance();
document.Open();
worker.ParseXHtml(writer, document, htmlInput, null, Encoding.UTF8, new UnicodeFontFactory());
document.Close();
}
}
public class UnicodeFontFactory : FontFactoryImp
{
private static readonly string FontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts),
"arialuni.ttf");
private readonly BaseFont _baseFont;
public UnicodeFontFactory()
{
_baseFont = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}
public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color,
bool cached)
{
return new Font(_baseFont, size, style, color);
}
}
votes
votes
FontFactory.FontImp = new UnicodeFontFactory();
string convertedHtml = string.Empty;
foreach (char c in htmlText)
{
if (c < 127)
convertedHtml += c;
else
convertedHtml += "&#" + (int)c + ";";
}
List<IElement> htmlElements = XMLWorkerHelper.ParseToElementList(convertedHtml, null);
// add the IElements to the document
foreach (IElement htmlElement in htmlElements)
{
document.Add(htmlElement);
}
votes
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
namespace ExampleOfExportingPDF
{
class Program
{
static void Main(string[] args)
{
//Build HTML document
StringBuilder sb = new StringBuilder();
sb.Append("<body>");
sb.Append("<h1 style=\"text-align:center;\">ããã¯æ¥æ¬èªã®ããã¹ãã®ä¾ã§ãã</h1>");
sb.Append("</body>");
//Create our document object
Document Doc = new Document(PageSize.A4);
//Create our file stream
using (FileStream fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read))
{
//Bind PDF writer to document and stream
PdfWriter writer = PdfWriter.GetInstance(Doc, fs);
//Open document for writing
Doc.Open();
//Add a page
Doc.NewPage();
MemoryStream msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(sb.ToString()));
XMLWorkerHelper.GetInstance().ParseXHtml(writer, Doc, msHtml, null, Encoding.UTF8, new UnicodeFontFactory());
//Close the PDF
Doc.Close();
}
}
public class UnicodeFontFactory : FontFactoryImp
{
private static readonly string FontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts),
"arialuni.ttf");
private readonly BaseFont _baseFont;
public UnicodeFontFactory()
{
_baseFont = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}
public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color,
bool cached)
{
return new Font(_baseFont, size, style, color);
}
}
}
}