saltos salto original linea insertar data content bootstrap java pdf pdf-generation pdfbox

java - original - Cómo insertar un salto de línea con PDFBox drawString



saltos de linea en jquery (3)

Debido a que el modelo PDF a menudo no es el mejor modelo para la tarea en cuestión, a menudo tiene sentido escribir un contenedor que le agregue soporte para lo que "falta" en su caso. Esto es cierto tanto para leer como para escribir.

Tengo que hacer un PDF con una tabla. Hasta ahora funciona bien, pero ahora quiero agregar una función de envoltura. Entonces necesito insertar un Linefeed.

contentStream.beginText(); contentStream.moveTextPositionByAmount(x, y); contentStream.drawString("Some text to insert into a table."); contentStream.endText();

Quiero agregar un " /n " antes de "insertar". Intenté " /u000A " que es el valor hexadecimal para el salto de línea, pero Eclipse me muestra un error.

¿Es posible agregar linefeed con drawString?


El formato pdf no conoce los saltos de línea. Tienes que dividir la cadena y mover la posición del texto a la siguiente línea, usando moveTextPositionByAmount.

Esta no es una "característica de pdfbox" especial, se debe a la definición de formato de PDF; por lo que no hay forma de que DrawString y tampoco haya otros métodos para llamar que sean compatibles con los avances de línea.


El formato PDF permite saltos de línea, pero PDFBox no tiene función de compilación para saltos de línea.

Para utilizar saltos de línea en PDF, debe definir el líder que desea usar con el operador TL . El operador T* hace un salto de línea. El operador '' escribe el texto dado en la siguiente línea. (Consulte la especificación PDF para obtener más detalles, capítulo "Texto". No es mucho).

Aquí hay dos fragmentos de código. Ambos hacen lo mismo, pero el primer fragmento usa '' y el segundo fragmento usa T* .

private void printMultipleLines( PDPageContentStream contentStream, List<String> lines, float x, float y) throws IOException { if (lines.size() == 0) { return; } final int numberOfLines = lines.size(); final float fontHeight = getFontHeight(); contentStream.beginText(); contentStream.appendRawCommands(fontHeight + " TL/n"); contentStream.moveTextPositionByAmount(x, y); contentStream.drawString(lines.get(0)); for (int i = 1; i < numberOfLines; i++) { contentStream.appendRawCommands(escapeString(lines.get(i))); contentStream.appendRawCommands(" /'/n"); } contentStream.endText(); } private String escapeString(String text) throws IOException { try { COSString string = new COSString(text); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); string.writePDF(buffer); return new String(buffer.toByteArray(), "ISO-8859-1"); } catch (UnsupportedEncodingException e) { // every JVM must know ISO-8859-1 throw new RuntimeException(e); } }

Use T* para el salto de línea:

private void printMultipleLines( PDPageContentStream contentStream, List<String> lines, float x, float y) throws IOException { if (lines.size() == 0) { return; } final int numberOfLines = lines.size(); final float fontHeight = getFontHeight(); contentStream.beginText(); contentStream.appendRawCommands(fontHeight + " TL/n"); contentStream.moveTextPositionByAmount( x, y); for (int i = 0; i < numberOfLines; i++) { contentStream.drawString(lines.get(i)); if (i < numberOfLines - 1) { contentStream.appendRawCommands("T*/n"); } } contentStream.endText(); }

Para obtener la altura de la fuente, puede usar este comando:

fontHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;

Es posible que desee multiplicarlo con algún factor de tono de línea.