我正在通过在标题中添加一些图片来获取输入pdf来创建重复的pdf。我能够成功创建结果 pdf,即重复的 pdf,但在创建此 pdf 后,在尝试删除原始 pdf 时,我遇到异常,说 - 文件正在被另一个进程使用。我错过了什么吗?
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;
}
您没有关闭原始文件的输入流。