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.
Angenommen, die folgende fiktive Schätzung
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. |
Feld | Schlüssel | Beispiel für Einstellwert |
---|---|---|
Produktname | item | Produkt AAAA |
Menge | quantity | 10 |
Stückpreis | unit | 200 |
Geldbetrag | price | 2000 |
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;
}
}
Das Folgende ist eine PDF-Ausgabe, deren Ausgabeziel auf Microsoft Print to PDF festgelegt ist.
Recommended Posts