[JAVA] Drucken Sie Formulare mit Jasper Reports direkt auf dem Drucker

Überblick

Mit JasperReports direkt auf dem Drucker ausgeben, ohne die Datei als PDF usw. auszugeben. Ein Memo der Untersuchungsergebnisse aufgrund der oben genannten ungewöhnlichen Anforderungen in der Wirtschaft. Es gab einen Beispielcode im Netz, aber da die Version alt war und eine veraltete API verwendete, habe ich ein Beispiel zur Unterstützung von 6.8 erstellt.

Umwelt etc.

Formularvorlage

Angenommen, die folgende fiktive Schätzung template.png

Formularparameterliste

Parameter Schlüssel Beispiel für Einstellwert
Kundenadresse CLIENT_ADDRESS 1-23-45, Ginza, Chuo-ku, Tokio
Firmenname des Kunden CLIENT_NAME Co., Ltd.
Kunden Vertreter CLIENT_PERSON ○○ ○○
Firmenanschrift CORP_ADDRESS 1-2-3 Nishi-Shinjuku, Shinjuku-ku, Tokio
Name der Firma CORP_NAME Co., Ltd.
Verantwortliche Inhouse-Person SALES_PERSON ×× ××
Schätzung Nr. ESTIMATE_NO No.20190601
Erstellungsdatum CREATED_DATE 2019/06/03
Haltbarkeitsdatum EXPIRATION_DATE 2019/06/14
Lieferdatum DELIVERY_DATE 2019/06/28
Zahlungsbedingungen PAYMENT_TERMS Monatsabschluss Zahlung am Ende des Folgemonats
Bemerkungen REMARKS Die Verbrauchsteuer beträgt 8%Es wird berechnet von.

Formularfeldliste

Feld Schlüssel Beispiel für Einstellwert
Produktname item Produkt AAAA
Menge quantity 10
Stückpreis unit 200
Geldbetrag price 2000

Beispielcode

Main.java


public class DirectPrintSample {

	/**JasperReport-Vorlagendatei*/
	public static final String REPORT_TEMPLATE = "template/quotation.jrxml";

	/**Name des Ausgabedruckers*/
	public static final String PRINTER_NAME = "(Druckername ausgeben)";

	public static void main(String[] args) {

		//Initialisieren Sie die Formulardefinition
		JasperReport report = null;
		try {
			report = createReport();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (JRException e) {
			e.printStackTrace();
		}

		//Erstellen Sie ein Dokument (legen Sie die Ausgabedaten in der Formulardefinition fest).
		JasperPrint print = null;
		try {
			print = createPrint(report);
		} catch (JRException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}

		//Drucken Sie das Formular direkt aus, indem Sie den Drucker angeben
		try {
			exportPrint(print, PRINTER_NAME);
		} catch (JRException e) {
			e.printStackTrace();
		}
	}

	/**
	 *Initialisieren Sie die Formulardefinition.
	 * @throws IOException
	 * @throws JRException
	 */
	public static JasperReport createReport() throws IOException, JRException {

		//Kompilieren Sie das Formularlayout
		try (InputStream is = DirectPrintSample.class.getClassLoader().getResourceAsStream(REPORT_TEMPLATE)) {
			return JasperCompileManager.compileReport(is);
		}
	}

	/**
	 *Legen Sie die auszugebenden Daten als Formular fest.
	 * @param jasperReport
	 * @throws JRException
	 * @throws ParseException
	 */
	public static JasperPrint createPrint(JasperReport jasperReport) throws JRException, ParseException {

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

		//Parametersatz
		Map<String, Object> parameters = new HashMap<>();
		parameters.put("CLIENT_ADDRESS", "1-23-45, Ginza, Chuo-ku, Tokio");
		parameters.put("CLIENT_NAME", "Co., Ltd.");
		parameters.put("CLIENT_PERSON", "○○ ○○");
		parameters.put("CORP_ADDRESS", "1-2-3 Nishi-Shinjuku, Shinjuku-ku, Tokio");
		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", "Monatsabschluss Zahlung am Ende des Folgemonats");
		parameters.put("REMARKS", "Die Verbrauchsteuer beträgt 8%Es wird berechnet von.");

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

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

	/***
	 *Drucken Sie das Formular direkt aus.
	 * @param jasperPrint
	 * @param printerName
	 * @throws JRException
	 */
	private static void exportPrint(JasperPrint jasperPrint, String printerName) throws JRException {

		//Generieren Sie eine Ausgabeklasse für den Drucker
		JRPrintServiceExporter exporter = new JRPrintServiceExporter();

		//Stellen Sie das auszugebende Dokument ein
		exporter.setExporterInput(new SimpleExporterInput(jasperPrint));

		//Geben Sie den Druckdrucker für das Ausgabeziel an
		SimplePrintServiceExporterConfiguration conf = new SimplePrintServiceExporterConfiguration();
		HashPrintServiceAttributeSet printAttribute = new HashPrintServiceAttributeSet();
		printAttribute.add(new PrinterName(PRINTER_NAME, Locale.getDefault()));
		conf.setPrintServiceAttributeSet(printAttribute);
		exporter.setConfiguration(conf);

		//Druckerausgabe durchführen
		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;
	}
}

Ausgabeergebnis

Das Folgende ist eine PDF-Ausgabe, deren Ausgabeziel auf Microsoft Print to PDF festgelegt ist. print.png

Probleme / Bedenken

Recommended Posts

Drucken Sie Formulare mit Jasper Reports direkt auf dem Drucker
So greifen Sie mit der TCP-Funktion von Spring Integration direkt auf Socket zu
Zuordnung zu mehreren Variablen mit dem ternären Operator
Übergeben Sie mit link_to zwei Argumente an den URI
Erste Schritte mit Doma-Einführung in die Kriterien-API
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
So ändern Sie die Aktion mit mehreren Senden-Schaltflächen
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Organisierte schrittweise Interaktion mit dem JDK
HTTPS-Verbindung mit Java zum selbstsignierten Zertifikatsserver
Süchtig nach dem Webpacker, der standardmäßig mit Rails 6 geliefert wird