使用itext将不同文件格式合并为单个pdf会导致损坏的pdf

时间:2018-11-14 15:32:12

标签: java itext

我有一个多部分表单,其中不同类型的文件将在单个请求中上传,例如pdf,png,jpg等。我需要阅读这些文件并创建最终合并的单个pdf文件。 iText是否支持这种不同文件类型的合并。

我能够合并所有图像类型,但是当我尝试将img与imgae合并时遇到一些问题。下面的任何示例示例。下面的代码创建没有图像的最终pdf。

public void generateMergedPDF(Map<String, String> dataMap, MultipartFile[] files) throws Exception {

    ClassPathResource resource = new ClassPathResource("templatepdfForm.pdf");

    FileOutputStream userInfo = new FileOutputStream(new File("C:\\pdf\\megepath\\updateddocument.pdf"));

    //Update filed values to template Starts
    PdfReader reader = new PdfReader(resource.getInputStream());
    PdfStamper stamper = new PdfStamper(reader, userInfo);

    stamper.setFormFlattening(true);
    AcroFields form = stamper.getAcroFields();

    Map<String, Item> fieldMap = form.getFields();

    for (String key : fieldMap.keySet()) {
        String fieldValue = dataMap.get(key);
        if (fieldValue != null) {
            form.setField(key, fieldValue);
        }
    }

    stamper.close();

    //Update filed values to template Ends
    Document mergePdfDoc = new Document();
    PdfCopy pdfCopy;
    boolean smartCopy = false;

    FileOutputStream finalFile = new FileOutputStream("C:\\pdf\\finalmergedfile.pdf");

    //Merge updated pdf with multipart content
    if(smartCopy)
        pdfCopy = new PdfSmartCopy(mergePdfDoc, finalFile);
    else
        pdfCopy = new PdfCopy(mergePdfDoc, finalFile);

    PdfWriter  writer = PdfWriter.getInstance(mergePdfDoc, finalFile);

    mergePdfDoc.open();
    PdfReader mergeReader = new PdfReader(new FileInputStream(new File("C:\\pdf\\megepath\\updateddocument.pdf")));

    pdfCopy.addDocument(mergeReader);
    pdfCopy.freeReader(mergeReader);
    mergeReader.close();

    PdfReader[] pdfReader = new PdfReader[files.length];

    for(int i=0; i<=files.length-1;i++) {
        if(FileContentType.APPLICATION_TYPE.getContentTypes().contains(files[i].getContentType())) {
            //To add multipart pdf content
            pdfReader[i] = new PdfReader(files[i].getInputStream());
            pdfCopy.addDocument(pdfReader[i]);
            pdfCopy.freeReader(pdfReader[i]);
            pdfReader[i].close();
        }else if(FileContentType.IMAGE_TYPE.getContentTypes().contains(files[i].getContentType())) {
            //To add multipart image content
            System.out.println("Image Type Loop");
            Image fileImage = Image.getInstance(files[i].getBytes());
            mergePdfDoc.setPageSize(fileImage);
            mergePdfDoc.newPage();
            claimImage.setAbsolutePosition(0, 0);
            mergePdfDoc.add(fileImage);
        }
    }
    pdfCopy.setMergeFields();
    //mergePdfDoc.close(); //If i enable this close stream closed error
    //writer.close(); //If i enable this close stream closed error
    memInfo.close();

    finalFile.close();
}

0 个答案:

没有答案