Maven used
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>9.0.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.1.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
Code Used
package id.com.hutchison.report.tools.controller;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.xhtmlrenderer.pdf.ITextRenderer;
/**
*
* @author TMPCSigit
*/
@Controller
@RequestMapping("/api/v1/report")
public class ReportController {
private static final SimpleDateFormat filenameDate = new SimpleDateFormat("ddMMyyyyHHmmss");
private static final SimpleDateFormat readableDate = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
@RequestMapping(value = "/export", method = RequestMethod.GET, produces = MediaType.APPLICATION_PDF_VALUE)
public ResponseEntity<byte[]> getExport() {
ITextRenderer renderer = new ITextRenderer();
ByteArrayOutputStream boas = null;
try {
String inputFile = "files/templates/autodebit.html";
String outputFile = "files/generated/autodebit_"+filenameDate.format(new Date())+".pdf";
String html = new String(Files.readAllBytes(Paths.get(inputFile)));
final Document document = Jsoup.parse(html);
document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);
document.body().select(".DOC_GENERATED_DATE").html(readableDate.format(new Date()));
renderer.setDocumentFromString(document.html());
renderer.layout();
try (OutputStream os = Files.newOutputStream(Paths.get(outputFile))) {
renderer.createPDF(os);
os.close();
PdfReader reader = new PdfReader(outputFile);
boas = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, boas);
stamper.setPageAction(PdfWriter.PAGE_OPEN, new PdfAction(PdfAction.PRINTDIALOG), 1);
stamper.close();
} catch (DocumentException ex) {
Logger.getLogger(ReportController.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(ReportController.class.getName()).log(Level.SEVERE, null, ex);
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_PDF);
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<>(boas.toByteArray(), headers, HttpStatus.OK);
return response;
}
}
HTML Template
<html>
<head>
<title></title>
<style type="text/css">
body{
font-family: Arial;
padding: 0px;
margin: 0px auto;
}
table{
width: 690px;
font-family: Arial;
border-collapse: collapse;
/*border:1px solid black;*/
background-color: #fff;
}
table td{
font-size: 11px;
/*border:1px solid black;*/
font-family: Arial;
}
</style>
</head>
<body>
<table>
<tr>
<td colspan="7" style="height:15px"></td>
<td colspan="4" rowspan="4" style="padding:10px;text-align:center"><img style="height:60px;" src="../assets/logo.png"></td>
</tr>
<tr>
<td colspan="5"><b>Informasi Auto Debit Isi Ulang</b></td>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="5"><i>Auto Debit Recharge Information</i></td>
<td><i>generated at: <span class="DOC_GENERATED_DATE">{{DATE}}</span></i></td>
<td></td>
</tr>
<tr>
<td colspan="7" style="height:15px"></td>
</tr>
<tr>
<td><b>Tanggal Pilihan</b></td>
<td colspan="5" style="background-color:#EEEEEE"></td>
<td><b>Nama Pelanggan</b></td>
<td colspan="2" style="background-color:#EEEEEE"></td>
</tr>
<tr>
<td><i>Invoice Data</i></td>
<td colspan="5" ></td>
<td><i>Customer's Name</i></td>
<td colspan="2" ></td>
</tr>
<tr>
<td><b>Nomor Tagihan</b></td>
<td colspan="5" style="background-color:#EEEEEE"></td>
<td><b>Alamat</b></td>
<td colspan="2" style="background-color:#EEEEEE"></td>
</tr>
<tr>
<td><i>Invoice Number</i></td>
<td colspan="5" ></td>
<td><i>Address</i></td>
<td colspan="2" ></td>
</tr>
<tr>
<td><b>Jumlah</b></td>
<td colspan="5" style="background-color:#EEEEEE"></td>
<td><b>Nomor HP</b></td>
<td colspan="2" style="background-color:#EEEEEE"></td>
</tr>
<tr>
<td><i>Amount</i></td>
<td colspan="5" ></td>
<td><i>Mobile Number</i></td>
<td colspan="2" ></td>
</tr>
<tr>
<td colspan="9"><hr></td>
</tr>
<tr>
<td></td>
<td><b>Tanggal Tagihan</b></td>
<td><b>Nomor Tagihan</b></td>
<td><b>Jumlah</b></td>
<td><b>No. Category</b></td>
<td><b>Call Plan</b></td>
<td><b>Tgl Pembayaran</b></td>
<td><b>Tgl Input</b></td>
<td><b>Status</b></td>
</tr>
<tr>
<td></td>
<td><i>Invoice Date</i></td>
<td><i>Invoice Number</i></td>
<td><i>Amount</i></td>
<td><i>Num Category</i></td>
<td><i>Call Plan</i></td>
<td><i>Payment Date</i></td>
<td><i>Upload Date</i></td>
<td><i>Status</i></td>
</tr>
<tr>
<td>Previous Month</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
</tr>
<tr>
<td>This Month</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
<td>XXX</td>
</tr>
</table>
</body>
</html>
Top comments (0)