itext7学习笔记——第6章实践&example

x33g5p2x  于2021-12-28 转载在 其他  
字(19.8k)|赞(0)|评价(0)|浏览(332)

本章的例子,请参考我翻译的博文:itext7学习笔记——第6章,里面有详细的解释,有什么不懂得也可以评论或者私信我!

例子1:缩放PDF

我们读取一个带有图片的PDF文档,生成新的文档,文档里面的内容是第一页缩小后的页面,第二页原始大小,第三页为放大后的页面,代码如下:

import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;

import java.io.File;
import java.io.IOException;

public class C06E01_TheGoldenGateBridge_Scale_Shrink {
    public static final String SRC = "src/main/resources/pdf/the_golden_gate_bridge.pdf";
    public static final String DEST = "results/chapter06/the_golden_gate_bridge_scale_shrink.pdf";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E01_TheGoldenGateBridge_Scale_Shrink().createPdf(SRC, DEST);
    }

    public void createPdf(String src, String dest) throws IOException {
        //Initialize PDF document
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfDocument origPdf = new PdfDocument(new PdfReader(src));

        //Original page size
        PdfPage origPage = origPdf.getPage(1);
        Rectangle orig = origPage.getPageSizeWithRotation();

        //Add A4 page
        PdfPage page = pdf.addNewPage(PageSize.A4.rotate());
        //Shrink original page content using transformation matrix
        PdfCanvas canvas = new PdfCanvas(page);
        AffineTransform transformationMatrix = AffineTransform.getScaleInstance(page.getPageSize().getWidth() / orig.getWidth(), page.getPageSize().getHeight() / orig.getHeight());
        canvas.concatMatrix(transformationMatrix);
        PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);
        canvas.addXObject(pageCopy, 0, 0);

        //Add page with original size
        pdf.addPage(origPage.copyTo(pdf));

        //Add A2 page
        page = pdf.addNewPage(PageSize.A2.rotate());
        //Scale original page content using transformation matrix
        canvas = new PdfCanvas(page);
        transformationMatrix = AffineTransform.getScaleInstance(page.getPageSize().getWidth() / orig.getWidth(), page.getPageSize().getHeight() / orig.getHeight());
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, 0, 0);

        pdf.close();
        origPdf.close();
    }
}

例子2:分裂PDF

我们读取一个带有图片的PDF文档,把源文件分为4片,显示在新的文档的前4页,代码如下:

import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;

import java.io.File;
import java.io.IOException;

public class C06E02_TheGoldenGateBridge_Tiles {
    public static final String SRC = "src/main/resources/pdf/the_golden_gate_bridge.pdf";
    public static final String DEST = "results/chapter06/the_golden_gate_bridge_tiles.pdf";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E02_TheGoldenGateBridge_Tiles().createPdf(SRC, DEST);
    }

    public void createPdf(String src, String dest) throws IOException {
        //Initialize PDF document
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfDocument sourcePdf = new PdfDocument(new PdfReader(src));

        //Original page
        PdfPage origPage = sourcePdf.getPage(1);
        PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);

        //Original page size
        Rectangle orig = origPage.getPageSize();
        //Tile size
        Rectangle tileSize = PageSize.A4.rotate();
        // Transformation matrix
        AffineTransform transformationMatrix = AffineTransform.getScaleInstance(tileSize.getWidth() / orig.getWidth() * 2f, tileSize.getHeight() / orig.getHeight() * 2f);

        //The first tile
        PdfPage page = pdf.addNewPage(PageSize.A4.rotate());
        PdfCanvas canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, 0, -orig.getHeight() / 2f);

        //The second tile
        page = pdf.addNewPage(PageSize.A4.rotate());
        canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, -orig.getWidth() / 2f, -orig.getHeight() / 2f);

        //The third tile
        page = pdf.addNewPage(PageSize.A4.rotate());
        canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, 0, 0);

        //The fourth tile
        page = pdf.addNewPage(PageSize.A4.rotate());
        canvas = new PdfCanvas(page);
        canvas.concatMatrix(transformationMatrix);
        canvas.addXObject(pageCopy, -orig.getWidth() / 2f, 0);

        pdf.close();
        sourcePdf.close();
    }
}

