How to reduce the size of merged PDF/A-1b files with pdfbox or other java library

前端 未结 3 1057
面向向阳花
面向向阳花 2020-12-09 23:26

Input: A list of (e.g. 14) PDF/A-1b files with embedded fonts.
Processing: Doing a simple merge with Apache PDFBOX.
Result<

3条回答
  •  春和景丽
    2020-12-10 00:00

    An other way I found is using ITEXT 7 that way (pdfWriter.setSmartMode):

        try (PdfWriter pdfWriter = new PdfWriter(out)) {
            pdfWriter.setSmartMode(true); // Here happens the optimation, e.g. reducing redundantly embedded fonts
            pdfWriter.setCompressionLevel(Deflater.BEST_COMPRESSION);
            try (PdfDocument pdfDoc = new PdfADocument(pdfWriter, PdfAConformanceLevel.PDF_A_1B,
                    new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", colorProfile))) {
                PdfMerger merger = new PdfMerger(pdfDoc);
                merger.setCloseSourceDocuments(true);
                try {
                    for (InputStream pdf : pdfs) {
                        try (PdfDocument doc = new PdfDocument(new PdfReader(pdf))) {
                            merger.merge(doc, createPageList(doc.getNumberOfPages()));
                        }
                    }
                    merger.close();
                }
                catch (com.itextpdf.kernel.crypto.BadPasswordException e) {
                    throw new BieneException("Konkatenierung eines passwortgeschützten PDF-Dokumentes nicht möglich: " + e.getMessage(),
                            e);
                }
                catch (com.itextpdf.io.IOException | PdfException e) {
                    throw new BieneException(e.getMessage(), e);
                }
            }
        }
    

提交回复
热议问题