sobreescribir - Java Generar informe formateado en formato de archivo de texto
modificar archivos txt en java (3)
Aureola,
He estado buscando una forma de generar un informe muy bien formateado en un archivo de texto usando java.
Por ejemplo, podría necesitar imprimir un informe en el siguiente formato
A Monthly Report A Report Name Page No: 1 A Date: YYYY-MM-DD A A Category Quantity Price A ----------------- ----------------- -------------------- B Pen 100 $100 B Paper 200 $400 A A ================= ==================== B Total $500 A ================= ====================
¡He intentado escribir mi propio programa, pero siento que es un desastre! Entonces, me pregunto si hay alguna biblioteca existente que pueda usar o si hay una buena manera de implementarla.
Por cierto, he mirado alrededor y he encontrado una biblioteca que es similar a lo que quiero https://github.com/iNamik/Java-Text-Table-Formatter
Me pregunto si hay otras opciones. ¡¡Gracias por ayudar!!
=============================================== ==================
Así que hice un código de muestra que probablemente usaré para limpiar mi código
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s %50s%n", "A", "Monthly Report"));
sb.append(String.format("%s %48s%n", "A", "Report Name"));
sb.append(String.format("%s %n", "A"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "A", "Category", "Quantity", "Price"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "A", "--------------", "--------------", "--------------"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "B", "Paper", 100, "$200"));
System.out.println(sb.toString());
Salida:
A Monthly Report A Report Name A A Category Quantity Price A -------------- -------------- -------------- B Paper 100 $200
Estoy pensando en cómo puedo hacer que el "Nombre del informe" esté en el centro y "No de página" a la derecha sin codificar con dificultad el argumento int del formateador (es decir,% 50s, sin 50, es posible)
Prueba la biblioteca iText java que he usado para generar facturas para mi aplicación.
Solo como alternativa, aquí está la solución basada en JDK
public static void main(String[] args) throws Exception {
printRow("A", "Category", "Quantity", "Price");
printRow("A", "--------------", "--------------", "--------------");
printRow("B", "Paper", 100, 200);
}
private static void printRow(String c0, String c1, Object c2, Object c3 ) {
System.out.printf("%s %-20s %-20s %-20s%n", c0, c1, String.valueOf(c2), c3 instanceof Integer ? "$" + c3 : c3);
}
salida
A Category Quantity Price
A -------------- -------------- --------------
B Paper 100 $200
Apache Velocity es una buena herramienta para formatear texto o crear plantillas. Funciona con texto plano, HTML, JSP, XML, scripts SQL, etc. Aquí hay un buen tutorial de helloWorld al respecto.
Los pasos básicos son:
- Escribe tu plantilla de texto.
- Inicializa el Velocity Engine.
- Inserta el contexto que necesitas.
- Y preséntalo.
Otros como el látex son más complejos pero realmente más poderosos. Eche un vistazo a JasperReports si solo necesita formatos de informes.