2015-05-28 13 views
12

Mit meiner Webanwendung können Sie Rich Text in CKEditor schreiben und das Ergebnis als PDF mit der Flying Saucer-Bibliothek exportieren.Hinzufügen von Arial Unicode MS zu CKEditor

Da sie griechische Zeichen schreiben müssen, entschied ich mich Arial Unicode MS auf die verfügbaren Schriftarten hinzufügen, indem Sie folgendermaßen vorgehen:

config.font_names = "*several fonts...*; Arial Unicode MS/Arial Unicode MS, serif"; 

Diese Schrift nun korrekt in der CKEditor-Menü angezeigt wird, aber wenn ich gelten diese Schriftart auf ein beliebiges Element, erhalte ich das folgende Ergebnis:

<span style="font-family:arial unicode ms,serif;"> some text </span> 

Wie Sie sehen können, habe ich die große Zeichen verloren. Dies wirkt sich beim PDF-Export sehr negativ aus, da Fliegende Untertasse die Schriftart nicht erkennt und Helvetica verwendet, die keine Unicode-Zeichen unterstützt. Daher werden die griechischen Zeichen nicht im PDF angezeigt.

Wenn ich manuell von Quellcode ändern

<span style="font-family:arial unicode ms,serif;"> some text </span> 

zu

<span style="font-family:Arial Unicode MS,serif;"> some text </span> 

dann wird es wie erwartet funktioniert, werden griechische Buchstaben angezeigt.

Hat jemand dieses Problem schon einmal gelöst? Gibt es eine Möglichkeit zu vermeiden, dass UpperCase-Zeichen in LowerCase geändert werden? Ich möchte wirklich gerne tun, jede Art von Nachbearbeitung zu vermeiden:

htmlString = htmlString.replace("arial unicode ms", "Arial Unicode MS"); 
+1

Das Problem ist ein bekannter (und alter) CKEditor-Fehler, siehe https://dev.ckeditor.com/ticket/5966 und https://dev.ckeditor.com/ticket/10676 – obourgain

Antwort

2

ich keine Möglichkeit, es mit Flying Saucer R8 zu tun gefunden haben, aber Sie können es mit Flying Saucer R9 arbeiten. Die Methode ITextResolver.addFont(String path, String fontFamilyNameOverride, String encoding, boolean embedded, String pathToPFB) ermöglicht es Ihnen, den Fond mit einem bestimmten Namen hinzuzufügen.

Codebeispiel:

ITextRenderer renderer = new ITextRenderer(); 
    // Adding fonts 
    renderer.getFontResolver().addFont("fonts/ARIALUNI.TTF", "arial unicode ms", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, null); 
    renderer.getFontResolver().addFont("fonts/ARIALUNI.TTF", "Arial Unicode MS", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, null); 

    String inputFile = "test.html"; 
    renderer.setDocument(new File(inputFile)); 
    renderer.layout(); 

    String outputFile = "test.pdf"; 
    OutputStream os = new FileOutputStream(outputFile); 
    renderer.createPDF(os); 
    os.close(); 

Sie können Flying Saucer R9 auf Maven finden.

+0

Vielen Dank, dass Sie auf diese Lösung hingewiesen haben . Eigentlich möchte ich die Fliegende Untertasse Version nicht ändern und suche nach einer CKEditor Lösung, damit die Schriftart korrekt gespeichert wird. – realUser404

4

Ich stimme Ihnen bezüglich der Lösung dieses Problems neben Fliegende Untertasse R8. Ist es je nach Workflow effizienter, CKEditor eine vollständig HTML-codierte Datei vorverarbeiten und validieren zu lassen (das gesamte Dokument zuerst in HTML rendern)?

Keines der CKEditor-Supporttickets gibt die wahre Ursache des Problems an, daher empfehle ich, für sich selbst zu bestätigen, ob es (A) ein Styling-Problem oder (B) ein CSS-Verarbeitungsproblem oder (C) ein eigentümlicher CKEditor ist Analyseproblem.

Eine mögliche Problemumgehung: Erstellen Sie eine Kopie der gewünschten Unicode-Schriftart und importieren Sie es in Typ 3.2 (funktioniert sowohl auf Mac und Windows).

http://www.cr8software.net/type.html

die doppelte Schrift umbenennen etwas klein geschrieben gesetzt in.

Grenze Ihre Schriftauswahl

Konfig.font_names = "customfontnameshere";

Wenden Sie den Stil separat (Unicode Schriftart greatvibes unten) und sehen, ob das das gewünschte Ergebnis ergibt:

var s = CKEDITOR.document.$.createElement('style'); 
s.type = 'text/css'; 
cardElement.$.appendChild(s); 

s.styleSheet.cssText = 
'@font-face {' + 
'font-family: \'GreatVibes\';' + 
'src: url(\'' + path +'fonts/GreatVibes-Regular.eot\');' + 
'}' + 
style; 

Wenn die oben nicht funktioniert, können Sie versuchen, die Weihnachts plugin.js zu ändern (auch verwendet die Unicode-Schrift greatvibes und tut alle möglichen kühlen Manipulationen vor der Ausgabe), so könnte es es einen Versuch wert sein, zu ändern, eher zu beginnen, als von Grund auf neu:

'<style type="text/css">' + 
'@font-face {' + 
'font-family: "GreatVibes";' + 
'src: url("' + path +'fonts/GreatVibes-Regular.ttf");' + 
'}' + 
style + 
'</style>') 

Je nachdem, was Sie nähern versuchen, ist das Ziel, verschiedene Styling zu testen und sehen, ob CKEditor Standardwerte ist zurück zur Helvetica.

Schließlich hat das CKEditor SDK ausgezeichnete Unterstützung, also wenn Sie die Zeit und Energie haben, könnten Sie ein Plugin schreiben. Klingt entmutigend, ich weiß, aber merke, wie die plugin.js im Verzeichnis/plugins/font Priorität für Größenattribute hat.

Wenn Sie nicht daran interessiert sind, Ihr eigenes Plugin produzieren, empfehle ich Kontakt zu dem produktivsten ckeditor Plugin Schriftsteller

doksoft

(aufgeführt beide auf ihrer Website und auf seiner eigenen Website) und fragen Sie nach einem Demo seines kommerziellen Plugins "CKEditor Special Symbols" mit breiter Unicode-Fähigkeit. Hoffe, dass hilft, ClaireW

2

Die einfachste Lösung (bis CKEditor behebt diesen Fehler) ist, dass Nachbearbeitung zu tun.

Sie können es auf dem Server tun (wirklich einfach, Sie haben bereits den Code) oder mit einem kleinen CKEditor-Plugin, aber das wird Ihnen die Lösung geben, die Sie wollen und wenn Sie mehr Schriftarten hinzufügen müssen, ohne es funktioniert weitere Änderungen

Verwandte Themen