Recommended Free Tools
Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Use Adobe’s free PDF Embed API by registering a client ID, loading viewer.js, adding an adobe-dc-view container, and calling AdobeDC.View.previewFile(). The PDF must be reachable by the browser (with suitable CORS headers when it is hosted on another origin), and the client ID must be registered for the domain serving your page.
What you need before writing code
- An Adobe PDF Embed API client ID.
- A website domain registered for that client ID. Adobe validates that the ID is used on the approved domain.
- A browser page that can load
https://acrobatservices.adobe.com/view-sdk/viewer.js. - A PDF delivered either from a URL the browser can fetch or through the API’s supported file-content/file-promise approach.
The viewer service is JavaScript-based and runs in the user’s browser. Your page supplies the viewer container and PDF; Adobe supplies the rendering and viewer controls.
Minimal working embed
This is the smallest complete URL-based example. Replace both placeholders with your registered client ID and PDF URL.
<div id="adobe-dc-view" style="height: 360px; width: 500px;"></div>
<script src="https://acrobatservices.adobe.com/view-sdk/viewer.js"></script>
<script>
document.addEventListener("adobe_dc_view_sdk.ready", function () {
var adobeDCView = new AdobeDC.View({
clientId: "<YOUR_CLIENT_ID>",
divId: "adobe-dc-view"
});
adobeDCView.previewFile({
content: { location: { url: "https://example.com/file.pdf" } },
metaData: { fileName: "file.pdf" }
}, {
embedMode: "SIZED_CONTAINER"
});
});
</script>
The sequence matters: wait for the adobe_dc_view_sdk.ready event, create AdobeDC.View with the client ID and container ID, then call previewFile. Keep the PDF’s filename in metaData.fileName; it is used by viewer features such as download.
#1 Best Overall
- Create and edit PDFs. Collaborate with ease. E-sign documents and collect signatures. Get everything done in one app, wherever you go.
- Edit text and images without jumping to another app.
- E-sign documents or request e-signatures on any device. Recipients don’t need to log in to e-sign.
- Convert PDFs to editable Microsoft Word, Excel, or PowerPoint documents.
- Share PDFs for collaboration. Commenting features make it easy for reviewers to comment, mark up, and annotate.
Choose the right embed mode
Set embedMode in the second argument to previewFile. The mode changes layout, sizing, and how much of the surrounding page remains visible.
| Mode | Viewport behavior | Best fit | Implementation detail |
|---|---|---|---|
FULL_WINDOW |
Viewer fills the browser window. | Dedicated document-reading pages. | Give the page a suitable height; the PDF becomes the primary experience. |
SIZED_CONTAINER |
Pages behave like slides inside a fixed box. | Product pages, presentations, and precise layouts. | Set the container’s width and height in CSS, as in the minimal example. |
IN_LINE |
Pages flow with surrounding content and the viewer height is automatically sized. | Whitepapers, brochures, and e-books embedded in an article. | Leave room in the page layout for the automatically sized viewer. |
LIGHT_BOX |
Viewer opens as a foreground overlay while the page remains visible behind it. | Preview buttons and optional document reading. | Open the viewer from an explicit user action and provide a clear close path. |
For responsive layouts, avoid hard-coding a narrow desktop width. Use a container such as width:100%; min-height:360px, then test the selected mode at your actual phone, tablet, and desktop breakpoints.
Make the PDF reachable: URL versus file content
Public or signed URL
The content.location.url form is straightforward when the PDF is available at a stable URL. The browser, not your server, downloads the file, so the PDF origin must permit the request with CORS headers. A PDF that opens in a new tab can still fail in the embed if its response does not allow the viewer’s cross-origin request.
Check that the URL returns a PDF response (normally Content-Type: application/pdf), does not require an interactive login, and remains valid for the full loading period. For protected documents, issue a short-lived URL or use the documented file-content/file-promise delivery method rather than exposing a permanent secret in page source.
Cross-origin checklist
- Send an
Access-Control-Allow-Originvalue that includes the origin of your page (or an intentionally configured public value). - Allow the HTTP methods and headers used by your delivery setup.
- Ensure redirects preserve access policy; a redirect to another host must also satisfy CORS.
- Do not put storage credentials or bearer tokens in a public PDF URL.
When a PDF is private, proxy it through your own backend with authorization checks, or generate a narrowly scoped signed URL. The browser must still receive the bytes in a form the viewer supports.
Control download, print, forms, and annotations
The viewer configuration can show or hide download, print, comments, and annotation tools where those controls are supported. For example:
adobeDCView.previewFile({
content: { location: { url: "https://example.com/file.pdf" } },
metaData: { fileName: "policy.pdf" }
}, {
embedMode: "SIZED_CONTAINER",
showDownloadPDF: false,
showPrintPDF: false,
enableFormFilling: false
});
Hiding a toolbar button is a user-interface choice, not a document-security boundary. A determined user may still obtain content that their browser can read, so enforce access and authorization on the server.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Rank #2
- Perfect Adobe Acrobat Pro alternative – lifetime license for Windows 10 and 11.
- EDIT text, images, pages, hyperlinks, designs in PDF documents. ORGANIZE PDFs.
- READ and Comment on PDFs – Intuitive reading modes & document commenting and mark up tools!
- CREATE, COMBINE, SCAN and COMPRESS PDFs.
- FILL forms & Digitally Sign PDFs. Work with Digital certificates
Live form editing is enabled by default; set enableFormFilling: false when the document should be read-only. Annotation APIs support import, creation, update, deletion, export, and save callbacks. For multi-user review, provide a reviewer name or email and persist annotation data through your own callbacks. Without that identity configuration, comments display the reviewer as GUEST by default.
Events and analytics
Register an event listener to observe viewer activity, or configure Adobe Analytics or Google Analytics 4. Documented events include page changes, bookmark clicks, downloads, prints, external-link opens, text copies, searches, and zoom changes. Use these events to measure document engagement without polling the DOM.
Adobe’s documented analytics fields include browser and operating-system type and version, device type, embed mode, file size, page count, URL, and rendering/download performance. Adobe states: “PDF Embed API doesn’t store any user-generated content and never shares user-generated content with Adobe servers.” Keep your own analytics policy and consent requirements separate from viewer configuration.
Mobile, React, and Angular considerations
Phones and tablets
Adobe lists three mobile limitations: annotation tools are not supported on phones in FULL_WINDOW mode; print functionality is unsupported; and PDF download is unsupported on iOS devices but supported on Android. Do not promise desktop-equivalent controls on every mobile browser. Test the exact mode, PDF, and browser combination you support.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →React
Load viewer.js once, create the viewer after the component has mounted, and destroy or replace the instance when the PDF or route changes. Keep the client ID in configuration rather than hard-coding different IDs per component. Adobe’s official samples repository includes a React example.
Angular
Load the script from the application shell or a controlled script loader, then initialize from ngAfterViewInit, when the container exists. Reinitialize only after changing the document deliberately. Adobe’s official samples repository also includes an Angular example.
The same lifecycle rule applies in both frameworks: the container must exist before AdobeDC.View is constructed, and initialization must wait for the SDK-ready event.
Rank #3
- VIEW & PRINT ANY PDF
- USE LIQUID MODE FOR OPTIMAL PDF VIEWING
- EDIT PDFs
- MERGE & ORGANIZE PDFs WITH THE PDF CONVERTER
- SHARE PDFs & COLLABORATE
Troubleshooting blank or blocked previews
“Invalid client ID” or domain error
Cause: The ID is wrong, the page is running on an unregistered domain, or a staging hostname was not added to the registration.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallFix: Verify the exact client ID, protocol, hostname, and port used in the browser, then register that domain with Adobe and deploy the matching value.
Viewer area stays blank
Cause: The SDK script did not load, initialization ran before adobe_dc_view_sdk.ready, the container ID is misspelled, or the container has no usable height.
Fix: Inspect the browser console and network panel, confirm the script returns successfully, check that divId matches the element, and assign a visible height or use IN_LINE.
CORS or “failed to fetch” error
Cause: The PDF host does not allow your page’s origin, a redirect lands on a host with different policy, or authentication blocks the browser request.
Fix: Configure CORS on every response in the redirect chain, use a valid signed URL, or deliver the file through the supported file-content/file-promise path.
Only some PDFs fail
Cause: The failing file may be encrypted, malformed, inaccessible, or too slow to retrieve.
Rank #4
- Create and edit PDFs. Collaborate with ease. E-sign documents and collect signatures. Get everything done in one app, wherever you go.
- Edit text and images without jumping to another app.
- E-sign documents or request e-signatures on any device. Recipients don’t need to log in to e-sign.
- Convert PDFs to editable Microsoft Word, Excel, or PowerPoint documents.
- Share PDFs for collaboration. Commenting features make it easy for reviewers to comment, mark up, and annotate.
Fix: Open the exact URL with the same access conditions, validate the PDF independently, and check server logs for status codes, redirects, and response size. Confirm that the filename and URL identify the intended file.
Controls missing on a phone
Cause: Mobile limitations vary by device and mode; print is unsupported on mobile, iOS does not support PDF download, and phone annotations are unavailable in FULL_WINDOW.
Fix: Offer an alternate download workflow where permitted, choose a suitable mode, and test on representative iOS and Android devices.
Reliability, performance, and security practices
- Use a stable, cacheable PDF URL and avoid expiring it before the viewer finishes loading.
- Prefer linearized or otherwise web-optimized PDFs for large documents so first pages can appear sooner; still test with your real files and network conditions.
- Set explicit container dimensions to prevent layout shifts, especially in
SIZED_CONTAINERmode. - Lazy-load the viewer when it is below the fold, but initialize only after the container is present and the SDK-ready event has fired.
- Keep the client ID public but keep storage credentials, signing keys, and authorization tokens on your server.
- Decide separately whether download, print, form filling, and annotations are appropriate for each document and user role.
Or skip the browser setup
If you need a static image of a webpage or a rendered PDF landing page rather than an interactive in-page PDF viewer, ScreenshotNeo provides a website screenshot API. It removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; and its MCP server lets Claude, Cursor, or another MCP client take screenshots.
One request returns PNG, JPEG, WebP, or PDF. See the ScreenshotNeo API documentation for all options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
Every plan includes the features; the Free plan provides 1,000 screenshots per month with no card, and paid plans start at $5 for 3,000. Create a free ScreenshotNeo account.
FAQ
Is the Adobe PDF Embed API the same as embedding an iframe?
No. You load Adobe’s JavaScript SDK and initialize AdobeDC.View, which provides the documented viewer modes and controls. An iframe alone does not configure this API.
Can I use a PDF that requires a login?
Not through a browser-inaccessible URL. Use a protected delivery design that supplies the PDF through a supported file-content method or a short-lived authorized URL while preserving the viewer’s ability to fetch the bytes.
Best Value
- EDIT text, images & designs in PDF documents. ORGANIZE PDFs. Convert PDFs to Word, Excel & ePub.
- READ and Comment PDFs – Intuitive reading modes & document commenting and mark up.
- CREATE, COMBINE, SCAN and COMPRESS PDFs
- FILL forms & Digitally Sign PDFs. PROTECT and Encrypt PDFs
- LIFETIME License for 1 Windows PC or Laptop. 5GB MobiDrive Cloud Storage Included.
Does disabling download prevent copying the PDF?
No. It removes the viewer control where supported; it cannot make readable content impossible to obtain. Enforce permissions and access control at the delivery layer.
Does Adobe store annotations created by my users?
Adobe states that PDF Embed API does not store user-generated content or share it with Adobe servers. If your application needs saved or shared annotations, implement the documented callbacks and persist the data in your own system.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Frequently Asked Questions
Is the Adobe PDF Embed API free?
The viewer service is described as free, but you still need a registered Adobe client ID and a website domain configured for it.
Which mode should I use for an article page?
Use IN_LINE when pages should flow with the article; use SIZED_CONTAINER when you need a fixed box; use LIGHT_BOX for an on-demand overlay and FULL_WINDOW for a dedicated reading page.
Why does the same PDF work in a new tab but not in the viewer?
The viewer fetches the file from browser JavaScript, so missing CORS headers, redirects, or authentication can block it even when direct navigation succeeds.
The Bottom Line
Register the domain and client ID first, then initialize AdobeDC.View after viewer.js signals readiness. Select the embed mode that matches your layout, configure CORS or file delivery correctly, and test mobile limitations before release.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsQuick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

