Skip to content
This repository was archived by the owner on Nov 10, 2025. It is now read-only.

Commit 6fcff09

Browse files
committed
Add fitEachPage option
1 parent 389c1e4 commit 6fcff09

File tree

4 files changed

+35
-9
lines changed

4 files changed

+35
-9
lines changed

android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/DecodingAsyncTask.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ protected Throwable doInBackground(Void... params) {
4848
try {
4949
PdfDocument pdfDocument = docSource.createDocument(pdfView.getContext(), pdfiumCore, password);
5050
pdfFile = new PdfFile(pdfiumCore, pdfDocument, pdfView.getPageFitPolicy(), getViewSize(),
51-
userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing());
51+
userPages, pdfView.isSwipeVertical(), pdfView.getSpacingPx(), pdfView.doAutoSpacing(),
52+
pdfView.doFitEachPage());
5253
return null;
5354
} catch (Throwable t) {
5455
return t;

android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PDFView.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ enum ScrollDir {
168168
/** Policy for fitting pages to screen */
169169
private FitPolicy pageFitPolicy = FitPolicy.WIDTH;
170170

171+
private boolean fitEachPage = false;
172+
171173
private int defaultPage = 0;
172174

173175
/** True if should scroll through pages vertically instead of horizontally */
@@ -1190,6 +1192,14 @@ public FitPolicy getPageFitPolicy() {
11901192
return pageFitPolicy;
11911193
}
11921194

1195+
private void setFitEachPage(boolean fitEachPage) {
1196+
this.fitEachPage = fitEachPage;
1197+
}
1198+
1199+
public boolean doFitEachPage() {
1200+
return fitEachPage;
1201+
}
1202+
11931203
public boolean doPageSnap() {
11941204
return pageSnap;
11951205
}
@@ -1306,6 +1316,8 @@ public class Configurator {
13061316

13071317
private FitPolicy pageFitPolicy = FitPolicy.WIDTH;
13081318

1319+
private boolean fitEachPage = false;
1320+
13091321
private boolean pageFling = false;
13101322

13111323
private boolean pageSnap = false;
@@ -1424,6 +1436,11 @@ public Configurator pageFitPolicy(FitPolicy pageFitPolicy) {
14241436
return this;
14251437
}
14261438

1439+
public Configurator fitEachPage(boolean fitEachPage) {
1440+
this.fitEachPage = fitEachPage;
1441+
return this;
1442+
}
1443+
14271444
public Configurator pageSnap(boolean pageSnap) {
14281445
this.pageSnap = pageSnap;
14291446
return this;
@@ -1460,6 +1477,7 @@ public void load() {
14601477
PDFView.this.setSpacing(spacing);
14611478
PDFView.this.setAutoSpacing(autoSpacing);
14621479
PDFView.this.setPageFitPolicy(pageFitPolicy);
1480+
PDFView.this.setFitEachPage(fitEachPage);
14631481
PDFView.this.setPageSnap(pageSnap);
14641482
PDFView.this.setPageFling(pageFling);
14651483

android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/PdfFile.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ class PdfFile {
5252
/** Scaled page with maximum width */
5353
private SizeF maxWidthPageSize = new SizeF(0, 0);
5454
/** True if scrolling is vertical, else it's horizontal */
55-
private boolean isVertical = true;
55+
private boolean isVertical;
5656
/** Fixed spacing between pages in pixels */
57-
private int spacingPx = 0;
57+
private int spacingPx;
5858
/** Calculate spacing automatically so each page fits on it's own in the center of the view */
5959
private boolean autoSpacing;
6060
/** Calculated offsets for pages */
@@ -64,21 +64,24 @@ class PdfFile {
6464
/** Calculated document length (width or height, depending on swipe mode) */
6565
private float documentLength = 0;
6666
private final FitPolicy pageFitPolicy;
67+
/** If every page should fit to the screen as best as possible regardless of relative size */
68+
private boolean fitEachPage;
6769
/**
6870
* The pages the user want to display in order
6971
* (ex: 0, 2, 2, 8, 8, 1, 1, 1)
7072
*/
7173
private int[] originalUserPages;
7274

7375
PdfFile(PdfiumCore pdfiumCore, PdfDocument pdfDocument, FitPolicy pageFitPolicy, Size viewSize, int[] originalUserPages,
74-
boolean isVertical, int spacing, boolean autoSpacing) {
76+
boolean isVertical, int spacing, boolean autoSpacing, boolean fitEachPage) {
7577
this.pdfiumCore = pdfiumCore;
7678
this.pdfDocument = pdfDocument;
7779
this.pageFitPolicy = pageFitPolicy;
7880
this.originalUserPages = originalUserPages;
7981
this.isVertical = isVertical;
8082
this.spacingPx = spacing;
8183
this.autoSpacing = autoSpacing;
84+
this.fitEachPage = fitEachPage;
8285
setup(viewSize);
8386
}
8487

@@ -111,7 +114,7 @@ private void setup(Size viewSize) {
111114
public void recalculatePageSizes(Size viewSize) {
112115
pageSizes.clear();
113116
PageSizeCalculator calculator = new PageSizeCalculator(pageFitPolicy, originalMaxWidthPageSize,
114-
originalMaxHeightPageSize, viewSize);
117+
originalMaxHeightPageSize, viewSize, fitEachPage);
115118
maxWidthPageSize = calculator.getOptimalMaxWidthPageSize();
116119
maxHeightPageSize = calculator.getOptimalMaxHeightPageSize();
117120

android-pdf-viewer/src/main/java/com/github/barteksc/pdfviewer/util/PageSizeCalculator.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,31 @@ public class PageSizeCalculator {
2828
private SizeF optimalMaxHeightPageSize;
2929
private float widthRatio;
3030
private float heightRatio;
31+
private boolean fitEachPage;
3132

3233
public PageSizeCalculator(FitPolicy fitPolicy, Size originalMaxWidthPageSize, Size originalMaxHeightPageSize,
33-
Size viewSize) {
34+
Size viewSize, boolean fitEachPage) {
3435
this.fitPolicy = fitPolicy;
3536
this.originalMaxWidthPageSize = originalMaxWidthPageSize;
3637
this.originalMaxHeightPageSize = originalMaxHeightPageSize;
3738
this.viewSize = viewSize;
39+
this.fitEachPage = fitEachPage;
3840
calculateMaxPages();
3941
}
4042

4143
public SizeF calculate(Size pageSize) {
4244
if (pageSize.getWidth() <= 0 || pageSize.getHeight() <= 0) {
4345
return new SizeF(0, 0);
4446
}
47+
float maxWidth = fitEachPage ? viewSize.getWidth() : pageSize.getWidth() * widthRatio;
48+
float maxHeight = fitEachPage ? viewSize.getHeight() : pageSize.getHeight() * heightRatio;
4549
switch (fitPolicy) {
4650
case HEIGHT:
47-
return fitHeight(pageSize, pageSize.getHeight() * heightRatio);
51+
return fitHeight(pageSize, maxHeight);
4852
case BOTH:
49-
return fitBoth(pageSize, pageSize.getWidth() * widthRatio, pageSize.getHeight() * heightRatio);
53+
return fitBoth(pageSize, maxWidth, maxHeight);
5054
default:
51-
return fitWidth(pageSize, pageSize.getWidth() * widthRatio);
55+
return fitWidth(pageSize, maxWidth);
5256
}
5357
}
5458

0 commit comments

Comments
 (0)