Я не понимаю ваши фрагменты кода, но опять же: возможно, вы их тоже не понимаете, поэтому давайте не будем смотреть на то, что вы написали до сих пор, и давайте более подробно рассмотрим пример TileInTwo:
public void manipulatePdf(String src, String dest)
throws IOException, DocumentException {
// Creating a reader
PdfReader reader = new PdfReader(src);
int n = reader.getNumberOfPages();
// step 1
Rectangle mediabox = new Rectangle(getHalfPageSize(reader.getPageSizeWithRotation(1)));
Document document = new Document(mediabox);
// step 2
PdfWriter writer
= PdfWriter.getInstance(document, new FileOutputStream(dest));
// step 3
document.open();
// step 4
PdfContentByte content = writer.getDirectContent();
PdfImportedPage page;
int i = 1;
while (true) {
page = writer.getImportedPage(reader, i);
content.addTemplate(page, 0, -mediabox.getHeight());
document.newPage();
content.addTemplate(page, 0, 0);
if (++i > n)
break;
mediabox = new Rectangle(getHalfPageSize(reader.getPageSizeWithRotation(i)));
document.setPageSize(mediabox);
document.newPage();
}
// step 5
document.close();
reader.close();
}
public Rectangle getHalfPageSize(Rectangle pagesize) {
float width = pagesize.getWidth();
float height = pagesize.getHeight();
return new Rectangle(width, height/2);
}
В этом примере, мы задаем экземпляр PdfReader
для размера страницы первой страницы, и мы создаем новый прямоугольник с той же шириной, и только половину высоты.
Затем импортируйте каждую страницу документа, и мы добавим его в два раза на разных страницах:
- один раз на нечетных страницах с отрицательным
y
значения, чтобы показать верхнюю часть исходной страницы,
- один раз на четных страницах с
y = 0
, чтобы показать нижнюю половину исходной страницы.
Поскольку каждая страница оригинального документа может иметь разный размер, нам может потребоваться изменить размер страницы для каждой новой пары страниц.