diff --git a/openhtmltopdf-core/src/main/java/com/openhtmltopdf/outputdevice/helper/BaseRendererBuilder.java b/openhtmltopdf-core/src/main/java/com/openhtmltopdf/outputdevice/helper/BaseRendererBuilder.java
index c5f515ae4..55cb0a558 100644
--- a/openhtmltopdf-core/src/main/java/com/openhtmltopdf/outputdevice/helper/BaseRendererBuilder.java
+++ b/openhtmltopdf-core/src/main/java/com/openhtmltopdf/outputdevice/helper/BaseRendererBuilder.java
@@ -626,6 +626,19 @@ public TFinalClass useExternalResourceAccessControl(
return (TFinalClass) this;
}
+ /**
+ * Allows the setting of the initial page number to use with the
+ * page and pages CSS counters.
+ * Useful when appending to an existing document.
+ * Must be one or greater.
+ *
+ * @return this for method chaining.
+ */
+ public TFinalClass useInitialPageNumber(int initialPageNumber) {
+ state._initialPageNumber = initialPageNumber;
+ return (TFinalClass) this;
+ }
+
public enum TextDirection {
RTL, LTR
}
diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/pr-727-initial-page-number.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/pr-727-initial-page-number.pdf
new file mode 100644
index 000000000..445d4efc1
Binary files /dev/null and b/openhtmltopdf-examples/src/main/resources/visualtest/expected/pr-727-initial-page-number.pdf differ
diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/html/pr-727-initial-page-number.html b/openhtmltopdf-examples/src/main/resources/visualtest/html/pr-727-initial-page-number.html
new file mode 100644
index 000000000..4b66f60de
--- /dev/null
+++ b/openhtmltopdf-examples/src/main/resources/visualtest/html/pr-727-initial-page-number.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+Page five
+Page six
+
+
diff --git a/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java b/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java
index 4a91145f4..788a2e07b 100644
--- a/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java
+++ b/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java
@@ -1413,6 +1413,16 @@ public void testIssue649MultipleBgImagesPageBox() throws IOException {
assertTrue(vt.runTest("issue-649-multiple-bg-images-page-box"));
}
+ /**
+ * Tests setting an initial page number with CSS page and pages counters.
+ */
+ @Test
+ public void testPr727InitialPageNumber() throws IOException {
+ assertTrue(vt.runTest("pr-727-initial-page-number", builder -> {
+ builder.useInitialPageNumber(5);
+ }));
+ }
+
// TODO:
// + Elements that appear just on generated overflow pages.
// + content property (page counters, etc)
diff --git a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java
index 1c12f1bd5..5001d532a 100644
--- a/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java
+++ b/openhtmltopdf-java2d/src/main/java/com/openhtmltopdf/java2d/api/Java2DRendererBuilder.java
@@ -37,17 +37,6 @@ public Java2DRendererBuilder useLayoutGraphics(Graphics2D g2d) {
return this;
}
- /**
- * Used to set an initial page number for use with page counters, etc.
- *
- * @param pageNumberInitial
- * @return this for method chaining
- */
- public Java2DRendererBuilder useInitialPageNumber(int pageNumberInitial) {
- state._initialPageNumber = pageNumberInitial;
- return this;
- }
-
/**
* Whether to use fonts available in the environment. Enabling environment fonts may mean different text
* rendering behavior across different environments. The default is not to use environment fonts.
diff --git a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxRenderer.java b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxRenderer.java
index 0b4dfd53f..6a7ba8a3d 100644
--- a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxRenderer.java
+++ b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxRenderer.java
@@ -138,7 +138,9 @@ public class PdfBoxRenderer implements Closeable, PageSupplier {
private PageSupplier _pageSupplier;
private final Closeable diagnosticConsumer;
-
+
+ private final int _initialPageNumber;
+
/**
* This method is constantly changing as options are added to the builder.
*/
@@ -269,6 +271,8 @@ else if (doc.file != null) {
}
this._os = state._os;
+
+ this._initialPageNumber = state._initialPageNumber;
}
public Document getDocument() {
@@ -477,7 +481,7 @@ public void createPDF(OutputStream os, boolean finish) throws IOException {
@Deprecated
public void createPDF(OutputStream os, boolean finish, int initialPageNo) throws IOException {
if (_useFastMode) {
- createPdfFast(finish);
+ createPdfFast(finish, initialPageNo);
return;
}
@@ -493,7 +497,7 @@ public void createPDF(OutputStream os, boolean finish, int initialPageNo) throws
RenderingContext c = newRenderingContext();
c.setInitialPageNo(initialPageNo);
-
+
PageBox firstPage = pages.get(0);
Rectangle2D firstPageSize = new Rectangle2D.Float(0, 0,
firstPage.getWidth(c) / _dotsPerPoint,
@@ -523,7 +527,7 @@ public void createPDF(OutputStream os, boolean finish, int initialPageNo) throws
/**
* Go fast!
*/
- private void createPdfFast(boolean finish) throws IOException {
+ private void createPdfFast(boolean finish, int initialPageNo) throws IOException {
boolean success = false;
XRLog.log(Level.INFO, LogMessageId.LogMessageId0Param.GENERAL_PDF_USING_FAST_MODE);
@@ -537,7 +541,7 @@ private void createPdfFast(boolean finish) throws IOException {
List pages = _root.getLayer().getPages();
RenderingContext c = newRenderingContext();
- c.setInitialPageNo(0);
+ c.setInitialPageNo(initialPageNo != 0 ? initialPageNo : _initialPageNumber);
c.setFastRenderer(true);
PageBox firstPage = pages.get(0);
@@ -596,6 +600,7 @@ private void writePDFFast(List pages, RenderingContext c, Rectangle2D f
int pageCount = _root.getLayer().getPages().size();
c.setPageCount(pageCount);
+
firePreWrite(pageCount); // opportunity to adjust meta data
setDidValues(doc); // set PDF header fields from meta data