Объединение файлов разных форматов в один PDF с использованием itext дает поврежденный PDF - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть многочастная форма, в которой файлы разных типов будут загружаться в одном запросе, такие как pdf, png, jpg и т. Д. Мне нужно прочитать эти файлы и создать окончательный объединенный PDF-файл.Поддерживает ли iText этот вид слияния различных типов файлов.

Я могу объединить все типы изображений, но когда я пытаюсь объединить pdf с 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...