J'ai créé un PDF avec Java.

introduction

La sortie de formulaire a été vue dans tous les systèmes, mais récemment, elle est devenue sans papier, donc j'estime que le nombre de sortie de papier lui-même diminue. Cependant, des pratiques commerciales de type formulaire sont toujours nécessaires. Créons facilement des données PDF.

Bibliothèque

pdfbox-2.0.8

Télécharger les ici. Officiel

Essayez d'abord de créer un fichier

package pdf;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

public class PdfTest {

    public static void main(String args[]) {
	    try {
	    	
	        //Créer un objet document
	        PDDocument document = new PDDocument();

	        //Créer un objet de page
	        PDPage page = new PDPage();
	        document.addPage(page);

	        //Sauvegarder le document
	        document.save("test.pdf");
	        document.close();
	    }
	    catch (Exception e) {
	        e.printStackTrace();
	    }
	}
}

Résultat d'exécution

image.png

image.png

Vous disposez maintenant d'un fichier d'une page.

Caractères de sortie

Vient ensuite la sortie des caractères.

package pdf;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class PdfTest {

    public static void main(String args[]) {
	    try {
	    	
	        //Créer un objet document
	        PDDocument document = new PDDocument();

	        //Créer un objet de page
	        PDPage page = new PDPage();
	        document.addPage(page);

	        //Traitement de sortie de caractères
	        PDPageContentStream contentStream = new PDPageContentStream(document, page);
	        contentStream.beginText();
	        //Spécification de la police
	        PDFont font = PDType1Font.TIMES_ITALIC;
	        contentStream.setFont(font, 12);
	        //Spécification de la position de sortie
	        contentStream.newLineAtOffset(0f, 0f);
	        //Chaîne de sortie
	        contentStream.showText( "HelloWorld" );
	        contentStream.endText();
	        contentStream.close();
	        
	        //Sauvegarder le document
	        document.save("test2.pdf");
	        document.close();
	    }
	    catch (Exception e) {
	        e.printStackTrace();
	    }
	}
}

Résultat d'exécution

image.png

image.png

Puisque la position de sortie est contentStream.newLineAtOffset (0f, 0f), elle sera sortie en bas à gauche. Il existe différents types de polices de sortie.

Japonais de sortie

package pdf;

import java.io.File;

import org.apache.fontbox.ttf.TrueTypeCollection;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;

public class PdfTest {

    public static void main(String args[]) {
	    try {
	    	
	        //Créer un objet document
	        PDDocument document = new PDDocument();

	        //Créer un objet de page
	        PDPage page = new PDPage();
	        document.addPage(page);

	        //Traitement de sortie de caractères
	        PDPageContentStream contentStream = new PDPageContentStream(document, page);
	        contentStream.beginText();
	        //Spécification de la police
	        File file = new File("C:/Windows/Fonts/msmincho.ttc");
	        TrueTypeCollection collection = new TrueTypeCollection(file);
	        PDFont font = PDType0Font.load(document, collection.getFontByName("MS-Mincho"), true);

	        contentStream.setFont(font, 12);
	        //Spécification de la position de sortie
	        contentStream.newLineAtOffset(0f, 755f);
	        //Chaîne de sortie
	        contentStream.showText( "Bonjour le monde" );
	        contentStream.endText();
	        contentStream.close();
	        
	        //Sauvegarder le document
	        document.save("test3.pdf");
	        document.close();
	    }
	    catch (Exception e) {
	        e.printStackTrace();
	    }
	}
}

Résultat d'exécution

image.png

image.png

Les fichiers de polices sont traités légèrement différemment entre .ttf et .ttc. Cette fois, j'utilise .ttc.

Conservez uniquement les données PDF sans créer de fichier

Selon l'analyse de rentabilisation, il peut être nécessaire que vous souhaitiez enregistrer uniquement les données sans créer le fichier réel. Ceci peut être réalisé sans aucun problème.

package pdf;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.fontbox.ttf.TrueTypeCollection;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;

public class PdfTest {

