One-page report
- Input
- sample.pdf, one Letter page of text and a table, 21,438 bytes.
- Output
- 1224×1584 lossy WebP, 36,034 bytes, in 80 ms. Text and rules were crisp; the file was 48% of the PNG render.
PDF → WebP renders each page to a lossy WebP that is about half the size of the equivalent PNG, which suits web previews and thumbnails.
From real runs
| Element | Result | What happens |
|---|---|---|
| Page pixels | Changed | A Letter page renders to 1224×1584 pixels at the default 144 DPI and is encoded as lossy VP8 at quality 90. |
| File size | Changed | The one-page sample produced a 36,034-byte WebP against 75,667 bytes for the PNG of the same render. |
| Small text | Changed | Body text stayed readable at quality 90; at lower quality thin serifs pick up faint ringing that the PNG route never shows. |
| Selectable text | Lost | The WebP is a picture of the page; words cannot be selected, searched or copied. |
| Transparency | Changed | Pages are opaque white by default; transparent=true wrote a 28,596-byte RGBA WebP whose empty page area is transparent. |
| Multiple pages | Changed | Each page becomes its own WebP; a PDF with more than one page downloads as a ZIP named after the source file. |
| Vector detail | Changed | Lines and logos are rasterized at the chosen DPI and no longer scale; zoom past 100% shows pixels. |
A Letter page renders to 1224×1584 pixels at the default 144 DPI and is encoded as lossy VP8 at quality 90.
The one-page sample produced a 36,034-byte WebP against 75,667 bytes for the PNG of the same render.
Body text stayed readable at quality 90; at lower quality thin serifs pick up faint ringing that the PNG route never shows.
The WebP is a picture of the page; words cannot be selected, searched or copied.
Pages are opaque white by default; transparent=true wrote a 28,596-byte RGBA WebP whose empty page area is transparent.
Each page becomes its own WebP; a PDF with more than one page downloads as a ZIP named after the source file.
Lines and logos are rasterized at the chosen DPI and no longer scale; zoom past 100% shows pixels.
We converted our PDF sample (21 KB) with Image engine on 2026-09-11. It took 80 ms and produced a 35 KB WebP file, 1.7× larger than the input. The engine raised 1 warning, listed below.
Input · sample.pdf · 21 KB
PDF 1.7, 1 page, selectable text (LibertinusSerif-Bold-Identity-H, LibertinusSerif-Bold, LibertinusSerif-Regular-Identity-H, LibertinusSerif-Regular), 0 image objects
Output · sample.webp · 35 KB
1224 × 1584 px, lossy VP8
For a scanned PDF the WebP is a re-compression of a compression; keep quality at 90 or above and match dpi to the scan resolution. When the words matter, PDF → TXT with AI Deep Read reads the pages for 1 credit each instead of producing another picture.
PyMuPDF and Pillow
import fitz, io
from PIL import Image
for i, page in enumerate(fitz.open("in.pdf")):
img = Image.open(io.BytesIO(page.get_pixmap(dpi=144).tobytes("png")))
img.save(f"page-{i + 1}.webp", quality=90)Pillow needs libwebp; pass lossless=True for exact pixels at roughly PNG size.
pdftoppm and cwebp
pdftoppm -png -r 144 in.pdf page && for f in page-*.png; do cwebp -q 90 "$f" -o "$(basename "$f" .png).webp"; doneTwo tools and an intermediate PNG per page.
The HTTP API and the MCP server run the exact engine this page uses (Image engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=pdf&to=webp.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.pdf" -F "from=pdf" -F "to=webp" \
-F 'options={"dpi":96}' \
--output output.webp| Key | Applies to | Type | Default |
|---|---|---|---|
| dpi | Reading PDF | number | 96 |
| width | Writing WebP | number | 0 |
| height | Writing WebP | number | 0 |
| fit | Writing WebP | contain · cover · fill | contain |
| quality | Writing WebP | number | 90 |
| background | Writing WebP | string | #ffffff |
| stripMetadata | Writing WebP | boolean | true |
About half for a typical text page: the sample rendered to 36,034 bytes as WebP and 75,667 bytes as PNG at the same 144 DPI.
No. This route writes lossy VP8 at the quality you choose, 90 by default. Use PDF → PNG when every pixel must match the render.
You receive a ZIP with one WebP per page, named sample-page-1.webp onward. Limit the count with max_pages for previews.