[JAVA] J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)

Article précédent

https://amg-solution.jp/blog/3674 Page de référence

J'ai fait un formulaire comme celui-ci

image.png

Ceci est contrôlé du côté Java.

Vérifiez l'intégralité de l'organigramme

Comme je l'ai écrit au moment de la création, JasperReport produit le formulaire comme celui-ci.

Charger le modèle de formulaire ↓ Compilez le modèle ← 1, intégrez les données nécessaires à la compilation! ↓ Incorporer les données dans le modèle ← 2. Créez ici les données nécessaires! ↓ Sortie sous forme de fichier PDF ← 3. Écrivez le processus de compilation Java!

Le travail à faire cette fois est numéroté. Faisons-le étape par étape.

Incorporer le fichier de police

Créez un dossier ** fonts ** dans le dossier de ressources du formulaire et copiez ipaexg.ttf.

image.png

Ensuite, écrivez les paramètres de la police que JasperReport lit. Créez le xml suivant dans le dossier ** fonts **.

ipaexg.xml


<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
  <fontFamily name="IPAexg">
    <normal>fonts/ipaexg.ttf</normal>
    <pdfEncoding>Identity-H</pdfEncoding>
    <pdfEmbedded>true</pdfEmbedded>
  </fontFamily>
</fontFamilies>

C'est fondamentalement la même chose que de l'installer dans Jasper Report, donc je ne pense pas que cela nécessite une explication.

Enfin, créez un fichier d'extension appelé jasperreports_extension.properties directement sous ** resource **. JasperReport compilera désormais les polices IPA.

jasperreports_extension.properties


net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.ipaex=fonts/ipaexg.xml

Les pré-fichiers nécessaires à la compilation sont maintenant prêts.

Créez des données à incorporer dans le formulaire.

Comment créer des données

Maintenant que le fichier modèle a été créé, créez les données à incorporer. JasperReport lit désormais les ** paramètres dans une carte ** et les ** champs dans une liste **. Commençons par créer un modèle à intégrer dans la liste.

Vérifiez la position du formulaire

Tout d'abord, vérifiez l'emplacement du fichier jrxml.

image.png

Assurez-vous qu'il est sous ** ressource / rapport ** (enfin, n'importe où sous ressource, c'est bien)

Faire un modèle

Créons un modèle dans lequel insérer des données. Ce n'est pas un programme particulièrement difficile. Je crée un constructeur pour pouvoir saisir facilement des données.

SampleProductModel.java


import lombok.Data;

@Data
public class SampleProductModel {

	private String Product_name;
	private int Price;
	
	public SampleProductModel(String name, int Price){
		this.Product_name = name;
		this.Price = Price;
	}
}

C'est le style d'écriture omis avec ** lombok **. Si vous n'avez pas installé la bibliothèque, veuillez ajouter Getter et Setter.

Faites Dao.

Depuis que j'ai fait un modèle, je l'ai accédé à partir de la base de données. Je veux en faire un corps. Créons un objet d'accès aux données. Mettons les données d'affichage dans la méthode appelée find ().

SampleProductDao.java



import tsugaruinfo.entity.SampleProductModel;

public class SampleProductDao {

	public List<SampleProductModel> findByAll(){
		List<SampleProductModel> result = new ArrayList<>();
	
		SampleProductModel data1 = new SampleProductModel("Valve de colle",400);
		SampleProductModel data2 = new SampleProductModel("Déjeuner Makunouchi",500);
		
		result.add(data1);
		result.add(data2);
		
		return result;
	
	}
}

Cette fois, je n'ai eu que deux types de données, la valve à colle et le déjeuner Makunouchi.

Créez un contrôleur.

Ensuite, préparez l'adresse où vous pouvez télécharger ce PDF.

Faisons un contrôleur

ProductController.java



@Controller
public class ProductController {

	@Autowired
	ResourceLoader resource;

