Skip to content

Commit

Permalink
enhancement: support for landscape pages
Browse files Browse the repository at this point in the history
  • Loading branch information
ogmios-voice committed Aug 14, 2019
1 parent 8a2970a commit 932033c
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 10 deletions.
21 changes: 14 additions & 7 deletions src/main/java/be/quodlibet/boxable/BaseTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,25 @@
*/
public class BaseTable extends Table<PDPage> {

public BaseTable(float yStart, float yStartNewPage, float bottomMargin, float width, float margin, PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
super(yStart, yStartNewPage, 0, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, new DefaultPageProvider(document, currentPage.getMediaBox()));
public BaseTable(float yStart, float yStartNewPage, float bottomMargin, float width, float margin,
PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
this(yStart, yStartNewPage, 0, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, newPageProvider(document, currentPage));
}

public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin, PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
super(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, new DefaultPageProvider(document, currentPage.getMediaBox()));

public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin,
PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent) throws IOException {
this(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, newPageProvider(document, currentPage));
}

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 {

public BaseTable(float yStart, float yStartNewPage, float pageTopMargin, float bottomMargin, float width, float margin,
PDDocument document, PDPage currentPage, boolean drawLines, boolean drawContent, PageProvider<PDPage> pageProvider) throws IOException {
super(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, pageProvider);
}

protected static DefaultPageProvider newPageProvider(final PDDocument doc, final PDPage page) {
return new DefaultPageProvider(doc, page.getMediaBox(), page.getRotation());
}

@Override
protected void loadFonts() {
// Do nothing as we don't have any fonts to load
Expand Down
19 changes: 18 additions & 1 deletion src/main/java/be/quodlibet/boxable/Table.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageXYZDestination;
Expand All @@ -32,6 +33,9 @@

public abstract class Table<T extends PDPage> {

public static final int ANG_PORTRAIT = 0;
public static final int ANG_LANDSCAPE = 90;

public final PDDocument document;
private float margin;

Expand Down Expand Up @@ -364,7 +368,20 @@ protected T createPage() {
}

private PDPageContentStream createPdPageContentStream() throws IOException {
return new PDPageContentStream(getDocument(), getCurrentPage(), true, true);
final T pg = getCurrentPage();
final PDPageContentStream cs = new PDPageContentStream(getDocument(), pg, AppendMode.APPEND, true);
if (pg.getRotation() == ANG_LANDSCAPE) { // => change ref. for drawing
cs.transform(newTransfMtxOrientL(pg));
}
return cs;
}

protected Matrix newTransfMtxOrientL(final PDPage pg) {
return newTransfMtxOrientL(pg.getMediaBox().getWidth());
}

protected Matrix newTransfMtxOrientL(final float w) {
return new Matrix(0, 1, -1, 0, w, 0);
}

private void drawCellContent(Row<T> row) throws IOException {
Expand Down
11 changes: 9 additions & 2 deletions src/main/java/be/quodlibet/boxable/page/DefaultPageProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,18 @@ public class DefaultPageProvider implements PageProvider<PDPage> {
private final PDDocument document;

private final PDRectangle size;
private final int rotation;

private int currentPageIndex = -1;

public DefaultPageProvider(final PDDocument document, final PDRectangle size) {
this.document = document;
this.size = size;
this(document, size, 0);
}

public DefaultPageProvider(final PDDocument document, final PDRectangle size, final int rotation) {
this.document = document;
this.size = size;
this.rotation = rotation;
}

@Override
Expand Down Expand Up @@ -52,6 +58,7 @@ public PDPage previousPage() {
private PDPage getCurrentPage() {
if (currentPageIndex >= document.getNumberOfPages()) {
final PDPage newPage = new PDPage(size);
newPage.setRotation(rotation);
document.addPage(newPage);
return newPage;
}
Expand Down

0 comments on commit 932033c

Please sign in to comment.