https://amg-solution.jp/blog/3674 Page de référence
Ceci est contrôlé du côté Java.
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.
Créez un dossier ** fonts ** dans le dossier de ressources du formulaire et copiez ipaexg.ttf.
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.
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.
Tout d'abord, vérifiez l'emplacement du fichier jrxml.
Assurez-vous qu'il est sous ** ressource / rapport ** (enfin, n'importe où sous ressource, c'est bien)
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.
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.
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();
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
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);
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.
Lançons-le
Démarrez le serveur et accédez à l'adresse correspondante (/ sample).
Le fichier a été téléchargé correctement. Je vais l'ouvrir.
(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?
Recommended Posts