例子3:聚集PDF

我们读取一个带有图片的PDF文档,读取第一页的内容,然后在新的文档的第一页中显示4份同样的内容,代码如下:

import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;

import java.io.File;
import java.io.IOException;

public class C06E03_TheGoldenGateBridge_N_up {
    public static final String SRC = "src/main/resources/pdf/the_golden_gate_bridge.pdf";
    public static final String DEST = "results/chapter06/the_golden_gate_bridge_nup.pdf";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E03_TheGoldenGateBridge_N_up().createPdf(DEST);
    }

    public void createPdf(String dest) throws IOException {
        //Initialize PDF document
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfDocument sourcePdf = new PdfDocument(new PdfReader(SRC));

        //Original page
        PdfPage origPage = sourcePdf.getPage(1);

        //Original page size
        Rectangle orig = origPage.getPageSize();
        PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);

        //N-up page
        PageSize nUpPageSize = PageSize.A4.rotate();
        PdfPage page = pdf.addNewPage(nUpPageSize);
        PdfCanvas canvas = new PdfCanvas(page);

        //Scale page
        AffineTransform transformationMatrix = AffineTransform.getScaleInstance(nUpPageSize.getWidth() / orig.getWidth() / 2f, nUpPageSize.getHeight() / orig.getHeight() / 2f);
        canvas.concatMatrix(transformationMatrix);

        //Add pages to N-up page
        canvas.addXObject(pageCopy, 0, orig.getHeight());
        canvas.addXObject(pageCopy, orig.getWidth(), orig.getHeight());
        canvas.addXObject(pageCopy, 0, 0);
        canvas.addXObject(pageCopy, orig.getWidth(), 0);

        pdf.close();
        sourcePdf.close();
    }
}

例子4:组合PDF_组合全部页面

我们读取两个PDF文件,把两个PDF文件拼接起来,代码如下:

import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.utils.PdfMerger;

import java.io.File;
import java.io.IOException;

public class C06E04_88th_Oscar_Combine {
    public static final String SRC1 = "src/main/resources/pdf/88th_reminder_list.pdf";
    public static final String SRC2 = "src/main/resources/pdf/88th_noms_announcement.pdf";
    public static final String DEST = "results/chapter06/88th_oscar_combined_documents.pdf";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E04_88th_Oscar_Combine().createPdf(DEST);
    }

    public void createPdf(String dest) throws IOException {
        //Initialize PDF document with output intent
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfMerger merger = new PdfMerger(pdf);

        //Add pages from the first document
        PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
        merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());

        //Add pages from the second pdf document
        PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
        merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());

        firstSourcePdf.close();
        secondSourcePdf.close();
        pdf.close();
    }
}

例子5:组合PDF_组合特定页面

我们读取两个PDF文件,把两个PDF文件的特定页面拼接起来,代码如下:

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.utils.PdfMerger;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class C06E05_88th_Oscar_CombineXofY {
    public static final String SRC1 = "src/main/resources/pdf/88th_reminder_list.pdf";
    public static final String SRC2 = "src/main/resources/pdf/88th_noms_announcement.pdf";
    public static final String DEST = "results/chapter06/88th_oscar_combined_documents_xy_pages.pdf";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E05_88th_Oscar_CombineXofY().createPdf(DEST);
    }

    public void createPdf(String dest) throws IOException {
        //Initialize PDF document with output intent
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));

        PdfMerger merger = new PdfMerger(pdf);

        //Add pages from the first document
        PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
        merger.merge(firstSourcePdf, Arrays.asList(1, 5, 7, 1));

        //Add pages from the second pdf document
        PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
        merger.merge(secondSourcePdf, Arrays.asList(1, 15));

        firstSourcePdf.close();
        secondSourcePdf.close();
        pdf.close();
    }
}

例子6:组合文档并添加目录

