With JasperReports, output directly to the printer without outputting the file to PDF etc. A memo of the result of the investigation because there were unusual requirements as mentioned above in the business. There was some sample code on the net, but since the version was old and used a deprecated API, I created a sample to support 6.8.
Assuming the following fictitious quotation
Parameters | Key | Setting value example |
---|---|---|
Customer address | CLIENT_ADDRESS | 1-23-45 Ginza, Chuo-ku, Tokyo |
Customer company name | CLIENT_NAME | Co., Ltd. ○○○○ |
Customer representative | CLIENT_PERSON | ○○ ○○ |
Company address | CORP_ADDRESS | 1-2-3 Nishi-Shinjuku, Shinjuku-ku, Tokyo |
Company name | CORP_NAME | Co., Ltd. ×××× |
In-house person in charge | SALES_PERSON | ×× ×× |
Estimate No. | ESTIMATE_NO | No.20190601 |
Created date | CREATED_DATE | 2019/06/03 |
expiration date | EXPIRATION_DATE | 2019/06/14 |
Delivery date | DELIVERY_DATE | 2019/06/28 |
Payment terms | PAYMENT_TERMS | Month-end closing Payment at the end of the following month |
Remarks | REMARKS | 8 consumption tax%It is calculated by. |
field | Key | Setting value example |
---|---|---|
Product name | item | Product AAAA |
quantity | quantity | 10 |
unit price | unit | 200 |
Amount of money | price | 2000 |
Main.java
public class DirectPrintSample {
/**JasperReport template file*/
public static final String REPORT_TEMPLATE = "template/quotation.jrxml";
/**Output destination printer name*/
public static final String PRINTER_NAME = "(Output printer name)";
public static void main(String[] args) {
//Initialize the form definition
JasperReport report = null;
try {
report = createReport();
} catch (IOException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
//Create a document (set output data in form definition)
JasperPrint print = null;
try {
print = createPrint(report);
} catch (JRException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
//Directly print the form by specifying the printer
try {
exportPrint(print, PRINTER_NAME);
} catch (JRException e) {
e.printStackTrace();
}
}
/**
*Initialize the form definition.
* @throws IOException
* @throws JRException
*/
public static JasperReport createReport() throws IOException, JRException {
//Compile the form layout
try (InputStream is = DirectPrintSample.class.getClassLoader().getResourceAsStream(REPORT_TEMPLATE)) {
return JasperCompileManager.compileReport(is);
}
}
/**
*Set the data to be output as a form.
* @param jasperReport
* @throws JRException
* @throws ParseException
*/
public static JasperPrint createPrint(JasperReport jasperReport) throws JRException, ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//Parameter set
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", "Month-end closing Payment at the end of the following month");
parameters.put("REMARKS", "8 consumption tax%It is calculated by.");
//Recordset
List<Item> list = new ArrayList<>();
list.add(new Item("Product AAAA", 10, 200, 2000));
list.add(new Item("Product BBBB", 20, 600, 12000));
list.add(new Item("Product CCCC", 100, 250, 25000));
JRDataSource dataSource = new JRBeanCollectionDataSource(list);
return JasperFillManager.fillReport(jasperReport, parameters, dataSource);
}
/***
*Print the form directly.
* @param jasperPrint
* @param printerName
* @throws JRException
*/
private static void exportPrint(JasperPrint jasperPrint, String printerName) throws JRException {
//Generate output class for printer
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
//Set the document to be output
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
//Specify the output destination print printer
SimplePrintServiceExporterConfiguration conf = new SimplePrintServiceExporterConfiguration();
HashPrintServiceAttributeSet printAttribute = new HashPrintServiceAttributeSet();
printAttribute.add(new PrinterName(PRINTER_NAME, Locale.getDefault()));
conf.setPrintServiceAttributeSet(printAttribute);
exporter.setConfiguration(conf);
//Perform printer output
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;
}
}
The following is a PDF output with the output destination set to Microsoft Print to PDF.
Recommended Posts