Pdf 将Arial Unicode MS添加到编辑器

Pdf 将Arial Unicode MS添加到编辑器,pdf,unicode,fonts,ckeditor,flying-saucer,Pdf,Unicode,Fonts,Ckeditor,Flying Saucer,我的web应用程序允许用户在CKEditor中编写富文本,然后将结果导出为PDF格式的飞碟库 由于他们需要书写希腊字符,我选择将Arial Unicode MS添加到可用字体中,方法如下: config.font_names = "*several fonts...*; Arial Unicode MS/Arial Unicode MS, serif"; 此字体现在在CKEditor菜单中正确显示,但当我将此字体应用于任何元素时,会得到以下结果: <span style="font-fa

我的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>

我没有找到任何方法用飞碟R8来做,但是你可以用飞碟R9来做

方法 允许您添加具有特定名称的文件

代码示例:

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

你可以在飞机上找到飞碟R9

除了飞碟R8,我同意你关于解决这个问题的看法。 尽管这取决于您的工作流程,但允许CKEditor预处理和验证已完成的HTML编码文件(首先将整个文档呈现为HTML)是否更有效

没有一个CKEditor支持票证指定问题的真正来源,因此我建议您自己确认这是(A)样式问题,还是(B)CSS处理问题,还是(C)特殊的CKEditor解析问题

可能的解决方法: 复制所需的unicode字体并将其导入Type 3.2(适用于Mac和Windows)

将重复字体集重命名为全小写

限制字体选择

config.font_name=“customfontnamehere”

单独应用样式(下面是unicode字体greatvibes),看看是否能得到所需的结果:

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字体greatvibes,并在输出前进行各种很酷的操作),因此,可能值得尝试修改它,而不是从头开始:

'<style type="text/css">' +
'@font-face {' +
'font-family: "GreatVibes";' +
'src: url("' + path +'fonts/GreatVibes-Regular.ttf");' +
'}' +
style +
'</style>' )
“”+
“@font-face{”+
'字体系列:“GreatVibes”;'+
'src:url(“+path+'font/GreatVibes Regular.ttf”);'+
'}' +
风格+
'' )
无论您尝试哪种方法,目标都是测试各种样式,看看CKEditor是否再次默认为Helvetica

最后,ckeditorsdk有很好的支持,所以如果你有时间和精力,你可以编写一个插件。我知道这听起来让人望而生畏,但请注意/plugins/font目录中的plugin.js对大小属性的优先级

如果你对制作自己的插件不感兴趣,我建议你联系多产的ckeditor插件作者

doksoft

(在他们的网站和他自己的网站上都有列出)并要求提供他的商业插件“CKEditor Special Symbols”的演示,该插件具有广泛的unicode功能。 希望有帮助, ClaireW

最简单的解决方案(直到CKEditor修复该错误)是进行后处理


您可以在服务器上完成(非常简单,您已经有了代码)或使用一个小的CKEditor插件,但这将为您提供所需的解决方案,并且除非您需要添加更多字体,否则它将在不做任何进一步更改的情况下工作。

感谢您指出该解决方案。实际上,我不想更改飞碟版本,我正在寻找一个CKEditor解决方案,以便正确保存字体。问题是一个已知(和旧)的CKEditor错误,请参阅和
  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();
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;
'<style type="text/css">' +
'@font-face {' +
'font-family: "GreatVibes";' +
'src: url("' + path +'fonts/GreatVibes-Regular.ttf");' +
'}' +
style +
'</style>' )