我们读取两个PDF文件,把两个PDF文件的特定页面拼接起来,并添加目录,代码如下:

import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.kernel.pdf.action.PdfAction;
import com.itextpdf.kernel.pdf.canvas.draw.DottedLine;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.property.Property;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Tab;
import com.itextpdf.layout.element.TabStop;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.TabAlignment;
import com.itextpdf.layout.property.TextAlignment;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class C06E06_88th_Oscar_Combine_AddTOC {
    public static final String SRC1 = "src/main/resources/pdf/88th_noms_announcement.pdf";
    public static final String SRC2 = "src/main/resources/pdf/oscars_movies_checklist_2016.pdf";
    public static final String DEST = "results/chapter06/88th_oscar_the_revenant_nominations_TOC.pdf";

    public static final Map<String, Integer> TheRevenantNominations = new TreeMap<String, Integer>();
    static {
        TheRevenantNominations.put("Performance by an actor in a leading role", 4);
        TheRevenantNominations.put("Performance by an actor in a supporting role", 4);
        TheRevenantNominations.put("Achievement in cinematography", 4);
        TheRevenantNominations.put("Achievement in costume design", 5);
        TheRevenantNominations.put("Achievement in directing", 5);
        TheRevenantNominations.put("Achievement in film editing", 6);
        TheRevenantNominations.put("Achievement in makeup and hairstyling", 7);
        TheRevenantNominations.put("Best motion picture of the year", 8);
        TheRevenantNominations.put("Achievement in production design", 8);
        TheRevenantNominations.put("Achievement in sound editing", 9);
        TheRevenantNominations.put("Achievement in sound mixing", 9);
        TheRevenantNominations.put("Achievement in visual effects", 10);
    }

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E06_88th_Oscar_Combine_AddTOC().createPdf(DEST);
    }

    public void createPdf(String dest) throws IOException {
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
        Document document = new Document(pdfDoc);
        document.add(new Paragraph(new Text("The Revenant nominations list"))
                .setTextAlignment(TextAlignment.CENTER));

        PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
        for (Map.Entry<String, Integer> entry : TheRevenantNominations.entrySet()) {
            //Copy page
            PdfPage page  = firstSourcePdf.getPage(entry.getValue()).copyTo(pdfDoc);
            pdfDoc.addPage(page);

            //Overwrite page number
            Text text = new Text(String.format("Page %d", pdfDoc.getNumberOfPages() - 1));
            text.setBackgroundColor(Color.WHITE);
            document.add(new Paragraph(text).setFixedPosition(
                    pdfDoc.getNumberOfPages(), 549, 742, 100));

            //Add destination
            String destinationKey = "p" + (pdfDoc.getNumberOfPages() - 1);
            PdfArray destinationArray = new PdfArray();
            destinationArray.add(page.getPdfObject());
            destinationArray.add(PdfName.XYZ);
            destinationArray.add(new PdfNumber(0));
            destinationArray.add(new PdfNumber(page.getMediaBox().getHeight()));
            destinationArray.add(new PdfNumber(1));
            pdfDoc.addNamedDestination(destinationKey, destinationArray);

            //Add TOC line with bookmark
            Paragraph p = new Paragraph();
            p.addTabStops(new TabStop(540, TabAlignment.RIGHT, new DottedLine()));
            p.add(entry.getKey());
            p.add(new Tab());
            p.add(String.valueOf(pdfDoc.getNumberOfPages() - 1));
            p.setProperty(Property.ACTION, PdfAction.createGoTo(destinationKey));
            document.add(p);
        }
        firstSourcePdf.close();

        //Add the last page
        PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
        PdfPage page  = secondSourcePdf.getPage(1).copyTo(pdfDoc);
        pdfDoc.addPage(page);

        //Add destination
        PdfArray destinationArray = new PdfArray();
        destinationArray.add(page.getPdfObject());
        destinationArray.add(PdfName.XYZ);
        destinationArray.add(new PdfNumber(0));
        destinationArray.add(new PdfNumber(page.getMediaBox().getHeight()));
        destinationArray.add(new PdfNumber(1));
        pdfDoc.addNamedDestination("checklist", destinationArray);

        //Add TOC line with bookmark
        Paragraph p = new Paragraph();
        p.addTabStops(new TabStop(540, TabAlignment.RIGHT, new DottedLine()));
        p.add("Oscars\u00ae 2016 Movie Checklist");
        p.add(new Tab());
        p.add(String.valueOf(pdfDoc.getNumberOfPages() - 1));
        p.setProperty(Property.ACTION, PdfAction.createGoTo("checklist"));
        document.add(p);
        secondSourcePdf.close();

        // close the document
        document.close();
    }
}

