代码之家  ›  专栏  ›  技术社区  ›  Brad

获取字体文件作为文件对象或获取其路径

  •  2
  • Brad  · 技术社区  · 16 年前

    有办法做到这一点吗?


    我在这里所做的是从外部库调用一个方法,该库加载字体文件以在编写时使用它:

    loadTTF(PDDocument pdfFile, File fontfile);
    

    GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Font[] fonts = e.getAllFonts();
    

    然后,当用户选择字体时,我将其传递给 loadTTF(...) 方法来加载它。

    3 回复  |  直到 10 年前
        1
  •  5
  •   Peter O. Manuel Pinto    13 年前
    // use reflection on Font2D (<B>PhysicalFont.platName</B>) e.g.
    Font f = new Font("Courier New", 0, 10);
    
    Font2D f2d = FontManager.findFont2D(f.getFontName(), f.getStyle(),      
                   FontManager.LOGICAL_FALLBACK).handle.font2D;
    
    Field platName = PhysicalFont.class.getDeclaredField("platName");
    platName.setAccessible(true);
    String fontPath = (String)platName.get(f2d);
    platName.setAccessible(false);
    
    // that's it..
    System.out.println(fontPath);
    
        2
  •  3
  •   Brad    16 年前

    好啊这将返回字体文件路径:

    String fontFilePath = FontManager.getFontPath( true ) + "/" + FontManager.getFileNameForFontName( fontName );
    

    我曾在Windows和Linux中尝试过这一点,并且在这两种系统中都运行良好。

        3
  •  1
  •   Andrzej Doyle    16 年前

    Font 在Java中,它只是字符如何以图形方式显示的表示和定义。它与文件系统无关,技术上甚至不需要最终在文件中定义(参见示例 createFont() 获取任意输入流的方法,该输入流可以来自任何地方(例如网络套接字)。在任何情况下,对于您来说,能够获得定义字体的底层系统文件的路径肯定是一个荒谬的抽象突破。

    我建议你 可以 如果您依赖于接受文件,那么在其他方法中可能会做错误的事情。或者,如果真的需要这样做,那么你在做错误的事情 这 方法通过认为 Font