	@RequestMapping(value = "/sample", method = RequestMethod.GET)
	public String sample() {
		
		return null;
	}

Les paramètres du contrôleur sont omis. (Si vous disposez d'un contrôleur accessible à partir du serveur local correctement) ResourceLoader est nécessaire pour charger jrxml ultérieurement. Préparons-le maintenant.

Créons maintenant les données. D'abord des paramètres

ProductController.java


		//Création de données
		HashMap<String, Object> params = new HashMap<String, Object>();
		
		//Création de données d'en-tête
		params.put("Client_name", "Yamamoto Securities");
		params.put("Date_today", "1 mai 2018");

Ensuite, créez des données de champ. Vous venez de créer le mécanisme pour le créer.

ProductController.java



		SampleProductDao dao = new SampleProductDao();
		
		List<SampleProductModel> fields = dao.findByAll();

Compilez et sortez le formulaire

Cette fois, je veux en faire un format de téléchargement, alors j'ai fait cette méthode.

ProductController.java


	/**
	 *Compilation de rapports Juster. Renvoyez le fichier binaire.
	 * @param data
	 * @param response
	 * @return
	 */
	private byte[] OrderReporting2(HashMap<String, Object> param, List<SampleProductModel> data) {
		InputStream input;
		try {
			//Obtenez le fichier de formulaire
			input = new FileInputStream(resource.getResource("classpath:report/Blank_A4.jrxml").getFile());
			//Liste à la source de données de champ
			JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);
			//Compilez le formulaire
			JasperReport jasperReport = JasperCompileManager.compileReport(input);
			
			JasperPrint jasperPrint;
			//Injecter des paramètres et des données de champ
			jasperPrint = JasperFillManager.fillReport(jasperReport, param, dataSource);
			//Formulaire de sortie au format Byte
			return 	JasperExportManager.exportReportToPdf(jasperPrint);
			
		} catch (FileNotFoundException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		} catch (IOException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		} catch (JRException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;

	}

En termes de points

  1. Doit être fait dans la section try {}.
  2. Le PDF est renvoyé sous forme d'octet []. Est-ce l'endroit à dire?

Cette fois, je voulais en faire un format de téléchargement, donc je l'ai renvoyé sous forme d'octet, mais si vous changez la méthode de ** JasperExportManager **, vous pouvez l'exporter en tant que fichier tel quel. essayez-le!

Utilisez maintenant cette méthode pour obtenir le formulaire PDF.

ProductController.java


		//Recherche de données et formulaire de sortie
		byte[] output  = OrderReporting2(params, fields);

Télécharger le PDF

Distribuons le formulaire craché sous forme de format de téléchargement.

ProductController.java


		response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=" + "sample.pdf");
        response.setContentLength(output.length);
		
        OutputStream os = null;
        try {
            os = response.getOutputStream();
            os.write(output);
            os.flush();
            
            os.close();
        } catch (IOException e) {
            e.getStackTrace();

Je ne vais pas expliquer le téléchargement en détail. Voir ici.

Je pense que le contrôleur ressemble à ceci dans son ensemble.

ProductController.java


@Controller
public class ProductController {

	@Autowired
	ResourceLoader resource;
	
	@RequestMapping(value = "/sample", method = RequestMethod.GET)
	public String sample( HttpServletResponse response) {
		
		/**▼▼▼ ▼**/
		//Création de données d'en-tête
		HashMap<String, Object> params = new HashMap<String, Object>();
		params.put("Client_name", "Yamamoto Securities");
		params.put("Date_today", "1 mai 2018");
		
		//Création de données de terrain
		SampleProductDao dao = new SampleProductDao();
		List<SampleProductModel> fields = dao.findByAll();
		
		/**▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲**/
		/**▼▲ ▼ ▼▼▼▼**/
		//Recherche de données et formulaire de sortie
		byte[] output  = OrderReporting2(params, fields);
		/**▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲**/
		
		/**▼▲ ▼ Section de téléchargement des données de création de données**/
		response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=" + "sample.pdf");
        response.setContentLength(output.length);
		
        OutputStream os = null;
        try {
            os = response.getOutputStream();
            os.write(output);
            os.flush();
            
            os.close();
        } catch (IOException e) {
            e.getStackTrace();
        }
		/**▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲**/
        
        
		return null;
	}
	/**
	 *Compilation de rapports Juster. Renvoyez le fichier binaire.
	 * @param data
	 * @param response
	 * @return
	 */
	private byte[] OrderReporting2(HashMap<String, Object> param, List<SampleProductModel> data) {
		InputStream input;
		try {
			//Obtenez le fichier de formulaire
			input = new FileInputStream(resource.getResource("classpath:report/Blank_A4.jrxml").getFile());
			//Liste à la source de données de champ
			JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);
			//Compilez le formulaire
			JasperReport jasperReport = JasperCompileManager.compileReport(input);
			
			JasperPrint jasperPrint;
			//Injecter des paramètres et des données de champ
			jasperPrint = JasperFillManager.fillReport(jasperReport, param, dataSource);
			//Formulaire de sortie au format Byte
			return 	JasperExportManager.exportReportToPdf(jasperPrint);
			
		} catch (FileNotFoundException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		} catch (IOException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		} catch (JRException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;

	}
}

La principale est la méthode ** sample **. OrderReporting2 est un sous-programme. Bien sûr, cette fois, j'ai divisé les commentaires d'une manière facile à comprendre, mais il est également efficace de les diviser en méthodes en guise de conception.

Courons

Lançons-le

Démarrez le serveur et accédez à l'adresse correspondante (/ sample).

image.png

Le fichier a été téléchargé correctement. Je vais l'ouvrir.

image.png

(Bien que ce soit un peu décalé) Vous pouvez voir que les paramètres sont correctement saisis et que le tableau est imprimé.

Puisque les formulaires appartiennent à des entreprises, je pense que beaucoup d'entre eux sont fabriqués sur une base commerciale. C'est gratuit et peut être utilisé à des fins commerciales, alors pourquoi ne pas utiliser une telle bibliothèque?

Édition supplémentaire bonus

Recommended Posts

J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 1/3 (paramètres Jasper Reports)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 2/3 (création de modèle de formulaire)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports Extra (édition Variables)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports Extra Edition (édition d'image)
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
J'ai essayé GraphQL avec Spring Boot
J'ai essayé Flyway avec Spring Boot
J'ai essayé de me connecter à MySQL en utilisant le modèle JDBC avec Spring MVC
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
J'ai essayé de jouer un peu avec BottomNavigationView ①
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'ai essayé Spring.
Juste des images d'entrée et de sortie avec Spring MVC
J'ai aussi essayé Web Assembly avec Nim et C
J'ai essayé de lier JavaFX et Spring Framework.
J'ai essayé de casser le bloc avec java (1)
Comment créer un formulaire Excel à l'aide d'un fichier modèle avec Spring MVC
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
[J'ai essayé] Tutoriel de printemps
J'ai essayé de lire et de sortir CSV avec Outsystems
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
J'ai essayé de démarrer avec Spring Data JPA
J'ai essayé Spring Batch
J'ai créé un serveur et un client Restful au printemps.
J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
[Rails] J'ai essayé de créer une mini application avec FullCalendar
J'ai essayé le guide d'introduction de Spring Boot [Accès aux données avec JPA]
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
J'ai essayé JAX-RS et pris note de la procédure
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé OCR de traiter un fichier PDF avec Java part2
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
Configuration Java avec Spring MVC
J'ai essayé DI avec Ruby
J'ai essayé la machine Spring State
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
J'ai essayé le guide d'introduction de Spring Boot [Création d'un service Web RESTful]
Une erreur 404 se produit lors du test de l'authentification par formulaire avec Spring Security
J'ai essayé d'exécuter une application d'échange de cartes de crédit avec Corda 1
Créer un formulaire de relation parent-enfant avec form_object (j'ai également écrit un test)
J'ai essayé de créer une application Android avec MVC maintenant (Java)
Guide de démarrage de Spring Boot [Utilisation d'un service Web RESTful]
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
J'ai essayé de créer une application d'apprentissage automatique avec Dash (+ Docker) part1 ~ Construction de l'environnement et vérification du fonctionnement ~
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé l'analyse morphologique avec MeCab