例子7:拼接表单

我们读取带有表单两个PDF文件,把两个PDF文件拼接起来,代码如下:

import com.itextpdf.forms.PdfPageFormCopier;
import com.itextpdf.kernel.pdf.*;

import java.io.File;
import java.io.IOException;

public class C06E07_Combine_Forms {
    public static final String DEST = "results/chapter06/combined_forms.pdf";
    public static final String SRC1 = "src/main/resources/pdf/subscribe.pdf";
    public static final String SRC2 = "src/main/resources/pdf/state.pdf";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E07_Combine_Forms().createPdf(DEST);
    }

    public void createPdf(String dest) throws IOException {
        PdfDocument destPdfDocument = new PdfDocument(new PdfWriter(dest));
        PdfDocument[] sources = new PdfDocument[] {
                new PdfDocument(new PdfReader(SRC1)),
                new PdfDocument(new PdfReader(SRC2))
        };
        PdfPageFormCopier formCopier = new PdfPageFormCopier();
        for (PdfDocument sourcePdfDocument : sources) {
            sourcePdfDocument.copyPagesTo(
                    1, sourcePdfDocument.getNumberOfPages(),
                    destPdfDocument, formCopier);
            sourcePdfDocument.close();
        }
        destPdfDocument.close();
    }
}

例子8:填充并拼接表单

我们读取带有表单的PDF文件,读取CSV,填充表单,拼接多个表单,代码如下:

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.PdfPageFormCopier;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.io.source.ByteArrayOutputStream;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

import java.io.*;
import java.util.Map;
import java.util.StringTokenizer;

public class C06E08_FillOutAndMergeForms {
    public static final String DEST = "results/chapter06/fill_out_and_merge_forms.pdf";
    public static final String SRC = "src/main/resources/pdf/state.pdf";
    public static final String DATA = "src/main/resources/data/united_states.csv";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new C06E08_FillOutAndMergeForms().createPdf(DEST);
    }

    public void createPdf(String dest) throws IOException {
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter(dest));
        PdfPageFormCopier formCopier = new PdfPageFormCopier();

        BufferedReader bufferedReader = new BufferedReader(new FileReader(DATA));
        String line;
        boolean headerLine = true;
        int i = 1;
        while ((line = bufferedReader.readLine()) != null) {
            if (headerLine) {
                headerLine = false;
                continue;
            }

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfDocument sourcePdfDocument = new PdfDocument(new PdfReader(SRC), new PdfWriter(baos));

            //Rename fields
            i++;
            PdfAcroForm form = PdfAcroForm.getAcroForm(sourcePdfDocument, true);
            form.renameField("name", "name_" + i);
            form.renameField("abbr", "abbr_" + i);
            form.renameField("capital", "capital_" + i);
            form.renameField("city", "city_" + i);
            form.renameField("population", "population_" + i);
            form.renameField("surface", "surface_" + i);
            form.renameField("timezone1", "timezone1_" + i);
            form.renameField("timezone2", "timezone2_" + i);
            form.renameField("dst", "dst_" + i);

            //Fill out fields
            StringTokenizer tokenizer = new StringTokenizer(line, ";");
            Map<String, PdfFormField> fields = form.getFormFields();
            fields.get("name_" + i).setValue(tokenizer.nextToken());
            fields.get("abbr_" + i).setValue(tokenizer.nextToken());
            fields.get("capital_" + i).setValue(tokenizer.nextToken());
            fields.get("city_" + i).setValue(tokenizer.nextToken());
            fields.get("population_" + i).setValue(tokenizer.nextToken());
            fields.get("surface_" + i).setValue(tokenizer.nextToken());
            fields.get("timezone1_" + i).setValue(tokenizer.nextToken());
            fields.get("timezone2_" + i).setValue(tokenizer.nextToken());
            fields.get("dst_" + i).setValue(tokenizer.nextToken());

            sourcePdfDocument.close();
            sourcePdfDocument = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));

            //Copy pages
            sourcePdfDocument.copyPagesTo(1, sourcePdfDocument.getNumberOfPages(), pdfDocument, formCopier);
            sourcePdfDocument.close();
        }

        bufferedReader.close();
        pdfDocument.close();
    }
}

