[JAVA] Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.

Vorheriger Artikel

https://amg-solution.jp/blog/3674 Referenzseite

Ich habe so ein Formular gemacht

image.png

Dies wird auf der Java-Seite gesteuert.

Überprüfen Sie das gesamte Flussdiagramm

Wie ich zum Zeitpunkt der Erstellung geschrieben habe, gibt JasperReport das Formular folgendermaßen aus.

Laden Sie die Formularvorlage ↓ Kompilieren Sie die Vorlage ← 1, binden Sie die für die Kompilierung erforderlichen Daten ein! ↓ Daten in die Vorlage einbetten ← 2. Hier die erforderlichen Daten erstellen! ↓ Ausgabe als PDF-Datei ← 3. Schreiben Sie den Java-Kompilierungsprozess!

Die diesmal zu erledigende Arbeit ist nummeriert. Lass es uns Schritt für Schritt tun.

Schriftdatei einbetten

Erstellen Sie einen Ordner ** fonts ** im Ressourcenordner des Formulars und kopieren Sie ipaexg.ttf.

image.png

Schreiben Sie als Nächstes die Einstellungen der Schriftart, die JasperReport liest. Erstellen Sie die folgende XML im Ordner ** 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>

Es ist im Grunde dasselbe wie das Einstellen in Jasper Report, daher denke ich nicht, dass es einer Erklärung bedarf.

Erstellen Sie abschließend eine Erweiterungsdatei mit dem Namen jasperreports_extension.properties direkt unter ** resource **. JasperReport kompiliert jetzt IPA-Schriftarten.

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

Die für die Kompilierung benötigten Vordateien sind jetzt fertig.

Erstellen Sie Daten, die in das Formular eingebettet werden sollen.

So erstellen Sie Daten

Nachdem die Vorlagendatei erstellt wurde, erstellen Sie die einzubettenden Daten. JasperReport liest jetzt ** Parameter in einer Karte ** und ** Felder in einer Liste **. Erstellen wir zunächst ein Modell, das in die Liste eingebettet werden soll.

Überprüfen Sie die Position des Formulars

Überprüfen Sie zunächst den Speicherort der jrxml-Datei.

image.png

Stellen Sie sicher, dass es sich unter ** Ressource / Bericht ** befindet (nun, überall unter Ressource ist in Ordnung)

Mach ein Modell

Erstellen wir ein Modell zum Einfügen von Daten. Es ist kein besonders schwieriges Programm. Ich mache einen Konstruktor, damit ich leicht Daten eingeben kann.

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;
	}
}

Dies ist der Schreibstil, der mit ** lombok ** weggelassen wurde. Wenn Sie die Bibliothek nicht installiert haben, fügen Sie bitte Getter und Setter hinzu.

Mach Dao.

Da ich ein Modell erstellt habe, habe ich über die Datenbank darauf zugegriffen. Ich möchte daraus einen Körper machen. Lassen Sie uns ein Datenzugriffsobjekt erstellen. Fügen wir die Anzeigedaten in die Methode find () ein.

SampleProductDao.java



import tsugaruinfo.entity.SampleProductModel;

public class SampleProductDao {

	public List<SampleProductModel> findByAll(){
		List<SampleProductModel> result = new ArrayList<>();
	
		SampleProductModel data1 = new SampleProductModel("Klebeventil",400);
		SampleProductModel data2 = new SampleProductModel("Makunouchi Mittagessen",500);
		
		result.add(data1);
		result.add(data2);
		
		return result;
	
	}
}

Dieses Mal habe ich nur zwei Arten von Daten erhalten, das Leimventil und das Makunouchi-Mittagessen.

Machen Sie einen Controller.

Bereiten Sie dann die Adresse vor, unter der Sie dieses PDF herunterladen können.

Lassen Sie uns einen Controller machen

ProductController.java



@Controller
public class ProductController {

	@Autowired
	ResourceLoader resource;

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

Die Controller-Einstellungen werden weggelassen. (Wenn Sie einen Controller haben, auf den vom lokalen Server aus ordnungsgemäß zugegriffen werden kann) ResourceLoader wird benötigt, um jrxml später zu laden. Machen wir es jetzt fertig.

Nun erstellen wir die Daten. Zuerst aus den Parametern

ProductController.java


		//Datenerstellung
		HashMap<String, Object> params = new HashMap<String, Object>();
		
		//Erstellung von Header-Daten
		params.put("Client_name", "Yamamoto Securities");
		params.put("Date_today", "1. Mai 2018");

Erstellen Sie als Nächstes Felddaten. Sie haben gerade den Mechanismus zum Erstellen erstellt.

ProductController.java



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

Kompilieren Sie das Formular und geben Sie es aus

Dieses Mal möchte ich es zu einem Download-Format machen, also habe ich diese Methode gemacht.

ProductController.java


	/**
	 *Zusammenstellung von Juster-Berichten. Geben Sie die Binärdatei zurück.
	 * @param data
	 * @param response
	 * @return
	 */
	private byte[] OrderReporting2(HashMap<String, Object> param, List<SampleProductModel> data) {
		InputStream input;
		try {
			//Holen Sie sich die Formulardatei
			input = new FileInputStream(resource.getResource("classpath:report/Blank_A4.jrxml").getFile());
			//Liste zur Felddatenquelle
			JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);
			//Kompilieren Sie das Formular
			JasperReport jasperReport = JasperCompileManager.compileReport(input);
			
			JasperPrint jasperPrint;
			//Injizieren Sie Parameter- und Felddaten
			jasperPrint = JasperFillManager.fillReport(jasperReport, param, dataSource);
			//Ausgabeformular im Byte-Format
			return 	JasperExportManager.exportReportToPdf(jasperPrint);
			
		} catch (FileNotFoundException e) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		} catch (IOException e) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		} catch (JRException e) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;

	}

