iTextSharp 5 polonais caractère
J'ai un problème avec le polonais de caractères à l'aide de itextSharp. Je veux créer un fichier pdf à partir de code html. Tout fonctionne bien, mais le polonais de caractères sont manquants. J'utilise la fonction inférieure:
private void createPDF(string html)
{
//MemoryStream msOutput = new MemoryStream();
TextReader reader = new StringReader(html);//step 1: creation of a document-object
Document document = new Document(PageSize.A4, 30, 30, 30, 30);
//step 2:
//we create a writer that listens to the document
//and directs a XML-stream to a file
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Test.pdf", FileMode.Create));
//step 3: we create a worker parse the document
HTMLWorker worker = new HTMLWorker(document);
//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();
}
Et Essayez de l'utiliser:
createPDF("ĄąćęĘłŁŃńóÓŚśŹźŻż");
J'essaie de définir:
BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, l'Encodage.UTF8.HeaderName, BaseFont.EMBEDDED);
writer.DirectContent.SetFontAndSize(bf, 16);
Mais il ne marche pas de travail
Avez-vous une idée??
Ce qui concerne
OriginalL'auteur dzajdol | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
Juste pour rouler ensemble à ce que @Mark Storer a dit:
Et quand vous l'appelez, entourez votre texte dans une police de caractères en utilisant le nom que vous avez enregistré ci-dessus:
Chris Hass - Vous sont les meilleurs. Après quelques heures de struggleing votre réponse m'a donné l'breakthourgh j'avais besoin!
OriginalL'auteur Chris Haas
J'AI EU LA RÉPONSE! =) (spécifiquement ciblées pour les polonais), je me sens obligé de le mettre ici, dans ce vieux thread, car je suis sûr que je ne serai pas le dernier à le trouver.
Je suis très déçu qu'il n'y a pas de bonnes réponses à cette... la plupart d'entre eux suggèrent d'utiliser la ARIALUNI.TTF dans votre dossier FONTS de Windows qui résultats dans votre fichier PDF à l'être PLUSIEURS fois plus grand. La solution n'a pas besoin d'être aussi radical...
Beaucoup d'autres donnent des exemples montrant l'encodage en cp1252 qui échoue sur les polices Arial et ne fonctionne pas avec l'Helvetica pour le texte polonais.
Je suis en utilisant iTextSharp 4.1.6... le truc... cp1257! Et vous pouvez l'utiliser avec BaseFont.Courier, BaseFont.Helvetica, BaseFont.Times-Roman
Cela fonctionne... et mes fichiers PDF sont minuscules (3 ko!)
Je vais tester plus tard et assurez-vous que je peux l'ouvrir et de lire ces dans Windows XP et Mac OSX et Windows 7.
Comment avez-vous BaseFont.CP1257? Je suis à la recherche à droite de code pour les Croates/Bosniaque . J'ai une prise en charge partielle, avec votre code ,pour les lettres. Merci
Peut-être que vous utilisez une version différente de itextsharp? Je suis en utilisant 4.1.6, car la version 5 de licence sont différentes. CP1257 devrait être dans Basefont... rien de spécial à faire ici. En fin de compte, j'ai utilisé CP1257 et Times new Roman. Il était "le plus sûr" de sorte que tous les lecteurs de PDF peut l'ouvrir et la taille du fichier était encore minime.
OriginalL'auteur Ralph N
Lors de la création de votre BaseFont, vous devez spécifier que vous souhaitez utiliser des caractères UniCode. Cette réponse montre comment.
OriginalL'auteur Stewbob
Que j'ai lu sur divers forums et stackoverflow questions, je n'ai pas trouvé de réponse avec une solution complexe pour les caractères spéciaux problème. J'ai essayé d'en fournir une en échange de tout à fait une longue réponse à la question. J'espère que cela va aider quelqu'un...
J'ai utilisé le
XMLWorker
de SourceForge commeHtmlWorker
est devenu depricated. Le problème avec les caractères spéciaux sont restés pensée. J'ai trouvé deux solutions qui fonctionnent réellement et peut être utilisé à la fois séparément et combinés.HTML & CSS solution
Chaque balise concernés doivent font-family style spécifié pour être interprété correctement par
ParseXHtml
méthode (je ne suis pas sûr pourquoi, la balise imbriquée styles héritage ne fonctionne pas ici, mais il semble qu'il n'a pas vraiment d'ou ça ne marche pas entièrement).Cette solution permet de modifier PDF résultant basé sur le code HTML uniquement, certains scénarios sans recompilation du code peut prendre place.
Simplifié de code (pour une application MVC) serait comme ça:
Contrôleur:
CSS:
La disposition de l'affichage
Afficher la page
À l'intérieur-police de code-en remplacement de la solution de
Dans cette solution, la police est retourné par un
IFontProvider
est modifié pour l'un contient (correct) représentation des caractères spéciaux et des BaseFont.IDENTITY_H encodage utilisé. L'avantage de cette approche est qu'il ya exactement une police qui est utilisée. C'est aussi au détriment de la sorte.Aussi, ces solutions s'attend à ce que la police est partie du projet (*.ttf fichier(s) placé dans
Content/Fonts
dossier).Sinon les polices peuvent être récupérées à partir de polices de Windows emplacement:
Environment.GetFolderPath(Environment.SpecialFolder.Fonts)
- ce qui nécessite la connaissance (ou de la forte conviction) de polices de caractères installées sur le serveur ou le contrôle du serveurFontProvider
(plus deFontFactory
)J'ai pris ma liberté de prolonger Gregor S de la solution un peu, qui fournit plus complexe FontFactory qui peut être utilisé pour une variété d'HTML "modèles" poussée à travers XMLWorker.
Contrôleur
CSS:
La disposition de l'affichage
Afficher la page
Autres utile de (re)sources:
remplacements
OriginalL'auteur Matt Stuvysant
1) iText 5.0.6 a été publié aujourd'hui à une révision majeure d'HTML->format PDF conversion de code. Je vous suggère d'essayer le nouveau code à la place.
2) je suis presque certain que la définition de la directContent comme ça n'affectera pas le contenu du fichier pdf généré par HTMLWorker. Je suis sûr à 99% que ça va (re) définir la police avant qu'il ne tire aucun texte.
3) Essayez d'emballage de votre chaîne dans
<font face="AFontThatActuallyContainsThoseCharacters">
balises. Je doute sérieusement de la police par défaut HTMLWorker pics sera en place pour le travail.Nope. La valeur par défaut est Helvetica avec WinAnsiEncoding. Vraiment pas adapté à quoi que ce soit à l'extérieur de typiquement anglais/allemand/français/espagnol.
Vous devriez être en mesure d'utiliser
HTMLWorker.setStyleSheet
pour définir quelque peu plus les valeurs par défaut. Vous devrez définir le "visage" et de "l'encodage" pour quelque chose de plus polonais de l'environnement. Je recommande d'Identité "-H" pour l'encodage, ce qui donne accès à tous les caractères de la police que vous allez avec, indépendamment de la langue. Pour une police, il y a un programme appelé "charmap.exe" dans windows depuis WayBack qui va vous montrer des caractères d'une police a disponibles dans un encodage (y compris unicode). La famille de "Arial" semble bon, comme le font plusieurs autres."le nouveau code" ne sera probablement pas changer de comportement que vous vous voyez. C'est un refactoring pour en faire le futur (la prochaine version que je le comprends), des changements plus facile.
Ma suggestion est d'aller avec
setStyleSheet()
:Je ne suis pas sûr, mais vous pourriez être en mesure de simplement
applyStyle("body", styleMap)
et de l'avoir en cascade vers le bas dans tout ce qu'il contient, mais je ne suis pas sûr. Je suis également pas sûr que ce serait l'adresse de votre 1-ligne-test comme il n'y a pas de balises concernées. IIRC, nous construisons une balise body si il n'y a pas un, mais je ne suis pas du tout sûr.OriginalL'auteur Mark Storer