无法删除在java中使用itext创建的pdf

问题描述 投票:0回答:1

我正在通过在标题中添加一些图片来获取输入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;
}
java pdf itext
1个回答
0
投票

您没有关闭原始文件的输入流。

© www.soinside.com 2019 - 2024. All rights reserved.