In Bezug auf Punkte

  1. Muss im Abschnitt try {} durchgeführt werden.
  2. PDF wird als Byte [] zurückgegeben. Ist das der Ort zu sagen?

Dieses Mal wollte ich es zu einem Download-Format machen, also habe ich es als Byte zurückgegeben, aber wenn Sie die Methode von ** JasperExportManager ** ändern, können Sie es so wie es ist als Datei exportieren. Versuch es!

Verwenden Sie nun diese Methode, um das PDF-Formular abzurufen.

ProductController.java


		//Daten suchen und Formular ausgeben
		byte[] output  = OrderReporting2(params, fields);

PDF Herunterladen

Verteilen wir das Ausspuckformular als Download-Format.

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();

Ich werde den Download nicht im Detail erklären. Siehe hier.

Ich denke, der Controller sieht insgesamt so aus.

ProductController.java


@Controller
public class ProductController {

	@Autowired
	ResourceLoader resource;
	
	@RequestMapping(value = "/sample", method = RequestMethod.GET)
	public String sample( HttpServletResponse response) {
		
		/**▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼**/
		//Erstellung von Header-Daten
		HashMap<String, Object> params = new HashMap<String, Object>();
		params.put("Client_name", "Yamamoto Securities");
		params.put("Date_today", "1. Mai 2018");
		
		//Felddatenerstellung
		SampleProductDao dao = new SampleProductDao();
		List<SampleProductModel> fields = dao.findByAll();
		
		/**▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲**/
		/**▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼▼▼▼▼**/
		//Daten suchen und Formular ausgeben
		byte[] output  = OrderReporting2(params, fields);
		/**▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲**/
		
		/**▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼**/
		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;
	}
	/**
	 *Zusammenstellung von Juster-Berichten. Geben Sie die Binärdatei zurück.
	 * @param data
	 * @param response
	 * @return
	 */
	private byte[] OrderReporting2(HashMap<String, Object> param, List<SampleProductModel> data) {
		InputStream input;
		try {
			//Holen Sie sich die Formulardatei
			input = new FileInputStream(resource.getResource("classpath:report/Blank_A4.jrxml").getFile());
			//Liste zur Felddatenquelle
			JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);
			//Kompilieren Sie das Formular
			JasperReport jasperReport = JasperCompileManager.compileReport(input);
			
			JasperPrint jasperPrint;
			//Injizieren Sie Parameter- und Felddaten
			jasperPrint = JasperFillManager.fillReport(jasperReport, param, dataSource);
			//Ausgabeformular im Byte-Format
			return 	JasperExportManager.exportReportToPdf(jasperPrint);
			
		} catch (FileNotFoundException e) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		} catch (IOException e) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		} catch (JRException e) {
			//TODO automatisch generierter Fangblock
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;

	}
}

Die wichtigste ist die ** Beispielmethode **. OrderReporting2 ist eine Unterroutine. Natürlich habe ich diesmal die Kommentare auf leicht verständliche Weise aufgeteilt, aber es ist auch effektiv, sie als Design in Methoden zu unterteilen.

Lass uns rennen

Lass es uns laufen

Starten Sie den Server und greifen Sie auf die entsprechende Adresse (/ sample) zu.

image.png

Die Datei wurde ordnungsgemäß heruntergeladen. Ich werde es öffnen.

image.png

(Obwohl es ein wenig aus ist) Sie können sehen, dass die Parameter richtig eingegeben und die Tabelle gedruckt wurden.

Da die Formulare Unternehmen gehören, denke ich, dass viele von ihnen auf kommerzieller Basis hergestellt werden. Es ist kostenlos und kann für kommerzielle Zwecke verwendet werden. Warum also nicht eine solche Bibliothek nutzen?

Bonus Extra Edition

Recommended Posts

Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 2/3 (Formularvorlagenerstellung) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports Extra Edition (Variables Edition) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports Extra Edition (Bildausgabe) zu drucken.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Flyway mit Spring Boot ausprobiert
Ich habe versucht, mithilfe von JDBC Template mit Spring MVC eine Verbindung zu MySQL herzustellen
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Ich habe versucht, ein wenig mit BottomNavigationView zu spielen ①
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe es mit Spring versucht.
Geben Sie einfach Bilder mit Spring MVC ein und geben Sie sie aus
Ich habe auch Web Assembly mit Nim und C ausprobiert
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, den Block mit Java zu brechen (1)
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
[Ich habe es versucht] Spring Tutorial
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe Spring Batch ausprobiert
Ich habe im Frühjahr einen Restful-Server und -Client erstellt.
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe das Spring Boot-Einführungshandbuch [Zugriff auf Daten mit JPA] ausprobiert.
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe mit Spring Boot ein einfaches MVC-Beispielsystem erstellt
Java-Konfiguration mit Spring MVC
Ich habe DI mit Ruby versucht
Ich habe Spring State Machine ausprobiert
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich habe das Spring Boot-Einführungshandbuch [Erstellen eines RESTful-Webdiensts] ausprobiert.
Beim Testen der Formularauthentifizierung mit Spring Security tritt ein 404-Fehler auf
Ich habe versucht, eine Kreditkartenhandelsanwendung mit Corda 1 auszuführen
Erstellen Sie ein Eltern-Kind-Beziehungsformular mit form_object (ich habe auch einen Test geschrieben)
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Spring Boot Erste Schritte [Konsumieren eines RESTful-Webdienstes]
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, eine Anwendung für maschinelles Lernen mit Dash (+ Docker) Teil 1 ~ Umgebungskonstruktion und Funktionsprüfung ~ zu erstellen
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe eine morphologische Analyse mit MeCab versucht