How to Convert Multiple Web Pages to a Single PDF
Learn how to turn a list of web pages or a multi-level site into one ordered, reviewable PDF.
Short answer: decide whether you have a fixed list of URLs or want to crawl linked pages. For a fixed list, convert each page to PDF, check the output, then merge the files in the required order. For a site with linked sections, use a crawler such as Acrobat’s multi-level web capture, restrict its scope, and inspect the resulting page sequence before sharing.
This guide covers browser printing, Acrobat desktop, adding pages to an existing PDF, merging separate files, automation, layout problems, troubleshooting, and a ScreenshotNeo API workflow.
1. Choose the right workflow
| What you have | Best approach | Main decision |
|---|---|---|
| A short, known list of URLs | Save or print each page as PDF, then merge | Preserve URL order and verify page breaks |
| URLs that must be inserted into an existing PDF | Acrobat’s Insert from web page command | Whether you need the pages inside a specific document |
| A linked section or whole website | Acrobat desktop multi-level capture | Crawl depth and same-path or same-server limits |
| Existing PDF files | Any PDF combine or merge tool | Reorder, remove, or rotate pages before saving |
A list of selected pages and a website crawl are different jobs. A list gives you explicit order and scope. A crawl follows links and can collect pages you did not intend to include, so set a depth and a boundary before starting.
2. Convert a fixed list with a browser
- Put the URLs in the desired order in a text file or spreadsheet.
- Open the first URL in your browser.
- Use the browser’s print command and choose Save as PDF or the platform’s PDF printer.
- Inspect print preview. Check page breaks, headers, navigation, advertisements, and missing images.
- Save with a sortable name such as
001-introduction.pdf. - Repeat for every URL.
- Merge the files in filename order, then review the combined document.
Browser print dialogs differ by operating system and browser version. The preview is the reliable place to adjust margins, scale, orientation, background graphics, and page ranges. Adobe’s browser guidance describes converting HTML pages and combining the resulting PDFs, while Firefox documents printing and PDF page operations in its built-in viewer.
Keep the order deterministic
- Use zero-padded numbers:
001,002, and so on. - Keep the original URL list next to the generated files.
- Do not rely on download completion order.
- After merging, spot-check the first page of every source document.
3. Capture multiple levels of a website with Acrobat desktop
Acrobat desktop can create a PDF from a web page and capture multiple levels of links. Adobe’s current help describes the following flow:
- Open Acrobat.
- Select Create, then Web page.
- Enter a URL or browse to an HTML file.
- Select Capture multiple levels.
- Choose the crawl depth.
- Use Stay on same path or Stay on same server when you need to limit scope.
- Start the capture and inspect the generated PDF.
Use a shallow depth first. A depth of one generally means the starting page and links immediately below it; the exact result depends on how the site links its pages and how your Acrobat version interprets levels. Restricting by path is useful for a documentation section. Restricting by server can include more of the same site, so review the output for unrelated areas.
4. Insert web pages into an existing PDF
When the destination PDF already exists, Acrobat can insert an unlinked URL directly:
- Open the target PDF.
- Choose Edit > Organize pages > Insert > From web page.
- Enter the URL and confirm the insertion.
- Save the result as a new file if the source is read-only.
Acrobat also documents appending a linked page from an open PDF. After insertion, use the Organize Pages view to move, delete, or rotate pages, then save the final copy.
5. Merge separate PDFs and verify the result
- Open a PDF combine or merge function.
- Add the files in the intended order.
- Preview thumbnails before creating the final file.
- Move, delete, or rotate pages as needed.
- Save a new final PDF.
- Open the final document in a separate viewer and check its sequence.
Adobe’s online merge tool supports combining PDFs and organizing pages. If the pages contain confidential information, check the current service terms and privacy details before uploading them. Desktop tools keep the source files on your machine.
6. Automate page capture with ScreenshotNeo
If you need repeatable captures, a browser setup for every page adds maintenance: rendering, cookie banners, lazy images, popups, and failed loads all need handling. ScreenshotNeo is a website screenshot API and MCP server. It can return a screenshot or PDF from one GET request, and its capture options include full-page rendering, waits, custom CSS and JavaScript, headers, cookies, user agents, geolocation, caching, and PDF paper settings.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" \
-d access_key=YOUR_API_KEY \
--data-urlencode url=https://example.com \
-d format=pdf \
-o page.pdf
Python
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={
"access_key": "YOUR_API_KEY",
"url": "https://example.com",
"format": "pdf",
},
timeout=90,
)
r.raise_for_status()
open("page.pdf", "wb").write(r.content)
Node.js
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://example.com',
format: 'pdf'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('page.pdf', Buffer.from(await res.arrayBuffer()));
See the ScreenshotNeo documentation for the current request options and PDF configuration. To produce one ordered document from several URLs, keep the URL list in order, request one PDF per URL, then merge those files with your preferred PDF library or desktop tool.
Example: ordered batch in Python
from pathlib import Path
import requests
urls = [
"https://example.com/intro",
"https://example.com/setup",
"https://example.com/reference",
]
out = Path("pages")
out.mkdir(exist_ok=True)
for number, url in enumerate(urls, start=1):
response = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": url, "format": "pdf"},
timeout=90,
)
response.raise_for_status()
(out / f"{number:03d}.pdf").write_bytes(response.content)
Merge pages/001.pdf, pages/002.pdf, and pages/003.pdf in that order. The API call handles capture; PDF merging remains a separate step.
7. Or skip the browser setup
Use one ScreenshotNeo request for each page, with PDF output enabled:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -d format=pdf -o stripe.pdf
- Cookie and consent banners, newsletter popups, and chat widgets are removed before the shot.
- Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed; response headers identify the page verdict and billing status.
- An MCP server lets AI agents such as Claude and Cursor take screenshots and capture PDFs.
- The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Create a free ScreenshotNeo account to start.
8. Options that affect PDF output
| Requirement | Useful setting | Reason |
|---|---|---|
| Long article or documentation page | Full-page capture and lazy-image loading | Includes content below the initial viewport |
| Only one section | Capture an element by CSS selector | Excludes surrounding navigation |
| Dark or light presentation | Dark mode or custom CSS | Controls the rendered appearance |
| Content that appears late | Wait for a selector, delay, or network idle | Allows client-side rendering to finish |
| Authenticated page | Custom headers, cookies, user agent, or Authorization | Supplies request context |
| Privacy or regional content | Timezone and geolocation | Matches the intended locale |
| Repeat requests | Cache with a chosen TTL | Reduces repeated rendering work |
| Print layout | PDF paper size, margins, landscape, and page ranges | Controls pagination and page selection |
9. Common problems and fixes
The pages are in the wrong order
Cause: files were merged in download order or alphabetically without numbering. Fix: create a numbered manifest, use zero-padded filenames, and reorder thumbnails before saving.
Cookie banners or chat boxes cover content
Cause: the page rendered its consent or widget UI before capture. Fix: accept or dismiss the banner in a browser workflow, hide selectors with CSS where supported, or use ScreenshotNeo’s consent and cleanup behavior.
Images are missing
Cause: lazy loading, blocked resources, or capture started before images appeared. Fix: use full-page capture, wait for a selector or network idle, and check whether the site requires authentication.
The PDF has unexpected pages
Cause: a multi-level crawl followed links outside the intended section. Fix: reduce crawl depth and enable same-path or same-server limits, then remove unwanted pages.
Only part of a page appears
Cause: the print range, viewport, or capture target was limited. Fix: select all pages in print preview, use full-page capture, or capture the correct CSS element.
The request times out
Cause: slow scripts, blocked resources, or a page that never reaches an idle state. Fix: set a sensible wait condition, block unnecessary resource types, and retry. ScreenshotNeo reports failed loads and timeouts as non-billable outcomes.
Authenticated content is blank
Cause: the request lacks session cookies or authorization headers. Fix: provide the required cookies, custom headers, or Authorization value and confirm that the credentials have access to the URL.
Links or fonts look different
Cause: print CSS, external font loading, or a browser’s print settings. Fix: compare screen and print previews, wait for fonts, and use custom CSS when the capture method supports it.
10. Performance, reliability, and cost
- Performance: capture only the pages you need, use a shallow crawl, block ads and trackers, and enable caching for unchanged pages.
- Reliability: keep the URL manifest, save intermediate PDFs, retry transient failures, and inspect the final page count and order.
- Large jobs: process URLs in batches and preserve sequence numbers. ScreenshotNeo supports bulk capture for up to 100 URLs per call and asynchronous jobs with signed webhooks.
- Cost: browser printing has no API usage charge, while an API adds service cost. ScreenshotNeo bills only clean shots; bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing. Use the usage API and
X-Page-Verdict/X-Billedresponse headers to reconcile results.
11. Final review checklist
- Every intended URL appears once.
- The sequence matches the source list or crawl plan.
- Page breaks do not split headings or tables unexpectedly.
- Images, fonts, and authenticated sections are present.
- Unwanted navigation, ads, and overlays are removed.
- Links work if the PDF must remain navigable.
- The final file opens in a second PDF viewer.
- Confidential source pages were handled within an approved storage policy.
12. FAQ
Can I convert an entire website automatically?
Yes, but a website crawl needs a depth and scope limit. Acrobat desktop provides multi-level capture with same-path and same-server restrictions.
Should I merge PDFs before or after reviewing them?
Review individual outputs first when layout matters, then merge and perform a second sequence check.
Can I add a web page to a read-only PDF?
Acrobat can create a new PDF when the target document is read-only.
Does a screenshot API replace PDF merging?
No. It renders each URL; you still combine the returned PDFs into the final ordered document.
What if the site changes between captures?
Record the capture time, keep the URL manifest, and use caching or a controlled batch so the source state is as consistent as possible.


