iTextSharp 5 polnischen Charakter
Problem habe ich mit polnischen Zeichen unter Verwendung itextSharp. Ich möchte zum erstellen von pdf aus html. Alles funktioniert gut, aber die polnischen Zeichen fehlen. Ich benutze die Funktion lower:
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();
}
Und Versuchen Sie es verwenden:
createPDF("ĄąćęĘłŁŃńóÓŚśŹźŻż");
Ich versuche set:
BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, Codierung.UTF8.HeaderName, BaseFont.EMBEDDED);
writer.DirectContent.SetFontAndSize(bf, 16);
Aber es doesnt Arbeit
Haben Sie eine Idee????
Hinsichtlich
InformationsquelleAutor dzajdol | 2011-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur zu Rollen zusammen, was @Mark Storer sagte:
Und wenn Sie es nennen wickeln Sie Ihren text in einer Schrift mit dem Namen Sie sich registriert oben:
Chris Hass - Sie sind die besten. Nach ein paar Stunden struggleing Ihre Antwort gab mir die breakthourgh, die ich brauchte!
InformationsquelleAutor Chris Haas
BEKAM ICH DIE ANTWORT! =) (speziell für die polnische) ich fühle mich verpflichtet, es hier in diesem alten thread, da bin ich mir sicher, dass ich nicht der Letzte sein, um es zu finden.
Ich bin schwer enttäuscht, dass es keine guten Antworten auf diese... die meisten von Ihnen schlagen vor, mit der ARIALUNI.TTF im Windows-FONTS-Ordner, die Ergebnisse in einer PDF-Datei um ein Vielfaches größer. Die Lösung muss nicht so drastisch sein...
Viele andere schlagen vor, Beispiele zeigt die Kodierung cp1252 was nicht auf Arial und nicht Helvetica für den polnischen text.
Verwende ich iTextSharp 4.1.6... der trick ist... cp1257! Und Sie können es verwenden, mit BaseFont.Kurier -, BaseFont.Helvetica, BaseFont.Times-Roman
Das funktioniert... und meine PDF-Dateien sind klein (3kb!)
Testen werde ich später und stellen Sie sicher, ich kann Sie öffnen und Lesen Sie diese in Windows XP und Mac OSX neben Windows 7.
Wie hast du BaseFont.CP1257? Ich bin auf der Suche richtigen code für Kroatisch/Bosnisch . Ich habe teilweise Unterstützung, mit Ihrem code ,der für die Buchstaben. Dank
Vielleicht verwenden Sie eine andere version von itextsharp? Ich bin mit 4.1.6, da version 5 hat verschiedene Lizenzen. CP1257 sollte innerhalb Basefont... nichts besonderes hier zu tun. Am Ende, die ich verwendet, CP1257 und Times new Roman. Es wurde am "sichersten", so dass alle PDF-Viewer öffnen konnte und auch die Dateigröße war immer noch winzig.
InformationsquelleAutor Ralph N
Beim erstellen Ihrer BaseFont müssen Sie angeben, dass Sie möchten, um UniCode-Zeichen verwenden. Diese Antwort zeigt, wie.
InformationsquelleAutor Stewbob
Als stöberte ich in verschiedenen Foren und stackoverflow-Fragen fand ich keine Antwort mit einer komplexen Lösung, um das Sonderzeichen-problem. Ich habe versucht, zur Verfügung zu stellen im Austausch gegen eine ziemlich lange Antwort auf die Frage. Hoffentlich hilft das jemanden...
Benutzte ich die
XMLWorker
aus SourceForge alsHtmlWorker
wurde depricated. Das problem mit Sonderzeichen blieb Gedanke. Ich fand zwei Lösungen, die wirklich funktionieren und können beide verwendet werden, separat und kombiniert.HTML & CSS-Lösung
Jeden tag beteiligt haben müssen, schriftart-Familie Stil, in der Reihenfolge angegeben werden, richtig interpretiert
ParseXHtml
Methode (ich bin nicht sicher, warum verschachtelte tag-Stilen Vererbung funktioniert hier nicht, aber es scheint, dass es wirklich nicht oder es funktioniert nicht vollständig).Diese Lösung ermöglicht das ändern der resultierenden PDF-Datei basiert auf der HTML-code nur, damit einige Szenarien, ohne code neu kompilieren, stattfinden könnte.
Vereinfachte code (für eine MVC-app) möchte, dass sein:
Controller:
CSS:
Ansicht-layout
Anzeigen Seite
Innen-code-schriftart-ersetzen-Lösung
In dieser Lösung ist die schriftart zurückgegeben, die durch eine
IFontProvider
geändert, um die eine enthält die (richtige) Darstellung von Sonderzeichen und BaseFont.IDENTITY_H Kodierung verwendet wird. Vorteil des Ansatzes ist, dass es genau eine schriftart, die verwendet wird. Dies ist auch der Nachteil in der Art.Auch, diese Lösungen erwartet, die Schrift ist ein Teil des Projekts (*.ttf-Datei(en) in
Content/Fonts
Ordner).Alternativ können Sie die Schriftarten können abgerufen werden von Windows-Schriftarten Ort:
Environment.GetFolderPath(Environment.SpecialFolder.Fonts)
- das erfordert wissen (oder die Feste überzeugung) von Schriftarten auf dem server installiert oder Kontrolle über den serverFontProvider
(überFontFactory
)Nahm ich meine Freiheit zu erweitern Gregor S Lösung ein bisschen, dass bietet mehr komplexe FontFactory, die verwendet werden können für eine Vielzahl von HTML-Vorlagen" durchgeboxt XMLWorker.
Controller
CSS:
Ansicht-layout
Anzeigen Seite
Andere nützliche (re)Quellen:
Ersatz
InformationsquelleAutor Matt Stuvysant
1) iText 5.0.6 wurde heute veröffentlicht mit einer umfangreichen überarbeitung der HTML->PDF-Konvertierung-code. Ich schlage vor, Sie versuchen den neuen code statt.
2) ich bin mir fast sicher, dass die Einstellung der directContent wie, nicht auf das pdf-Inhalte, die von HTMLWorker. Ich bin mir zu 99% sicher, dass es dann [neu]legen Sie die schriftart, bevor es zieht einen beliebigen text.
3) Versuchen Sie, wickeln Sie Ihre string in
<font face="AFontThatActuallyContainsThoseCharacters">
- tags. Ich bezweifle, dass die Standard-schriftart HTMLWorker picks up für den job.NÖ. Der Standardwert ist Helvetica mit WinAnsiEncoding. Definitiv nicht geeignet, um etwas außerhalb der typischen Englisch/Deutsch/Französisch/Spanisch.
Sollten Sie in der Lage sein zu verwenden
HTMLWorker.setStyleSheet
um einige freundlichere Vorgaben. Sie sollten das "Gesicht" und "encoding", um etwas mehr Polnisch-Freundlich. Ich empfehle "Identity-H" für die Codierung, das gibt Ihnen Zugriff zu allen Zeichen in der schriftart, die Sie gehen mit, unabhängig von der Sprache. Für eine Schrift, es gibt ein Programm namens "charmap.exe" in windows seit WayBack, die Ihnen zeigen, welche Zeichen eine schriftart zur Verfügung hat, in einer bestimmten Kodierung (inklusive unicode). Die Produktfamilie "Arial" sieht gut aus, wie einige andere."der neue code" wohl nicht ändern, ein Verhalten, das Sie beobachten. Es ist ein refactoring zu machen, die Zukunft (in der nächsten release so wie ich es verstehe) Veränderungen leichter.
Mein Vorschlag ist, gehen Sie mit
setStyleSheet()
:Ich bin mir nicht sicher, aber vielleicht sind Sie in der Lage, nur
applyStyle("body", styleMap)
habe und es stürzen in alles, was es enthält, aber ich bin mir nicht sicher. Ich bin mir auch nicht sicher, dass diese Adresse wäre für den 1-line-test, so gibt es keine tags beteiligt. Wenn ich mich Recht erinnere, bauen wir ein body-tag, wenn es nicht ein, aber ich bin mir überhaupt nicht sicher.InformationsquelleAutor Mark Storer