cut-to-pack-service/src/main/java/com/utopiaindustries/util/PDFResponseEntityInputStrea...

110 lines
4.9 KiB
Java

package com.utopiaindustries.util;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@Component
public class PDFResponseEntityInputStreamResource {
/**
* prepare pdf document from html string
*/
private ResponseEntity<InputStreamResource> createPDFResponseEntityInputStreamResource( String htmlStr, String filename, String method ) throws IOException {
// output stream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// converter properties
ConverterProperties properties = new ConverterProperties();
properties.setFontProvider( new DefaultFontProvider( false, false, true ) );
// pdf document
PdfWriter writer = new PdfWriter( outputStream );
//temp Code
/* PdfDocument temp = new PdfDocument(writer);
Rectangle rectangle3x5 = new Rectangle(216, 360);
PageSize pageSize =new PageSize( rectangle3x5 );
temp.setDefaultPageSize( pageSize);
properties.setTagWorkerFactory( new CustomTagWorkerFactory() );*/
//temp code end
Document document = HtmlConverter.convertToDocument( htmlStr, writer, properties );
document.close();
// input stream
ByteArrayInputStream inputStream = new ByteArrayInputStream( outputStream.toByteArray() );
// content disposition header
String headerContentDispositionStr = String.format( "%s; filename=%s.pdf", method, filename.replaceAll( ",", "-" ) );
// return response
return ResponseEntity
.ok()
.header( HttpHeaders.CONTENT_DISPOSITION, headerContentDispositionStr )
.contentType( MediaType.APPLICATION_PDF )
.body( new InputStreamResource( inputStream ) );
}
/**
* prepare pdf document from html string
*/
private ResponseEntity<InputStreamResource> createPDFResponseEntityInvoiceInputStreamResource( String htmlStr, String filename, String method, long height, long width )
throws IOException {
// output stream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// converter properties
ConverterProperties properties = new ConverterProperties();
properties.setFontProvider( new DefaultFontProvider( false, true, false ) );
// pdf document
PdfWriter writer = new PdfWriter( outputStream );
//Code for invoice slips
PdfDocument temp = new PdfDocument( writer );
Rectangle rectangle3x5 = new Rectangle( width, height );
PageSize pageSize = new PageSize( rectangle3x5 );
temp.setDefaultPageSize( pageSize );
properties.setTagWorkerFactory( new CustomTagWorkerFactory() );
//temp code end
Document document = HtmlConverter.convertToDocument( htmlStr, temp, properties );
//document.setFontSize( 200.0f );
document.close();
// input stream
ByteArrayInputStream inputStream = new ByteArrayInputStream( outputStream.toByteArray() );
// content disposition header
String headerContentDispositionStr = String.format( "%s; filename=%s.pdf", method, filename.replaceAll( ",", "-" ) );
// return response
return ResponseEntity
.ok()
.header( HttpHeaders.CONTENT_DISPOSITION, headerContentDispositionStr )
.contentType( MediaType.APPLICATION_PDF )
.body( new InputStreamResource( inputStream ) );
}
/**
* with inline as default content disposition "inline"
*/
public ResponseEntity<InputStreamResource> generatePdf( String htmlStr, String filename ) throws IOException {
return this.createPDFResponseEntityInputStreamResource( htmlStr, filename, "inline" );
}
/**
* manual content disposition
*/
public ResponseEntity<InputStreamResource> generatePdf( String htmlStr, String filename, String method ) throws IOException {
return this.createPDFResponseEntityInputStreamResource( htmlStr, filename, method );
}
/**
* manual content disposition
*/
public ResponseEntity<InputStreamResource> generateInvoicePdf( String htmlStr, String filename, String method, long height, long width ) throws IOException {
return this.createPDFResponseEntityInvoiceInputStreamResource( htmlStr, filename, method, height, width );
}
}