diff --git a/scripts/electron-repros/printpdf-page-range/index.html b/scripts/electron-repros/printpdf-page-range/index.html
new file mode 100644
index 0000000000..fcb93cd9e6
--- /dev/null
+++ b/scripts/electron-repros/printpdf-page-range/index.html
@@ -0,0 +1,68 @@
+
+
+
+ printToPDF Repro
+
+
+
+ Electron printToPDF — Page Range State Corruption Repro
+ Click Run Test Sequence to reproduce the bug. It will:
+
+ - Print with no page range (should succeed)
+ - Print with page range "999" (should fail — page doesn't exist)
+ - Print with no page range again (does it still work?)
+
+
+
+
+
+
+
+
diff --git a/scripts/electron-repros/printpdf-page-range/main.js b/scripts/electron-repros/printpdf-page-range/main.js
new file mode 100644
index 0000000000..7c7a283d88
--- /dev/null
+++ b/scripts/electron-repros/printpdf-page-range/main.js
@@ -0,0 +1,53 @@
+const { app, BrowserWindow, ipcMain } = require("electron");
+
+let mainWindow;
+
+app.whenReady().then(() => {
+ mainWindow = new BrowserWindow({
+ width: 800,
+ height: 600,
+ webPreferences: {
+ nodeIntegration: true,
+ contextIsolation: false,
+ },
+ });
+ mainWindow.loadFile("index.html");
+});
+
+ipcMain.handle("print-test", async (_e, { pageRanges, step }) => {
+ const printWindow = new BrowserWindow({
+ show: false,
+ width: 1,
+ height: 1,
+ webPreferences: { offscreen: process.platform !== "linux" },
+ });
+
+ await printWindow.loadFile("print-page.html");
+
+ // Wait for content to be ready.
+ await printWindow.webContents.executeJavaScript(
+ `new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)))`
+ );
+
+ const opts = {
+ landscape: false,
+ pageSize: "A4",
+ scale: 1,
+ printBackground: true,
+ // Only include pageRanges if truthy (non-empty string).
+ ...(pageRanges ? { pageRanges } : {}),
+ };
+
+ console.log(`[Step ${step}] printToPDF called with:`, JSON.stringify(opts));
+
+ try {
+ const buffer = await printWindow.webContents.printToPDF(opts);
+ console.log(`[Step ${step}] SUCCESS - buffer size: ${buffer.length}`);
+ printWindow.destroy();
+ return { ok: true, size: buffer.length };
+ } catch (err) {
+ console.error(`[Step ${step}] FAILED: ${err.message}`);
+ printWindow.destroy();
+ return { ok: false, error: err.message };
+ }
+});
diff --git a/scripts/electron-repros/printpdf-page-range/package.json b/scripts/electron-repros/printpdf-page-range/package.json
new file mode 100644
index 0000000000..5c380d9a96
--- /dev/null
+++ b/scripts/electron-repros/printpdf-page-range/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "electron-printpdf-page-range-repro",
+ "version": "1.0.0",
+ "private": true,
+ "description": "Minimal repro for Electron printToPDF state corruption after an invalid pageRanges failure",
+ "main": "main.js",
+ "scripts": {
+ "start": "electron ."
+ },
+ "devDependencies": {
+ "electron": "^35.0.0"
+ }
+}
diff --git a/scripts/electron-repros/printpdf-page-range/print-page.html b/scripts/electron-repros/printpdf-page-range/print-page.html
new file mode 100644
index 0000000000..04eb11623d
--- /dev/null
+++ b/scripts/electron-repros/printpdf-page-range/print-page.html
@@ -0,0 +1,8 @@
+
+
+Print Test
+
+ Test Page
+ This is a single-page document used to reproduce the printToPDF bug.
+
+