Skip to content

Commit 932033c

Browse files
committed
enhancement: support for landscape pages
1 parent 8a2970a commit 932033c

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

src/main/java/be/quodlibet/boxable/BaseTable.java

+14-7
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,25 @@
1313
*/
1414
public class BaseTable extends Table<PDPage> {
1515

16-
public BaseTable(float yStart, float yStartNewPage, float bottomMargin, float width, float margin, PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
17-
super(yStart, yStartNewPage, 0, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, new DefaultPageProvider(document, currentPage.getMediaBox()));
16+
public BaseTable(float yStart, float yStartNewPage, float bottomMargin, float width, float margin,
17+
PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
18+
this(yStart, yStartNewPage, 0, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, newPageProvider(document, currentPage));
1819
}
19-
20-
public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin, PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
21-
super(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, new DefaultPageProvider(document, currentPage.getMediaBox()));
20+
21+
public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin,
22+
PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
23+
this(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, newPageProvider(document, currentPage));
2224
}
23-
24-
public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin, PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent, final PageProvider<PDPage> pageProvider) throws IOException {
25+
26+
public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin,
27+
PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent, PageProvider<PDPage> pageProvider) throws IOException {
2528
super(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, pageProvider);
2629
}
2730

31+
protected static DefaultPageProvider newPageProvider(final PDDocument doc, final PDPage page) {
32+
return new DefaultPageProvider(doc, page.getMediaBox(), page.getRotation());
33+
}
34+
2835
@Override
2936
protected void loadFonts() {
3037
// Do nothing as we don't have any fonts to load

src/main/java/be/quodlibet/boxable/Table.java

+18-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.apache.pdfbox.pdmodel.PDDocument;
1818
import org.apache.pdfbox.pdmodel.PDPage;
1919
import org.apache.pdfbox.pdmodel.PDPageContentStream;
20+
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
2021
import org.apache.pdfbox.pdmodel.font.PDFont;
2122
import org.apache.pdfbox.pdmodel.font.PDType0Font;
2223
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageXYZDestination;
@@ -32,6 +33,9 @@
3233

3334
public abstract class Table<T extends PDPage> {
3435

36+
public static final int ANG_PORTRAIT = 0;
37+
public static final int ANG_LANDSCAPE = 90;
38+
3539
public final PDDocument document;
3640
private float margin;
3741

@@ -364,7 +368,20 @@ protected T createPage() {
364368
}
365369

366370
private PDPageContentStream createPdPageContentStream() throws IOException {
367-
return new PDPageContentStream(getDocument(), getCurrentPage(), true, true);
371+
final T pg = getCurrentPage();
372+
final PDPageContentStream cs = new PDPageContentStream(getDocument(), pg, AppendMode.APPEND, true);
373+
if (pg.getRotation() == ANG_LANDSCAPE) { // => change ref. for drawing
374+
cs.transform(newTransfMtxOrientL(pg));
375+
}
376+
return cs;
377+
}
378+
379+
protected Matrix newTransfMtxOrientL(final PDPage pg) {
380+
return newTransfMtxOrientL(pg.getMediaBox().getWidth());
381+
}
382+
383+
protected Matrix newTransfMtxOrientL(final float w) {
384+
return new Matrix(0, 1, -1, 0, w, 0);
368385
}
369386

370387
private void drawCellContent(Row<T> row) throws IOException {

src/main/java/be/quodlibet/boxable/page/DefaultPageProvider.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ public class DefaultPageProvider implements PageProvider<PDPage> {
99
private final PDDocument document;
1010

1111
private final PDRectangle size;
12+
private final int rotation;
1213

1314
private int currentPageIndex = -1;
1415

1516
public DefaultPageProvider(final PDDocument document, final PDRectangle size) {
16-
this.document = document;
17-
this.size = size;
17+
this(document, size, 0);
18+
}
19+
20+
public DefaultPageProvider(final PDDocument document, final PDRectangle size, final int rotation) {
21+
this.document = document;
22+
this.size = size;
23+
this.rotation = rotation;
1824
}
1925

2026
@Override
@@ -52,6 +58,7 @@ public PDPage previousPage() {
5258
private PDPage getCurrentPage() {
5359
if (currentPageIndex >= document.getNumberOfPages()) {
5460
final PDPage newPage = new PDPage(size);
61+
newPage.setRotation(rotation);
5562
document.addPage(newPage);
5663
return newPage;
5764
}

0 commit comments

Comments
 (0)