/**
*
*/
package test.com.report.daily;
import static org.junit.jupiter.api.Assertions.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;
/**
* @author Billson C
*
*/
class TestByteArrayOf_iTextPdfToFile
{
private static final Logger _LOG = LoggerFactory.getLogger(TestByteArrayOf_iTextPdfToFile.class);
String pathRoot = "C:\\samples\\";
@BeforeAll
static void setUpBeforeClass() throws Exception {
}
@AfterEach
void tearDown() throws Exception {
}
String pathSeperator = "/";
DateFormat _DTF = new SimpleDateFormat("HHmm");
@Test
void test() throws IOException {
String currentPathFolder = null;
String currentPathFile = null;
String currentTimingGenerated = _DTF.format(Calendar.getInstance().getTime());
currentPathFolder = StringUtils.join(pathRoot, pathSeperator, currentTimingGenerated, pathSeperator
// , currentPortLocationCode
);
Files.createDirectories(Paths.get(currentPathFolder));
String dash = "-";
String filename = StringUtils.join("bytearray-of-itext-pdf-to-file", ".", "pdf");
String content = StringUtils.join("The filename of this file is: ", filename);
currentPathFile = StringUtils.join(currentPathFolder, pathSeperator, filename);
File fPdf = new File(currentPathFile);
try (FileOutputStream fosPdf = new FileOutputStream(fPdf);) {
byte[] aryByte = _getAryByteOfPdf(content);
fosPdf.write(aryByte);
// outputStream.writeTo(fosPdf);
} catch (Exception e) {
_LOG.error("Error while test|{}", e.getMessage(), e);
}
assertTrue(fPdf.exists());
// TO DO: suppose to check file content equal to filename
String contentFromPdf = PdfTextExtractor.getTextFromPage(new PdfDocument(new PdfReader(fPdf)).getFirstPage());
_LOG.debug("contentFromPdf|{}", contentFromPdf);
assertEquals(content, contentFromPdf);
}
/**
* @param content
*/
protected byte[] _getAryByteOfPdf(String content) {
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(outputStream);
// PdfWriter pdfWriter = new PdfWriter(currentPathFile);
Document document = new Document(new PdfDocument(pdfWriter
// new PdfWriter("./hello-pdf.pdf")
), PageSize.A4.rotate())) {
document.add(new Paragraph(new Text(content)));
document.close();
return outputStream.toByteArray();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}