Skip to main content
Participant
September 8, 2026
Question

[BUG] PDF Embed API (FULL_WINDOW): Page 1 renders blurry on iPad Chrome (CriOS) Mobile Site due to 1x mobile DPI override

  • September 8, 2026
  • 0 replies
  • 2 views

[BUG] PDF Embed API (FULL_WINDOW): Page 1 renders blurry on iPad Chrome (CriOS) Mobile Site due to 1x mobile DPI override

ENVIRONMENT:
- SDK: Adobe PDF Embed API / Acrobat Services DC View SDK (https://acrobatservices.adobe.com/view-sdk/viewer.js)
- Embed Mode: FULL_WINDOW (defaultViewMode: FIT_WIDTH)
- Device: iPad (iPadOS 16 / 17 / 18, high-DPI Retina screens with window.devicePixelRatio = 2)
- Browser: Google Chrome for iOS (CriOS), specifically in "Request Mobile Website" mode


DESCRIPTION OF THE ISSUE:
When previewing PDFs in FULL_WINDOW mode on an iPad using Chrome's mobile website mode, Page 1 consistently renders blurry / at low resolution.

1. On initial document load, Page 1 often flashes sharp for a brief split-second, then is immediately replaced by a fuzzy, low-resolution rasterization where fonts and vector lines degrade.
2. Only Page 1 is affected. Scrolling down to Page 2, Page 3, and subsequent pages renders them crisply at native Retina resolution.
3. Pinch-zooming in/out or scrolling completely away from Page 1 and returning forces Adobe to re-rasterize Page 1 sharply.
4. When navigating sequentially through multiple PDFs within the same SPA session (e.g. Next / Previous document navigation), the blur becomes permanent on Page 1 for every following PDF.
5. A browser refresh does not reliably fix the issue.


CONTRASTING BEHAVIORS:
- iPad Chrome "Request Desktop Site": Works correctly. The PDF starts slightly blurry during progressive load, then automatically finishes sharp.
- iPad Safari (Mobile & Desktop modes): Works correctly. Improves from blurry to full Retina sharpness automatically.
- Desktop Chrome resized to iPad viewport: Cannot reproduce. The issue is unique to iPad WebKit touch environments in mobile site mode.
- Adobe IN_LINE Embed Mode: Renders Page 1 sharply, but IN_LINE removes the native FULL_WINDOW toolbar, navigation controls, continuous scroll, and zoom UI required by our application.


ROOT CAUSE ANALYSIS (FROM DECOMPILED SDK BUNDLES):
Inspecting Adobe's runtime bundles (preview-lite-chunk.js and chunk-7250.js) reveals that the issue stems from how RenderingManager handles initial page preloading on mobile viewports:

1. In RenderingManager._startRenderingPDF(), Adobe checks this.props.config.enableLowResolutionRendition (default: true) and calls this._preloadPageAtLowRes().
2. Inside _preloadPageAtLowRes():
   const t = isCurrentDeviceMobile() ? 1 : getDevicePixelRatio();
   this.stores.documentStore.pageIsLoaded({ pageIndex: 0, bitmapUrl: s, ... });
3. When isCurrentDeviceMobile() evaluates to true on iPad Chrome Mobile, Adobe forces the resolution ratio t = 1 rather than respecting the hardware Retina ratio (devicePixelRatio = 2).
4. Race Condition: Progressive rendering starts and draws Page 1 at native Retina resolution. However, _preloadPageAtLowRes() resolves asynchronously in the background and fires pageIsLoaded with the 1x low-res bitmap, overwriting the sharp page with the blurry 1x image.
5. Across consecutive documents, WebKit's canvas memory caching compounds the issue, locking Page 1 into low-resolution fallback.


CLIENT-SIDE WORKAROUNDS ATTEMPTED (ALL FAILED):
- Programmatic Zoom-In / Zoom-Out via getZoomAPIs(): Attempted to cycle zoom automatically on APP_RENDERING_DONE to replicate the manual pinch gesture. Result: Created a jarring visual snapback/jump for the user, suffered from race conditions with Adobe's event loop, and still reverted to blur once the zoom settled.
- Configuration Flags (enableLowResolutionRendition: false, enableMobileModernViewer: false, shouldUseModernViewer: true): Result: enableMobileModernViewer: false introduced severe loading latency without fixing the blur. enableLowResolutionRendition: false does not reliably bypass the mobile 1x clamping in the active CDN bundle.
- Session Teardown (CLOSE_PDF_VIEWER, unMountViewerNode, iframe.src = 'about:blank'): Result: Successfully releases WebKit canvas contexts between documents, but cannot prevent Page 1 from being clobbered during its initial render.


REQUEST FOR ADOBE ENGINEERING TEAM:
1. Honor Retina devicePixelRatio on Mobile Viewports: In _preloadPageAtLowRes(), do not hardcode t = 1 when isCurrentDeviceMobile() is true. Modern tablets (like iPads) have high-DPI Retina screens and need 2x backing stores.
2. Prevent Lower-Resolution Overwrites: If progressive rendering has already completed at native device DPI, prevent delayed 1x thumbnail / low-res rendition callbacks from overwriting the sharper canvas.
3. Provide a Supported Config Option: Expose a functional, documented previewConfig option to disable the low-resolution first-page preload pass completely in FULL_WINDOW mode.