[JAVA] Imprimez des formulaires directement sur l'imprimante avec Jasper Reports

Aperçu

Avec JasperReports, imprimez directement sur l'imprimante sans sortir le fichier au format PDF, etc. Une note des résultats de l'enquête en raison des exigences inhabituelles susmentionnées dans les affaires. Il y avait un exemple de code sur le net, mais comme la version était ancienne et utilisait une API obsolète, j'ai créé un exemple pour prendre en charge la version 6.8.

Environnement etc.

Modèle de formulaire

En supposant l'estimation fictive suivante template.png

Liste des paramètres de formulaire

Paramètres Clé Exemple de valeur de réglage
Adresse du client CLIENT_ADDRESS 1-23-45, Ginza, Chuo-ku, Tokyo
Nom de l'entreprise du client CLIENT_NAME Co., Ltd. ○○○○
Représentant client CLIENT_PERSON ○○ ○○
Adresse de la société CORP_ADDRESS 1-2-3 Nishi-Shinjuku, Shinjuku-ku, Tokyo
Nom de la compagnie CORP_NAME Co., Ltd.
Responsable interne SALES_PERSON ×× ××
Estimation Non. ESTIMATE_NO No.20190601
Date de création CREATED_DATE 2019/06/03
date d'expiration EXPIRATION_DATE 2019/06/14
Date de livraison DELIVERY_DATE 2019/06/28
Modalités de paiement PAYMENT_TERMS Clôture de mois Paiement à la fin du mois suivant
Remarques REMARKS La taxe à la consommation est de 8%Il est calculé par.

Liste des champs de formulaire

champ Clé Exemple de valeur de réglage
Nom du produit item Produit AAAA
quantité quantity 10
Prix unitaire unit 200
Somme d'argent price 2000

Exemple de code

Main.java


public class DirectPrintSample {

	/**Fichier de modèle JasperReport*/
	public static final String REPORT_TEMPLATE = "template/quotation.jrxml";

	/**Nom de l'imprimante de destination de sortie*/
	public static final String PRINTER_NAME = "(Nom de l'imprimante de sortie)";

	public static void main(String[] args) {

		//Initialiser la définition du formulaire
		JasperReport report = null;
		try {
			report = createReport();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (JRException e) {
			e.printStackTrace();
		}

		//Créer un document (définir les données de sortie dans la définition de formulaire)
		JasperPrint print = null;
		try {
			print = createPrint(report);
		} catch (JRException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}

		//Imprimez directement le formulaire en spécifiant l'imprimante
		try {
			exportPrint(print, PRINTER_NAME);
		} catch (JRException e) {
			e.printStackTrace();
		}
	}

	/**
	 *Initialisez la définition du formulaire.
	 * @throws IOException
	 * @throws JRException
	 */
	public static JasperReport createReport() throws IOException, JRException {

		//Compilez la mise en page du formulaire
		try (InputStream is = DirectPrintSample.class.getClassLoader().getResourceAsStream(REPORT_TEMPLATE)) {
			return JasperCompileManager.compileReport(is);
		}
	}

	/**
	 *Définissez les données à afficher sous forme de formulaire.
	 * @param jasperReport
	 * @throws JRException
	 * @throws ParseException
	 */
	public static JasperPrint createPrint(JasperReport jasperReport) throws JRException, ParseException {

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

		//Jeu de paramètres
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("CLIENT_ADDRESS", "1-23-45, Ginza, Chuo-ku, Tokyo");
		parameters.put("CLIENT_NAME", "Co., Ltd. ○○○○");
		parameters.put("CLIENT_PERSON", "○○ ○○");
		parameters.put("CORP_ADDRESS", "1-2-3 Nishi-Shinjuku, Shinjuku-ku, Tokyo");
		parameters.put("CORP_NAME", "Co., Ltd.");
		parameters.put("SALES_PERSON", "×× ××");
		parameters.put("ESTIMATE_NO", "No.20190001");
		parameters.put("CREATED_DATE", sdf.parse("2019/06/03"));
		parameters.put("EXPIRATION_DATE", sdf.parse("2019/06/14"));
		parameters.put("DELIVERY_DATE", sdf.parse("2019/06/28"));
		parameters.put("PAYMENT_TERMS", "Clôture de mois Paiement à la fin du mois suivant");
		parameters.put("REMARKS", "La taxe à la consommation est de 8%Il est calculé par.");

		//Jeu d'enregistrements
		List<Item> list = new ArrayList<>();
		list.add(new Item("Produit AAAA", 10, 200, 2000));
		list.add(new Item("Produit BBBB", 20, 600, 12000));
		list.add(new Item("Produit CCCC", 100, 250, 25000));
		JRDataSource dataSource = new JRBeanCollectionDataSource(list);

		return JasperFillManager.fillReport(jasperReport, parameters, dataSource);
	}

	/***
	 *Imprimez directement le formulaire.
	 * @param jasperPrint
	 * @param printerName
	 * @throws JRException
	 */
	private static void exportPrint(JasperPrint jasperPrint, String printerName) throws JRException {

		//Générer une classe de sortie pour l'imprimante
		JRPrintServiceExporter exporter = new JRPrintServiceExporter();

		//Définir le document à imprimer
		exporter.setExporterInput(new SimpleExporterInput(jasperPrint));

		//Spécifiez l'imprimante d'impression de destination de sortie
		SimplePrintServiceExporterConfiguration conf = new SimplePrintServiceExporterConfiguration();
		HashPrintServiceAttributeSet printAttribute = new HashPrintServiceAttributeSet();
		printAttribute.add(new PrinterName(PRINTER_NAME, Locale.getDefault()));
		conf.setPrintServiceAttributeSet(printAttribute);
		exporter.setConfiguration(conf);

		//Effectuer la sortie de l'imprimante
		exporter.exportReport();
	}

}

Item.java


public class Item {

	private String item;
	private int quantity;
	private int unit;
	private int price;

	Item(String item, int quantity, int unit, int price) {
		this.item = item;
		this.quantity = quantity;
		this.unit = unit;
		this.price = price;
	}

	public String getItem() {
		return item;
	}

	public void setItem(String item) {
		this.item = item;
	}

	public int getQuantity() {
		return quantity;
	}

	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}

	public int getUnit() {
		return unit;
	}

	public void setUnit(int unit) {
		this.unit = unit;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}

Résultat de sortie

Ce qui suit est une sortie PDF avec la destination de sortie définie sur Microsoft Print to PDF. print.png

Problèmes / préoccupations

Recommended Posts

Imprimez des formulaires directement sur l'imprimante avec Jasper Reports
Comment accéder directement à Socket avec la fonction TCP de Spring Integration
Affectation à plusieurs variables avec l'opérateur ternaire
passer deux arguments à l'URI avec link_to
Premiers pas avec Doma - Introduction à l'API Criteria
Essayez de résumer la disposition commune avec des rails
Comment changer l'action avec plusieurs boutons d'envoi
Je souhaite utiliser le mode sombre avec l'application SWT
Organisé comment interagir avec le JDK par étapes
Connexion HTTPS avec Java au serveur de certificats auto-signé
Accro au Webpacker fourni en standard avec Rails 6