使用iText合并不同宽度的pdf文档

使用iText合并不同宽度的文档时出现问题。

下面是我用来合并的代码。

        public static void doMerge(List<InputStream> list, OutputStream outputStream) throws Exception {

Rectangle pagesize = new Rectangle(1700f, 20f);

com.itextpdf.text.Document document = new com.itextpdf.text.Document(pagesize);

PdfWriter writer = PdfWriter.getInstance(document, outputStream);

document.open();

document.setPageSize(pagesize);

com.itextpdf.text.pdf.PdfContentByte cb = writer.getDirectContent();

for (InputStream in : list){

PdfReader reader = new PdfReader(in);

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

document.newPage();

//import the page from source pdf

com.itextpdf.text.pdf.PdfImportedPage page = writer.getImportedPage(reader, i);

//calculate the y for merging it from top

float y = document.getPageSize().getHeight() - page.getHeight();

//add the page to the destination pdf

cb.addTemplate(page, 0, y);

}

reader.close();

in.close();

}

outputStream.flush();

document.close();

outputStream.close();

}

pdf的首页宽度为14英寸,高度为13英寸。文档上的所有其他页面将始终小于该页面。

我想将所有文档全部合并到一个文档中。

我不知道如何设置单个合并文档的宽度和高度。

我认为Rectangle pagesize = new Rectangle(1700f, 20f);应该这样做,但是如果将其更改为Rectangle

pagesize = new Rectangle(1700f, 200f);,文档无效将不起作用。

请进一步指导我。

回答:

使用PdfWriter类合并文档违反了 官方 文档中的所有建议,尽管有一些 非正式的

示例可能会诱使您编写不良代码。我希望您了解,我发现这些不好的例子比您更讨厌。

请看本书第6章中的表6.1

。它为您提供了显示何时使用哪个类的概述。在这种情况下,您应该使用PdfCopy

String[] files = { MovieLinks1.RESULT, MovieHistory.RESULT };

// step 1

Document document = new Document();

// step 2

PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT));

// step 3

document.open();

// step 4

PdfReader reader;

int n;

// loop over the documents you want to concatenate

for (int i = 0; i < files.length; i++) {

reader = new PdfReader(files[i]);

// loop over the pages in that document

n = reader.getNumberOfPages();

for (int page = 0; page < n; ) {

copy.addPage(copy.getImportedPage(reader, ++page));

}

copy.freeReader(reader);

reader.close();

}

// step 5

document.close();

如果您使用的是iText的最新版本,则甚至可以使用此addDocument()方法,而无需遍历所有页面。如果涉及表格,则还需要特别小心。有许多示例在Sandbox中展示了新功能(从本书编写之后开始)。

以上是 使用iText合并不同宽度的pdf文档 的全部内容, 来源链接: utcz.com/qa/408804.html

回到顶部