Seer PDF is a local-first Chrome extension for turning web pages, articles, problem sets, selected nodes, and local HTML files into clean PDF documents.
It is designed around one simple boundary: PDF generation happens in your own browser. Seer PDF does not upload page content, does not use a remote PDF conversion service, and does not add accounts, subscriptions, online editing, or telemetry.
- Current page printing: export the active tab as a text-based PDF.
- Selected node printing: pick a content block on the page and print only that node.
- Region capture printing: drag to select a visual region and export it as a PDF.
- Batch link printing: collect links from the current page, select the ones you need, and print them in sequence.
- Local history and preview: keep local PDF records, preview, download, delete, and regenerate with updated layout settings.
- Typography controls: adjust local fonts, font size, line height, paragraph spacing, text indent, content width, and page numbers.
- Local HTML printing: import
.htmlor.htmfiles and print them as offline pages.
Seer PDF includes a small set of site templates for pages that need extra cleanup before printing.
- Supports answers, questions, column articles, pins, collections, people and organization pages, and column home pages.
- Exports the current item or displayed items as PDF or Markdown, with an optional standalone comments switch.
- Batch exports run through the links-page workspace and can write separate article, comment, image, and progress files, with ZIP fallback where directory access is unavailable.
- Preserves readable text, images, formulas, link cards, and nested comments while removing page-tool noise.
- Supports three modes: stem only, stem + answer card, and stem + full analysis.
- The answer card is generated locally by the extension template.
- Full analysis uses only content already authorized and available to the current page or account. It does not bypass login, membership, rate limits, takedowns, or WAF restrictions.
- Thematic pages print the current section by default. Loading external sections requires explicit opt-in in the page panel and is protected by limits, throttling, jitter, and cooldown.
- The "print explanation sections" option can include thematic explanation blocks in all three Zujuan modes, including answer-card mode.
- Download or clone this repository.
- Open
chrome://extensionsin Chrome or Edge. - Enable Developer mode.
- Click "Load unpacked".
- Select the repository root directory.
After loading the extension, click the toolbar icon to start printing.
Open any web page, click the extension icon, and choose current page printing.
Choose selected-node printing or region printing from the popup, then select the content on the page.
Open the extension popup on a supported site. If the page is recognized, template actions will appear in the popup.
Zhihu and Zujuan pages may also show in-page shortcut panels or buttons. These tools are marked as print noise and are removed from generated PDFs.
Generated PDFs open in the preview page. You can adjust typography, spacing, width, and page-number settings, then save a new copy or replace the current one.
- The main PDF path runs inside your local browser.
- Seer PDF does not upload page content.
- Seer PDF does not call online PDF conversion, compression, editing, telemetry, or remote template services.
- Extension-page scripts, images, fonts, media, and frames stay local or use
blob:/data:URLs;connect-srchas only the controlled Zhihu/zhimg asset-hydration exception. - Ordinary page resources such as images, scripts, fonts, or analytics are still controlled by the page itself; Seer PDF does not proxy or unblock them.
- For high-risk sites such as Zujuan, Seer PDF avoids silent background navigation to real site URLs by default. If a site WAF blocks your IP or session, the extension cannot remove that block.
Seer PDF is a Chrome Manifest V3 extension. Main permission usage:
activeTab/scripting: prepare pages for printing, node selection, and site templates.debugger: call ChromePage.printToPDFfor text-based PDF generation.downloads: download generated PDFs.offscreen: create a short-lived local Blob URL for a stored PDF without opening a visible tab or uploading data.storage: store local settings, history, and temporary print data.tabs: open preview, history, settings, batch-link, and local-print pages.fontSettings: read available local fonts.contextMenus: provide the local right-click entry point.
background.js Chrome extension service worker for printing, storage, downloads, and message routing
content.js Shared content script for selection tools, overlays, link collection, and page-tool entry points
pages/ Popup, preview, history, settings, batch links, local HTML source pages
shared/ Shared pure functions and lightweight UI helpers
page-tools/ In-page shortcut tools for Zhihu and Zujuan
site-templates/ Site-specific templates for Zhihu, Zujuan, and related smoke tests
tests/ Smoke tests and extension-level regression tests
docs/ Architecture, API, database, progress, rules, and changelog documents
Common static checks:
Get-Content .\manifest.json -Raw | ConvertFrom-Json | Out-Null
Get-ChildItem .\background.js, .\content.js, .\page-tools, .\pages, .\shared, .\site-templates, .\tests -Recurse -Filter *.js | ForEach-Object { node --check $_.FullName }
node .\site-templates\site-templates-smoke.test.js
node .\tests\print-style-css-smoke.test.js
node .\tests\font-ui-smoke.test.js
node .\tests\zhihu-page-tools-smoke.test.js
node .\tests\zujuan-page-tools-smoke.test.js
node .\tests\zujuan-popup-controls-smoke.test.jsBrowser runtime tests require Playwright/Chromium:
$env:NODE_PATH='<node-module-paths>'
$env:SEER_CHROME_PATH='<chromium-exe>'
node .\site-templates\zujuan-paper-runtime-smoke.test.js
node .\tests\zujuan-page-tools-runtime-smoke.test.js
node .\tests\zujuan-extension-e2e-smoke.test.jsMore commands are documented in AGENTS.md and docs/DEVELOPMENT.md.
docs/ARCHITECTURE.md: architecture and key flows.docs/API.md: internal extension message contracts.docs/DATABASE.md: local settings, IndexedDB, and history metadata.docs/CHANGELOG.md: notable changes.docs/PROGRESS.md: current phase and recent progress.docs/DOC_INDEX.md: documentation index.
MIT License. See LICENSE.
Security reporting: SECURITY.md. Contribution notes: CONTRIBUTING.md.