A continuación presento esta forma de como convertir un String a PDF en Java con las siguientes ventajas:
- de forma rápida
- sin preocuparme por los márgenes
- usando Java
Librería para convertir String a PDF en Java
Primeramente necesitamos algunas librerías, yo usaré maven para importarlas.
Simplemente especifico en la sección de dependencias lo siguiente:
<!--conversión de txt a pdf-->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
si no tienes maven, deberás buscar manualmente itex.jar en mi caso uso la versión 2.1.7 y revisar que en su estructura de paquetes tenga com.lowagie.
Nota: iText es de paga, si la usas para proyectos comerciales deberás pagar su licencia.
Código de conversión de cadena a PDF
Como verás por cada salto de línea agregaremos un párrafo.
package mx.ine.sidj.service.ws.util;
import com.lowagie.text.*;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
import java.io.*;
/**
* Created by Javatlacati on 14/12/2016.
*/
public class TextToPDF {
public static void main(String[] args) {
String text = "Hello Because font metrics is based on a graphics context, we need to create\n" +
"a small, temporary image so we can ascertain the width and height\n" +
"of the final image\nabsolutely very large text 123456789101112131415161718192021222324252627282293031323334353637383940";
TextToPDF.convertStringToPDF(text.split("\n"));
}
public static void convertStringToPDF(String[] string) {
byte[] barr = new byte[0];
Document pdfDoc = new Document(PageSize.LETTER);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();) {
PdfWriter.getInstance(pdfDoc, baos).setPdfVersion(PdfWriter.VERSION_1_7);
BaseFont courier = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.EMBEDDED);
Font myfont = new Font(courier);
myfont.setStyle(Font.NORMAL);
myfont.setSize(11);
pdfDoc.open();
pdfDoc.add(new Paragraph("\n"));
for (String strLine : string) {
Paragraph para = new Paragraph(strLine + "\n", myfont);
para.setAlignment(Element.ALIGN_JUSTIFIED);
pdfDoc.add(para);
}
pdfDoc.close();
barr = baos.toByteArray();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//to save but if you are on a JSP you can stream it from byte[]
try (FileOutputStream outputStream = new FileOutputStream(new File("/mypath/archivo.pdf"))) {
outputStream.write(barr);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Espero este truco te haya gustado, si es así, tal vez también te interese Convertir archivo Powerpoint a PDF con Java.