iText - 如何克隆文档的页面?

时间:2018-02-05 06:41:16

标签: java pdf itext

我正在使用iText 5 API来克隆PDF页面。我的要求如下: 我有一个名为" Test"它有2个不同的页面。我需要克隆每个页面,即如果测试文档有两个页面,我需要克隆第一页和然后是第二页,它在同一个测试文档中共有4页。我需要使用iText API进行此设置。我已经尝试了一些代码,但它给了我一些例外&也不能满足我的要求。

代码:

public void clonePageOfPdf() throws IOException, DocumentException{
        Document doc = null;
        PdfReader reader = null;
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;

        //Assign
        inputStream = new FileInputStream(new File(sourcefile));
        outputStream = new FileOutputStream(new File(destfile));

        doc = new Document();
        PdfCopy copy = new PdfSmartCopy(doc, outputStream);
        doc.open();
        reader = new PdfReader(inputStream);

        for(int page = 0; page < reader.getNumberOfPages(); page++){
            PdfImportedPage importedPage = copy.getImportedPage(reader, page);

            //Duplicate
            for(int i = 0; i < 1; i++){
                copy.addPage(importedPage);
            }
        }
        copy.freeReader(reader);

        reader.close();
        doc.close();
        outputStream.close();
        inputStream.close();
    }
}

请帮我解决这个问题。

更新代码

public void clonePageOfPdf() throws IOException, DocumentException{
        //Document doc = null;
        PdfReader reader = null;
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;

        //Assign
        inputStream = new FileInputStream(new File(sourceFile));
        outputStream = new FileOutputStream(new File(destFile));

        //doc = new Document();

        reader = new PdfReader(inputStream);
        reader.selectPages("1,1");
        PdfStamper stamper = new PdfStamper(reader, outputStream);
        stamper.close();

        reader.close();
        //doc.close();
        outputStream.close();
        inputStream.close();
    }

任何人都可以帮我更新代码吗?

1 个答案:

答案 0 :(得分:0)

出于某种原因,我建议的selectPages()方法不再适用于最近版本的iText 5(它与旧版本一起工作),所以我查看了原始代码,并按照以下方式对其进行了调整:< / p>

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfReader reader = new PdfReader(src);
    PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));
    document.open();
    for(int page = 1; page <= reader.getNumberOfPages(); page++) {
        PdfImportedPage importedPage = copy.getImportedPage(reader, page);
        for(int i = 0; i < 2; i++) {
            copy.addPage(importedPage);
        }
    }
    document.close();
    reader.close();
}

以下是我所做的更改:

for(int page = 1; page <= reader.getNumberOfPages(); page++)

页码从第1页开始,而不是从第0页开始,这会对您的for循环产生影响。

for(int i = 0; i < 2; i++)

如果您想添加2个页面而不是1个页面,则需要i < 2而不是i < 1