java - txt - Obtener el archivo de fuente como un objeto Archivo u obtener su ruta
jfilechooser java obtener ruta (3)
No.
Una fuente en Java es solo una representación y definición de cómo se pueden mostrar los caracteres gráficamente. No tiene nada que ver con el sistema de archivos, y técnicamente ni siquiera necesita ser definido en un archivo (ver por ejemplo el método createFont () que toma un flujo de entrada arbitrario, que podría provenir de cualquier lugar, por ejemplo, un socket de red). En cualquier caso, sería una ruptura ridícula en la abstracción para que usted pueda obtener la ruta del archivo del sistema subyacente que define la fuente.
Sugeriría que podría estar haciendo lo incorrecto en su otro método si confía en aceptar un archivo. O si esto realmente es necesario, entonces está haciendo lo incorrecto en este método al pensar que un objeto Font
tiene una correlación simple con un archivo subyacente. Si realmente necesita obtener la ruta del archivo de una fuente en particular, tendrá que abordarla desde un ángulo diferente que no involucra a java.awt.Font.
Tengo un objeto Font en Java para un archivo de fuente. Necesito convertir ese objeto a un objeto File u obtener la ruta del archivo de fuente.
¿Hay alguna forma de hacer esto?
Lo que hago aquí es llamar a un método desde una biblioteca externa que carga un archivo de fuente para usarlo por escrito:
loadTTF(PDDocument pdfFile, File fontfile);
Así que quería que el usuario eligiera una fuente de las definidas en su sistema operativo usando:
GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = e.getAllFonts();
Luego, cuando el usuario elige una fuente, la paso al método loadTTF(...)
para cargarla.
¿Hay una mala práctica aquí?
Ok ... Esto devolverá la ruta del archivo de fuente:
String fontFilePath = FontManager.getFontPath( true ) + "/" + FontManager.getFileNameForFontName( fontName );
Lo intenté en Windows y Linux, y en ambos funcionó bien.
// 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);