https://amg-solution.jp/blog/3674 Referenzseite
Dies wird auf der Java-Seite gesteuert.
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.
Erstellen Sie einen Ordner ** fonts ** im Ressourcenordner des Formulars und kopieren Sie ipaexg.ttf.
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.
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 zunächst den Speicherort der jrxml-Datei.
Stellen Sie sicher, dass es sich unter ** Ressource / Bericht ** befindet (nun, überall unter Ressource ist in Ordnung)
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.
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.
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();
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
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);
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 es uns laufen
Starten Sie den Server und greifen Sie auf die entsprechende Adresse (/ sample) zu.
Die Datei wurde ordnungsgemäß heruntergeladen. Ich werde es öffnen.
(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?
Recommended Posts