例子9:填充、锁定并拼接表单

我们读取带有表单的PDF文件,读取CSV,填充表单,锁定表单,最后拼接多个表单,代码如下:

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.io.source.ByteArrayOutputStream;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

import java.io.*;
import java.util.Map;
import java.util.StringTokenizer;

public class C06E09_FillOutFlattenAndMergeForms {
    public static final String DEST1 = "results/chapter06/fill_out_flatten_forms_merge.pdf";
    public static final String DEST2 = "results/chapter06/fill_out_flatten_forms_smart_merge.pdf";
    public static final String SRC = "src/main/resources/pdf/state.pdf";
    public static final String DATA = "src/main/resources/data/united_states.csv";

    public static void main(String args[]) throws IOException {
        File file = new File(DEST1);
        file.getParentFile().mkdirs();
        file = new File(DEST2);
        file.getParentFile().mkdirs();
        new C06E09_FillOutFlattenAndMergeForms().createPdf(DEST1, DEST2);
    }

    public void createPdf(String dest1, String dest2) throws IOException {
        PdfDocument destPdfDocument = new PdfDocument(new PdfWriter(dest1));
        //Smart mode
        PdfDocument destPdfDocumentSmartMode = new PdfDocument(new PdfWriter(dest2).setSmartMode(true));

        BufferedReader bufferedReader = new BufferedReader(new FileReader(DATA));
        String line;
        boolean headerLine = true;
        while ((line = bufferedReader.readLine()) != null) {
            if (headerLine) {
                headerLine = false;
                continue;
            }
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfDocument sourcePdfDocument = new PdfDocument(new PdfReader(SRC), new PdfWriter(baos));

            //Read fields
            PdfAcroForm form = PdfAcroForm.getAcroForm(sourcePdfDocument, true);
            StringTokenizer tokenizer = new StringTokenizer(line, ";");
            Map<String, PdfFormField> fields = form.getFormFields();

            //Fill out fields
            fields.get("name").setValue(tokenizer.nextToken());
            fields.get("abbr").setValue(tokenizer.nextToken());
            fields.get("capital").setValue(tokenizer.nextToken());
            fields.get("city").setValue(tokenizer.nextToken());
            fields.get("population").setValue(tokenizer.nextToken());
            fields.get("surface").setValue(tokenizer.nextToken());
            fields.get("timezone1").setValue(tokenizer.nextToken());
            fields.get("timezone2").setValue(tokenizer.nextToken());
            fields.get("dst").setValue(tokenizer.nextToken());

            //Flatten fields
            form.flattenFields();

            sourcePdfDocument.close();
            sourcePdfDocument = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));

            //Copy pages
            sourcePdfDocument.copyPagesTo(1, sourcePdfDocument.getNumberOfPages(), destPdfDocument, null);
            sourcePdfDocument.copyPagesTo(1, sourcePdfDocument.getNumberOfPages(), destPdfDocumentSmartMode, null);

            sourcePdfDocument.close();
        }

        bufferedReader.close();

        destPdfDocument.close();
        destPdfDocumentSmartMode.close();
    }
}

Example代码下载

本章代码可在如下地址下载(IDEA工程):iText7——第六章源代码工程

相关文章