    public static void main(String args[]) {
	    try {
	    	
	        //Créer un objet document
	        PDDocument document = new PDDocument();

	        //Créer un objet de page
	        PDPage page = new PDPage();
	        document.addPage(page);

	        //Traitement de sortie de caractères
	        PDPageContentStream contentStream = new PDPageContentStream(document, page);
	        contentStream.beginText();
	        //Spécification de la police
	        File file = new File("C:/Windows/Fonts/msmincho.ttc");
	        TrueTypeCollection collection = new TrueTypeCollection(file);
	        PDFont font = PDType0Font.load(document, collection.getFontByName("MS-Mincho"), true);

	        contentStream.setFont(font, 12);
	        //Spécification de la position de sortie
	        contentStream.newLineAtOffset(0f, 755f);
	        //Chaîne de sortie
	        contentStream.showText( "Bonjour le monde. Enregistrez uniquement les données." );
	        contentStream.endText();
	        contentStream.close();

	        //Enregistrer les données du document
	        ByteArrayOutputStream out = new ByteArrayOutputStream();
	        document.save(out);
	        document.close();
	        
	        InputStream streamData =new ByteArrayInputStream(out.toByteArray());
	        
	        System.out.println("Vérification------------");
	        System.out.println("streamData" + streamData);
	    }
	    catch (Exception e) {
	        e.printStackTrace();
	    }
	}
}

Vous pouvez l'enregistrer dans une colonne de type blob tel quel.

Extrayez la chaîne de caractères du PDF créé.

package pdf;

import java.io.File;
import java.io.StringWriter;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class GetPdfText {

    public static void main(String args[]) {
	    try {
			
	    	String pdfFile = "test3.pdf";
	    	PDDocument document = PDDocument.load(new File(pdfFile));
	    	StringWriter output = new StringWriter();
	        PDFTextStripper stripper = new PDFTextStripper();
	    	stripper.setStartPage(1);
	    	stripper.setEndPage(1);
	    	stripper.setSortByPosition(false);
	    	stripper.setShouldSeparateByBeads(true);
	    	stripper.writeText(document, output);
	    	String content = output.toString();
	    	System.out.println("---------Début de sortie-------------");
	    	System.out.println(content);

		} catch (Exception e) {
			e.printStackTrace();
		}
    }
}

Résultat d'exécution

--------- Démarrer la sortie -------------- Bonjour le monde

Il existe diverses autres fonctions telles que l'incorporation d'image et les bordures, je vais donc en profiter pour les ajouter.

Recommended Posts

J'ai créé un PDF avec Java.
J'ai créé un programme de jugement des nombres premiers en Java
Lire une chaîne dans un fichier PDF avec Java
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai écrit un programme de jugement des nombres premiers en Java
J'ai créé un jeu Janken en Java (CLI)
J'ai écrit un programme de factorisation prime en Java
J'ai fait une roulette à Java.
Rechercher un sous-ensemble en Java
J'ai essayé la métaprogrammation avec Java
J'ai fait un jeu de problèmes de calcul simple en Java
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé OCR de traiter un fichier PDF avec Java
Ce que j'ai appris lors de la création d'un serveur en Java
J'ai envoyé un e-mail en Java
3 Implémentez un interpréteur simple en Java
J'ai créé une application shopify @java
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Je voulais juste créer une propriété réactive en Java
J'ai écrit le théorème de Gordobach en java
Un exemple simple de rappels en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai fait une annotation en Java.
J'ai essayé d'utiliser JWT en Java
Restez coincé dans un Java Primer
J'ai créé un client RESAS-API en Java
J'ai essayé OCR de traiter un fichier PDF avec Java part2
Java dessine des formes dans des documents PDF
Je ne peux pas créer une classe Java avec un nom spécifique dans IntelliJ
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java)
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (1)
Comment faire fonctionner automatiquement un écran créé en Java sous Windows
J'ai écrit une sorte de livre qui ressemble à Java
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (3)
A propos du renvoi d'une référence dans un Java Getter
Qu'est-ce qu'une classe en langage Java (3 /?)
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé un problème de calendrier avec Ruby
Lors de la recherche de plusieurs dans un tableau Java
[Création] Un mémorandum sur le codage en Java
J'ai essayé le nouveau yuan à Java
Java crée un tableau dans un document Word
Java crée un graphique circulaire dans Excel
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Créer une application TODO dans Java 7 Créer un en-tête
Créons une application de calcul avec Java
J'ai fait l'étalonnage de la caméra OpenCV en Java
Implémenter quelque chose comme une pile en Java
Diviser une chaîne avec ". (Dot)" en Java
Création d'une classe de matrice dans Java Partie 1
J'ai créé un nouvel outil de déploiement Java
Programmer les en-têtes et pieds de page PDF en Java
[* Java *] J'ai participé au JJUG CCC 2019 Spring
Environnement de développement d'applications Java créé dans un environnement VM
J'ai essayé d'incorporer une formule dans Javadoc
J'ai créé un exemple d'application Selenium qui prend en charge plusieurs navigateurs (Chrome, IE, Firefox) qui s'exécute sur Java.