2015-05-28 12 views
12

Moja aplikacja internetowa pozwala użytkownikowi na pisanie tekstu sformatowanego w CKEditorze, a następnie eksportowanie wyniku jako pliku PDF z biblioteką Flying Saucer.Dodawanie Arial Unicode MS do CKEditor

Kiedy trzeba napisać znaki greckie, postanowiłem dodać Arial Unicode MS do dostępnych czcionek, wykonując następujące czynności:

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

Ta czcionka jest teraz poprawnie wyświetlane w menu CKEditor, ale kiedy zastosowanie tej czcionki do dowolnego elementu, pojawia się następujący wynik:

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

Jak można zauważyć, że stracił wielkich liter. Ma to zły wpływ podczas eksportowania plików PDF, ponieważ Flying Sprink nie rozpoznaje czcionki i dlatego używa Helvetica, która nie obsługuje znaków Unicode, więc greckie znaki nie są wyświetlane w pliku PDF.

Gdybym ręcznie zmienić źródła kodu

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

do

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

to działa zgodnie z oczekiwaniami, są wyświetlane greckich znaków.

Czy ktoś już wcześniej napotkał ten problem? Czy istnieje sposób na uniknięcie zmiany znaków UpperCase na LowerCase? naprawdę chcę robić, aby uniknąć wszelkiego rodzaju post-processing jak:

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

Problem jest znanym (i starym) błędem CKEditor, zobacz https://dev.ckeditor.com/ticket/5966 i https://dev.ckeditor.com/ticket/10676 – obourgain

Odpowiedz

2

Nie mogę znaleźć jakiś sposób, aby to zrobić z latania Spodek R8, ale można zrobić to praca przy użyciu Latający spodek R9.

Metoda ITextResolver.addFont(String path, String fontFamilyNameOverride, String encoding, boolean embedded, String pathToPFB) pozwala dodać ulubionego o określonej nazwie.

przykładowy kod:

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(); 

można znaleźć Latający spodek R9 na Maven.

+0

Dziękujemy za wskazanie tego rozwiązania . Właściwie nie chcę zmieniać wersji Flying Saucer i szukam rozwiązania CKEditor, aby czcionka została poprawnie zapisana. – realUser404

4

Zgadzam się z Państwem odnośnie rozwiązania tego problemu poza Lataniem Spodkiem R8. Chociaż w zależności od przepływu pracy, czy bardziej wydajne byłoby zezwolenie CKEditorowi na wstępne przetwarzanie i sprawdzanie poprawności skompilowanego pliku HTML (najpierw renderowanie całego dokumentu do HTML)?

Żadne z biletów wsparcia CKEditor nie określa prawdziwego źródła problemu, więc zalecam potwierdzenie, czy jest to (A) kwestia stylu, (B) problem z przetwarzaniem CSS, czy (C) osobliwy CKEditor problem z analizą.

Możliwe obejście: Wykonaj kopię żądanej czcionki Unicode i zaimportuj ją do wersji 3.2 (działa zarówno na komputerach Mac i Windows).

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

zmienić nazwę duplikat czcionki ustawiony w coś wszystko małymi literami.

Ogranicz wybór czcionki

config.font_names = "customfontnamehere";

Zastosuj styl oddzielnie (Unicode greatvibes krój poniżej) i sprawdzić, czy to daje pożądanego rezultatu:

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; 

Jeśli powyższe nie działa, można spróbować zmodyfikować xmas plugin.js (również wykorzystuje greatvibes unicode krojem i wykonuje wszelkiego rodzaju chłodne manipulacje przed wyjściem), więc być może warto próbuje go zmodyfikować niż zaczynać od zera:

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

Niezależnie od podejścia spróbować, celem jest przetestowanie różnych stylizacji i zobacz czy domyślnie CKEditor z powrotem do Helvetica.

Wreszcie SDK CKEditor ma doskonałe wsparcie, więc jeśli masz czas i energię, możesz napisać wtyczkę. Wiem, że to zniechęca, ale zauważ, że plugin.js w katalogu/plugins/font ma priorytet dla atrybutów rozmiaru.

Jeżeli nie jesteś zainteresowany produkcją własną wtyczkę, polecam kontaktując Wtyczka pisarz płodny CKEditor

doksoft

(wymienione zarówno na swojej stronie internetowej oraz na własnej stronie internetowej) i poprosić o demo jego komercyjnej wtyczki "CKEditor Special Symbols", która ma szerokie możliwości unikodowe. Nadzieja, która pomaga, ClaireW

2

Najprostszym rozwiązaniem (dopóki CKEditor nie naprawi tego błędu) jest wykonanie tego przetwarzania końcowego.

Możesz to zrobić na serwerze (naprawdę proste, masz już kod) lub z małą wtyczką CKEditor, ale to da ci rozwiązanie, które chcesz i jeśli nie musisz dodawać więcej czcionek, będzie działało bez wszelkie dalsze zmiany.