使用SfntTool制作字体剪辑工具4 - 在C#环境下转码
2017-06-05 14:37
1011 查看
在完成了jar包转dll、反编译.class文件这些前奏之后,好戏开场了!
首先,添加必要的(Java)依赖库:IKVM.OpenJDK.Core.dll,IKVM.OpenJDK.Util.dll,IKVM.Runtime.dll,IKVM.Runtime.JNI.dll。
然后,封装(翻译)SfntTool方法:
最后,在C#环境中调用:
首先,添加必要的(Java)依赖库:IKVM.OpenJDK.Core.dll,IKVM.OpenJDK.Util.dll,IKVM.Runtime.dll,IKVM.Runtime.JNI.dll。
然后,封装(翻译)SfntTool方法:
using SfntlyTag = com.google.typography.font.sfntly.Tag; using com.google.typography.font.sfntly; using com.google.typography.font.sfntly.table.core; using com.google.typography.font.tools.subsetter; using com.google.typography.font.tools.sfnttool; using com.google.typography.font.tools.conversion.woff; using java.io; using com.google.typography.font.sfntly.data; using com.google.typography.font.tools.conversion.eot; using java.util; using java.lang; namespace FontClipper { class SfntlyFontHelper { private bool strip = false; private bool woff = false; private bool eot = false; private bool mtx = false; /// <summary> /// 剪辑字体 /// </summary> /// <param name="subString">新字体文本信息</param> /// <param name="fontPathOri">原始字体路径</param> /// <param name="fontPathNew">新字体路径</param> public void ClipFont(string subsetString, string fontPathOri, string fontPathNew) { try { var localFileOri = new java.io.File(fontPathOri); var localFileNew = new java.io.File(fontPathNew); SubsetFontFile(subsetString, localFileOri, localFileNew); } catch (System.Exception ex) { throw new System.Exception(ex.Message); } } private void SubsetFontFile(string subsetString, java.io.File paramFile1, java.io.File paramFile2) { FontFactory localFontFactory = FontFactory.getInstance(); java.io.FileInputStream localFileInputStream = null; try { localFileInputStream = new java.io.FileInputStream(paramFile1); byte[] arrayOfByte = new byte[(int)paramFile1.length()]; localFileInputStream.read(arrayOfByte); Font[] arrayOfFont = null; arrayOfFont = localFontFactory.loadFonts(arrayOfByte); Font localFont1 = arrayOfFont[0]; java.util.ArrayList localArrayList = new java.util.ArrayList(); localArrayList.add(CMapTable.CMapId.WINDOWS_BMP); //java.lang.Object localObject1 = null; java.lang.Object localObject2 = null; Font localFont2 = localFont1; java.lang.Object localObject3; if (subsetString != null) { localObject2 = new RenumberingSubsetter(localFont2, localFontFactory); ((Subsetter)localObject2).setCMaps(localArrayList, 1); localObject3 = (java.lang.Object)GlyphCoverage.getGlyphCoverage(localFont1, subsetString); ((Subsetter)localObject2).setGlyphs((java.util.List)localObject3); var localHashSet = new java.util.HashSet(); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.GDEF)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.GPOS)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.GSUB)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.kern)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.hdmx)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.vmtx)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.VDMX)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.LTSH)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.DSIG)); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.intValue(new byte[] { 109, 111, 114, 116 }))); localHashSet.add(java.lang.Integer.valueOf(SfntlyTag.intValue(new byte[] { 109, 111, 114, 120 }))); ((Subsetter)localObject2).setRemoveTables(localHashSet); localFont2 = ((Subsetter)localObject2).subset().build(); } if (this.strip) { localObject2 = new HintStripper(localFont2, localFontFactory); localObject3 = new HashSet(); ((Set)localObject3).add(Integer.valueOf(Tag.fpgm)); ((Set)localObject3).add(Integer.valueOf(Tag.prep)); ((Set)localObject3).add(Integer.valueOf(Tag.cvt)); ((Set)localObject3).add(Integer.valueOf(Tag.hdmx)); ((Set)localObject3).add(Integer.valueOf(Tag.VDMX)); ((Set)localObject3).add(Integer.valueOf(Tag.LTSH)); ((Set)localObject3).add(Integer.valueOf(Tag.DSIG)); ((Subsetter)localObject2).setRemoveTables((Set)localObject3); localFont2 = ((Subsetter)localObject2).subset().build(); } localObject2 = new java.io.FileOutputStream(paramFile2); if (this.woff) { localObject3 = new WoffWriter().convert(localFont2); ((WritableFontData)localObject3).copyTo((OutputStream)localObject2); } else if (this.eot) { localObject3 = new EOTWriter(this.mtx).convert(localFont2); ((WritableFontData)localObject3).copyTo((OutputStream)localObject2); } else { localFontFactory.serializeFont(localFont2, (OutputStream)localObject2); } } catch (System.Exception ex) { throw new System.Exception(ex.Message); } } } }
最后,在C#环境中调用:
try { var sfntlyFontHelper = new SfntlyFontHelper(); sfntlyFontHelper.ClipFont(subsetString, fontPathOri, fontPathNew); MessageBox.Show("字体生成成功!"); } catch (System.Exception ex) { MessageBox.Show(ex.Message); }
相关文章推荐
- 使用SfntTool制作字体剪辑工具2 - 在.Net环境下使用sfnttool
- 使用SfntTool制作字体剪辑工具5 - 写在最后
- 使用SfntTool制作字体剪辑工具1 - 直接使用sfnttool.jar
- 使用SfntTool制作字体剪辑工具3 - 使用jd-gui反编译.class文件
- 免费的位图字体制作工具Bitmap Font Generator使用教程
- Unix高级编程:环境变量、静态库、动态库制作和使用、gdb调试工具
- 免费的位图字体制作工具Bitmap Font Generator使用教程
- 免费的位图字体制作工具Bitmap Font Generator使用教程
- C#使用WebBrowser制作网页游戏辅助工具关键技术分析
- cocos2d-x 使用位图工具制作 fnt字体
- FNT制作工具 cocos2d-x 使用位图工具BMFont自定义字体FNT
- C#使用 WebBrowser制作网页游戏辅助工具关键技术分析
- [z]C#使用WebBrowser制作网页游戏辅助工具关键技术分析
- 使用C#制作《邮件特快专递》
- 在.NET环境中使用单元测试工具Nunit
- 自己做的几个小软件(数学工具和游戏),用C/C#制作,用到许多相关的C#技术细节,可以免费提供下载,感兴趣的,来看一下
- 使用VBIDE开发能在VB6.0IDE环境中自动拷贝工程中的Form图片的小工具
- 在.NET环境中使用单元测试工具Nunit
- 在.NET环境中使用单元测试工具NUnit