I'm creating a duplicate pdf by taking an input pdf by adding some pic to header. i'm able to create the result pdf successfully i.e., duplicate pdf, but after creating this pdf, while trying to delete the original one i'm facing exception saying - file is being used by another process. Am i missing something?
public File createDuplicatePDF(String originalFile, String uploadFolder) throws DocumentException, IOException {
File signature = new File("C:\\WORK\\Signature.bmp");
File duplicateFile = new File(uploadFolder+"asds.pdf");
BufferedOutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(duplicateFile.toPath()));
Document duplicateDocument = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(duplicateDocument, outputStream);
duplicateDocument.open();
String duplicatePdfMessage = "asd";
PdfPTable duplicateHeaderTable = new PdfPTable(2);
// Set table width
duplicateHeaderTable.setWidthPercentage(100);
// Set relative cell widths
duplicateHeaderTable.setWidths(new int[]{3, 1});
PdfPCell cell;
Font font = new Font();
font.setColor(BaseColor.BLACK);
Paragraph paragraph = new Paragraph(duplicatePdfMessage, font);
cell = new PdfPCell(paragraph);
cell.setBorder(0);
duplicateHeaderTable.addCell(cell);
Image signatureImage = Image.getInstance(signature.getPath());
signatureImage.scaleToFit(100F, 50F);
cell = new PdfPCell(signatureImage);
cell.setBorder(0);
cell.setPaddingLeft(2);
cell.setPaddingBottom(2);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
duplicateHeaderTable.addCell(cell);
PdfReader reader = new PdfReader(new FileInputStream(originalFile));
for (int i = 0; i < reader.getNumberOfPages(); i++) {
duplicateDocument.add(duplicateHeaderTable);
PdfImportedPage page = writer.getImportedPage(reader, i + 1);
Image image = Image.getInstance(page);
image.scalePercent(85F);
image.setBorder(Rectangle.BOX);
image.setBorderWidth(3F);
image.setBorderColor(new GrayColor(0.5F));
image.setAlignment(Element.ALIGN_CENTER);
duplicateDocument.add(image);
if (i < reader.getNumberOfPages()) {
duplicateDocument.newPage();
}
}
reader.close();
outputStream.flush();
duplicateDocument.close();
writer.flush();
writer.close();
outputStream.close();
return duplicateFile;
}
You're not closing the input stream for your original file.