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

Java iText-如何克隆文档的页面?,java,pdf,itext,Java,Pdf,Itext,我正在使用iText5API克隆PDF的页面。我的要求如下: 我有一个名为“Test”的文档,它有两个不同的页面。我需要克隆每个页面,即如果测试文档有两个页面,我需要克隆第一个页面&然后是第二个页面,在同一测试文档中总共有4个页面。我需要使用iText API进行此设置。我试过一些代码,但它给了我一些例外&也不能满足我的要求 代码: public void clonePageOfPdf() throws IOException, DocumentException{ Docume

我正在使用iText5API克隆PDF的页面。我的要求如下: 我有一个名为“Test”的文档,它有两个不同的页面。我需要克隆每个页面,即如果测试文档有两个页面,我需要克隆第一个页面&然后是第二个页面,在同一测试文档中总共有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();
    }
}

有人能帮我更新代码吗?

出于某种原因,我建议的
selectPages()
方法不再适用于iText 5的最新版本(它适用于旧版本),因此我查看了您的原始代码,并对其进行了如下修改:

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();
}

如果你想添加两页而不是一页,你需要
i<2
而不是
i<1

乍一看,你可能会想:嘿,这个布鲁诺家伙把我的问题作为一个完全不同的问题的重复关闭了!但是试试看。扔掉你的
PdfCopy
代码,用
PdfStamper
代码替换它。使用非常具体的选项,例如
“1,1,2,2”
。您将发现,
selectPages()
方法也可用于重复页面。@BrunoLowagie您好,感谢selectPages()方法。但是,即使重复selectPages()方法,也无法重复页面。你能用一个小片段来演示吗?应该是这么简单:
PdfReader reader=newpdfreader(src);阅读器。选择页面(“1、1、2、2”);PdfStamper stamper=新PdfStamper(读取器,新文件输出流(dest));压模关闭()
@BrunoLowagie
reader=新的PdfReader(inputStream);阅读器。选择页面(“1,1,2,2”);PdfStamper压模=新的PdfStamper(读卡器,输出流);压模关闭()这是我使用过的代码。但我仍然无法在输出PDF中看到重复页面。知道为什么吗?不,这对我有用。您正在使用哪个版本的iText?你能分享这个PDF文档吗?
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++)
for(int i = 0; i < 2; i++)