我的web应用程序允许用户在CKEditor中编写富文本,然后使用飞碟类库将结果导出为PDF。
因为他们需要写希腊字符,所以我选择将Arial Unicode MS添加到可用的字体中,方法如下:
config.font_names = "*several fonts...*; Arial Unicode MS/Arial Unicode MS, serif";
该字体现在可以在CKEditor菜单中正确显示,但是当我将该字体应用于任何元素时,我会得到以下结果:
<span style="font-family:arial unicode ms,serif;"> some text </span>
如您所见,我丢失了UpperCase字符。这在PDF导出期间有相当糟糕的效果,因为are无法识别字体,因此使用不支持Unicode字符的Helvetica,因此希腊字符不会显示在PDF中。
如果我从代码源中手动更改
<span style="font-family:arial unicode ms,serif;"> some text </span>
至
<span style="font-family:Arial Unicode MS,serif;"> some text </span>
然后它就可以正常工作了,希腊字符就会显示出来。
以前有没有人遇到过这个问题?有没有办法避免将UpperCase字符更改为LowerCase?我真的想避免做任何类型的后处理,比如:
htmlString = htmlString.replace("arial unicode ms", "Arial Unicode MS");
发布于 2015-06-06 20:32:45
我同意你解决这个问题除了飞碟R8。尽管取决于您的工作流程,但允许CKEditor预处理和验证完整的HTML编码文件(首先将整个文档呈现为HTML )是否会更有效率?
没有一个CKEditor支持标签指明了问题的真正来源,所以我建议您自己确认是(A)样式问题,(B) CSS处理问题,还是(C)特殊的CKEditor解析问题。
一种可能的解决方法:复制所需的unicode字体,然后将其导入Type 3.2 (适用于Mac和Windows)。
http://www.cr8software.net/type.html
将重复的字体集重命名为全小写字体。
限制您的字体选择
config.font_names =“此处自定义字体名称”;
单独应用样式(下面的unicode字体很棒),看看是否能得到想要的结果:
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;
如果上面的方法不起作用,你可以尝试修改xmas plugin.js (也使用unicode字体,在输出之前做各种很酷的操作),所以可能值得尝试修改它,而不是从头开始:
'<style type="text/css">' +
'@font-face {' +
'font-family: "GreatVibes";' +
'src: url("' + path +'fonts/GreatVibes-Regular.ttf");' +
'}' +
style +
'</style>' )
无论您尝试哪种方法,目标都是测试各种样式,并查看CKEditor是否会再次默认回到Helvetica。
最后,CKEditor软件开发工具包有很好的支持,所以如果你有时间和精力,你可以写一个插件。我知道这听起来令人生畏,但请注意/ plugin.js /font目录中的插件如何具有大小属性的优先级。
如果您对制作自己的插件不感兴趣,我建议您联系多产的ckeditor插件作者。
doksoft
(在他们的网站和他自己的网站上都列出),并要求演示他的商业插件"CKEditor特殊符号“,具有广泛的unicode功能。希望这会有帮助,ClaireW
发布于 2015-06-03 22:42:23
我没有找到任何使用飞碟R8的方法,但是你可以使用飞碟R9来实现它。
ITextResolver.addFont(String path, String fontFamilyNameOverride, String encoding, boolean embedded, String pathToPFB)方法允许您添加具有特定名称的fond。
代码示例:
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();
你可以在Maven上找到飞碟R9。
发布于 2015-06-07 10:04:54
最简单的解决方案(直到CKEditor修复了这个bug)是进行后处理。
你可以在服务器上做这件事(非常简单,你已经有了代码)或者用一个小的CKEditor插件,但这会给你你想要的解决方案,除非你需要添加更多的字体,否则它将不需要任何进一步的更改就能工作。
https://stackoverflow.com/questions/30509301
复制相似问题