来自iText的巨大结果PDF使用PdfSmartCopy

时间:2014-02-27 12:30:03

标签: java pdf pdf-generation itext

我有(在大多数情况下)2个PDF文件,1个主PDF包含大约30000页,另一个包含1页我希望在每X个页面后插入主页(取决于我的单独索引文件) ),同时还为每个页面添加条形码。

我遇到的问题是结果PDF变得非常大(10GB +),而文件内是350Mb,而我要插入的小文件是<50kb。

什么是优化PDF Im创建大小的好方法?

下面是处理PDF合并的代码的相关部分。

PdfImportedPage page;
PdfSmartCopy outPdf;
PdfSmartCopy.PageStamp stamp;
PdfReader pdfReader, pdfInsertReader;

...

outDoc = new Document();
outPdf = new PdfSmartCopy(outDoc, new FileOutputStream(outFile));
pdfToolset = new PDFToolset();
outDoc.open();

...

//loop over pages in my index-file
for (IndexPage index_page : item.pages) {
    if (indexpage.insertPage){
        currentDoc = indexpage.source_file;
        outPdf.freeReader(pdfReader);
        outPdf.flush();
        if (!currentDoc.equals(insertDoc)) {
            insertDoc = currentDoc;
            pdfInsertReader = new PdfReader(currentDoc);
        }
    } else if (!currentDoc.equals(indexpage.source_file)) {
        currentDoc = indexpage.source_file;
        outPdf.freeReader(pdfInsertReader);
        outPdf.flush();
        if (!mainDoc.equals(currentDoc)){
            mainDoc = currentDoc;
            pdfReader = new PdfReader(mainDoc);
        }
    }

    if (indexpage.insertPage)
        page = outPdf.getImportedPage(pdfInsertReader, indexpage.source_page);
    else
        page = outPdf.getImportedPage(pdfReader, indexpage.source_page);

    if (!duplex || (duplex && indexpage.nr % 2 == 1)) {
        stamp = outPdf.createPageStamp(page);
        stamp = pdfToolset.applyBarcode(stamp, indexpage.omr, indexpage.nr);
        stamp.alterContents();
    }
    outPdf.addPage(page);
}

...

0 个答案:

没有答案