Files
pdfcraft/docs/hardware-parity.md
T
Mawfyy 33c14e07cf Print: Windows lists its printers and spools jobs (#847)
* Print: Windows lists its printers and spools jobs (#756)

The Print dialog's printer list comes from Win32_Printer through PowerShell's
CIM (wmic is gone from Windows 11), and jobs are spooled by the embedded
windows_print.ps1: the in-box Windows.Data.Pdf renders each sheet at the
printer's own resolution and System.Drawing.Printing carries copies,
collation, duplex and colour as the job's settings. Both run through
powershell, so the Rust code touches no Win32 API. Fixes #756, with the
printer-not-showing duplicates #160, #244, #293, #465 and #644; CIM approach
from #452. On CI a paused Generic / Text Only test printer catches the job in
its queue; a parser test keeps the script valid PowerShell.

* Print: fix the Windows await helper and render the job on CI (dry run)

Real-machine testing found [System.WindowsRuntimeSystemExtensions]::GetMethods()
failing with 'does not contain a method named GetMethods': GetMethods is an
instance method of [Type], so it is called with '.', the form the canonical
WinRT-await snippets use, not '::'. The first CI run missed it because the
end-to-end test skipped silently when the runner refused the test printer, so
the script had never actually run.

The script now honours PDFCRAFT_PRINT_DRYRUN=1: render every sheet with
Windows.Data.Pdf to PNGs in the temporary folder and print nothing. The test
runs that half unconditionally, so CI exercises the whole WinRT path —
projection, await helpers, render — on any machine, while the paused-printer
half stays best-effort and prints why it skipped. Win32_Printer enumeration
asks only for Name and Default, so a machine with nine printers waits less.

* Tests: the find-options wait in the viewer test is a deadline too

4280f83 converted the frame-count waits in this test to deadlines after the
same 12-of-15 race under a full workspace test run, but left the first wait —
the one for the 'page' matches — on the old 60-frame loop, and it flaked the
same way on PR #847's CI. Same fix: wait up to 20 s for the 15 matches, then
assert.
2026-10-11 00:23:35 -04:00

3.5 KiB
Raw Blame History

Hardware and platform parity

Last reviewed: 2026-10-10 · Last updated: 2026-10-10 · Change: major (first hardware and platform matrix) · Target: Adobe Acrobat Pro (Acrobat DC, continuous track 26.002.21931, macOS)

Each hardware feature Acrobat Pro uses, per platform, ours against Acrobat's. Acrobat runs on macOS and Windows (plus a limited web viewer/editor in Document Cloud); PdfCraft runs on macOS, Windows, Linux, FreeBSD and the web. Gaps ranked in gaps.md.

Hardware ≈ 35% ready, 25–50 h (additional to the features total; scanners, smart cards and printing are counted in their feature areas). Platforms ≈ 70% ready, 15–30 h.

Hardware

Feature Acrobat (macOS / Windows) PdfCraft macOS PdfCraft Windows PdfCraft Linux / FreeBSD PdfCraft web Evidence
GPU page rendering yes (Page Display ▸ GPU-accelerated rendering) no: CPU raster, GPU for UI compositing (wgpu, Metal) no (wgpu DX12, GL fallback) no (wgpu Vulkan/GL) no (WebGL/WebGPU UI) crates/render; gap 20
Multi-threaded rendering yes yes (render pool, tiles, watchdog) yes yes single thread view.render-priority
HiDPI / Retina yes yes yes, per-monitor DPI v2 (#324, #725) yes yes text blurry at 1080p/1440p (#730)
Multiple monitors yes, multiple windows one window one window; surfaces fit the GPU limit (#577) one window n/a view.multiple-windows planned
Printers all, PostScript, printer properties CUPS spooler none (#756) CUPS spooler none crates/print/README.md
Scanners (TWAIN, WIA, ICA) yes none none none (SANE) n/a ocr.scanner-acquire planned
Smart cards and USB tokens yes (PKCS #11, CryptoTokenKit, CNG) Keychain identities (software keys) CNG store keys, with PIN prompts for cards (#742) none (PKCS #11 planned) none sign.pkcs11 planned
Pen and touch Touch mode, pen ink, Windows Ink trackpad pinch zoom; ink from pointer, no pressure ink from pointer, no pressure or touch mode as macOS pointer touchpad scrolling not 1:1 (#759)
Keyboard input methods (IME) yes yes; Japanese and Korean IME fixes patched into winit yes (Microsoft Korean cursor fix) X11 and Wayland IME fixes browser vendor/README.md winit patches 2–10
Screen readers VoiceOver, NVDA, JAWS AccessKit labels (partial) AccessKit (partial) AccessKit (partial) partial a11y.app-screen-reader partial
Text to speech (Read Out Loud) yes none none none none a11y.read-aloud planned
Apple Silicon / ARM64 native native ARM64 build (#61) ARM64 builds n/a release.yml

Platforms

Platform Acrobat PdfCraft Packaging Gaps
macOS yes yes signed and notarized DMG —
Windows (x64, x86, ARM64) yes (x64, ARM64) yes signed installers —
Linux no yes AppImage, deb, rpm, Flatpak, tarball Chinese faces in Flatpak (#689)
FreeBSD no yes package —
Web Acrobat online (cloud) yes (WASM, offline in the browser) static site printing, OCR, crash recovery, PKCS #12 signing, hosted deployment

Revision history

Date Change Summary
2026-10-10 major Created from the code, vendor/README.md, .github/workflows/release.yml, the print crate's README and user issues
2026-10-10 minor Windows printing shipped (#756): the Windows row's gap is closed; the web row keeps "printing"