एक frontend developer के पास 40-page brand guidelines PDF है और उसे तीन specific pages को Figma board में डालना है। एक support engineer datasheet से किसी diagram को Slack thread में paste करना चाहता है। एक lawyer signed contract page को email में attach करना चाहता है बिना पूरी file भेजे।
PDF fixed-layout documents के लिए बना है। Web, image editors और chat apps pixels के लिए बने हैं। किसी PDF page को image में convert करना इस gap को bridge करता है, लेकिन आप जो method चुनते हैं उससे output quality, file size और आपके पास रहने वाला control बदल जाता है।
Why PDF is both great and annoying for this
PDF pages को drawing commands की stream के रूप में store करता है: इस glyph को रखो, इस vector को draw करो, इस image को इस size पर render करो। इसलिए यह resolution-independent और visually consistent होता है। इसका मतलब यह भी है कि PDF कोई image नहीं है। इसे image में बदलने के लिए किसी न किसी चीज़ को इन commands को raster canvas पर render करना पड़ता है।
The good parts:
- Text और vectors किसी भी zoom level पर sharp रहते हैं क्योंकि ये mathematically describe किए जाते हैं, pixels के रूप में store नहीं होते।
- एक PDF में सैकड़ों pages एक ही file में रखे जा सकते हैं।
- Fonts, color profiles और annotations document के साथ travel करते हैं।
The hard parts:
- PDF readers rendering को लेकर disagree करते हैं। वही page Adobe Acrobat, Preview, Chrome या किसी headless library में थोड़ा अलग दिख सकता है।
- Scanned PDFs सिर्फ़ PDF containers में wrapped images होती हैं, इसलिए इन्हें "convert" करना re-encoding का मतलब है, जो artifacts या bloat add कर सकता है।
- Transparency, layers या interactive forms वाले complex PDFs अप्रत्याशित रूप से flatten हो सकते हैं।
- Page dimensions vary करती हैं। 72 DPI पर US Letter page 612 by 792 pixels का होता है। 300 DPI पर यह 2550 by 3300 का हो जाता है। अगर आप resolution specify नहीं करते, तो कुछ ऐसा मिल सकता है जो unusable हो।
What people actually convert PDFs into
ज़्यादातर conversion tasks तीन output formats में से किसी एक में आते हैं। हर format का अलग काम है।
| Format | Best for | Trade-off |
|---|---|---|
| JPG | Photos, previews, email attachments, web galleries | Lossy, लेकिन small file sizes |
| PNG | Screenshots, diagrams, anything needing transparency | Lossless, photos के लिए JPG से बड़ा |
| WebP | Modern web, apps, anywhere bandwidth matters | JPG/PNG से छोटा, थोड़ा कम universal |
फिर practical dimensions भी हैं:
- Single page vs. batch। एक page आसान है। invoices की folder के लिए automation चाहिए।
- DPI। 150 DPI thumbnails के लिए ठीक है। 300 DPI print और OCR के लिए standard है। 600 DPI overkill है जब तक आप fine details में zoom नहीं कर रहे।
- Color space। RGB screens के लिए safe है। CMYK PDFs को RGB में convert करने पर अगर conversion naive हो तो colors shift हो सकते हैं।
Picking the right approach
Right tool इस बात पर निर्भर करता है कि आप किस चीज़ को optimize कर रहे हैं।
Fast, browser-based conversion
अगर आपको सिर्फ़ किसी page को JPG, PNG या WebP में चाहिए और file इतना sensitive नहीं है कि server की ज़रूरत हो, तो browser-based converter सबसे तेज़ रास्ता है। हमारे PDF को JPG में, PDF को PNG में, और PDF को WebP में tools PDF को locally render करते हैं। File आपके device से बाहर कभी नहीं जाती, जो contracts, IDs और medical records के लिए मायने रखता है।
Command-line batch work
PDFs की folders या CI pipelines के लिए command-line tool best रहता है। आपको repeatable output, DPI control और scripting मिलती है।
In-application conversion
जब conversion किसी product का हिस्सा हो, तो usually library को call करना CLI tool को shell out करने से cleaner होता है। यह external dependency हटा देता है और वैसी error handling देता है जो बाकी codebase से मेल खाती हो।
Converting on Windows
Adobe Acrobat
- PDF open करें और उस page पर जाएँ जो चाहिए।
- File > Export to > Image > JPEG/PNG/TIFF चुनें।
- Export dialog में output resolution set करें।
- Save करें।
Acrobat reliable output देता है, लेकिन यह free नहीं है और paid SDK के बिना scriptable नहीं है।
PDF-XChange Editor
Free tier वाला हल्का alternative। File > Export > Export Pages as Images से आप format, DPI और page range चुन सकते हैं।
PowerShell with pdftoppm
Windows के लिए Poppler install करें, फिर PowerShell से pdftoppm use करें:
pdftoppm -jpeg -r 300 input.pdf output
इससे output-1.jpg, output-2.jpg आदि बनते हैं, एक image प्रति page, 300 DPI पर।
Transparent backgrounds के लिए PNG:
pdftoppm -png -r 300 input.pdf output
सिर्फ़ एक page के लिए:
pdftoppm -jpeg -r 300 -f 1 -l 1 input.pdf output
-f और -l flags first और last page set करते हैं।
PowerShell with ImageMagick
ImageMagick PDFs render कर सकता है, लेकिन Windows पर यह usually Ghostscript को delegate करता है:
magick -density 300 input.pdf[0] output.jpg
[0] का मतलब first page। इसके बिना ImageMagick multi-frame image बनाने की कोशिश कर सकता है।
Converting on macOS
Preview
- PDF को Preview में open करें।
- वह page thumbnail select करें जो चाहिए।
- File > Export चुनें, format pick करें और resolution set करें।
Preview fast और private है, लेकिन यह एक समय में एक page ही handle करता है।
Terminal with sips
macOS में sips included होता है, लेकिन यह PDF text को अच्छे से render नहीं करता। इसे सिर्फ़ उन PDFs के लिए use करें जो पहले से bitmaps हैं:
sips -s format jpeg input.pdf --out output.jpg
Real PDF rendering के लिए Homebrew से Poppler install करें:
brew install poppler
pdftoppm -jpeg -r 300 input.pdf output
Automator quick action
आप Automator में एक right-click service बना सकते हैं जो किसी भी selected PDF पर pdftoppm चलाए। यह useful है अगर आप pages को regularly convert करते हैं और flags याद रखना नहीं चाहते।
Converting on Linux
Linux पर usually Poppler best choice होता है।
sudo apt install poppler-utils
pdftoppm -jpeg -r 300 input.pdf output
pdftoppm -png -r 300 input.pdf output
WebP output के लिए, पहले PNG में convert करें फिर cwebp use करें:
pdftoppm -png -r 300 input.pdf temp
cwebp temp-1.png -o output.webp
Batch conversion
अगर आपके पास PDFs की folder है और हर PDF की पहली page से एक image चाहिए:
for f in *.pdf; do
pdftoppm -jpeg -r 300 -f 1 -l 1 "$f" "${f%.pdf}"
done
ImageMagick
ImageMagick Linux पर काम करता है लेकिन PDFs के लिए अक्सर slower होता है क्योंकि यह Ghostscript के through rasterize करता है:
magick -density 300 input.pdf[0] -quality 90 output.jpg
-density PDF read करने से पहले set करें। इसे बाद में रखने से कोई फ़ायदा नहीं होगा।
Converting with code
TypeScript / Node.js
pdfjs-dist से pages को canvas पर render करें, फिर image data में export करें।
import * as pdfjsLib from "pdfjs-dist"
import { createCanvas } from "canvas"
import fs from "fs"
async function pdfPageToPng(
pdfPath: string,
pageNumber: number,
outputPath: string,
scale: number = 2
) {
const data = new Uint8Array(fs.readFileSync(pdfPath))
const pdf = await pdfjsLib.getDocument({ data }).promise
const page = await pdf.getPage(pageNumber)
const viewport = page.getViewport({ scale })
const canvas = createCanvas(viewport.width, viewport.height)
const context = canvas.getContext("2d")
await page.render({ canvasContext: context, viewport }).promise
const buffer = canvas.toBuffer("image/png")
fs.writeFileSync(outputPath, buffer)
await pdf.destroy()
}
await pdfPageToPng("input.pdf", 1, "output.png", 2)
scale value roughly DPI से map होता है: 72 DPI पर 2 scale 144 DPI output देता है। 300 DPI के लिए लगभग 4.17 scale use करें।
Browser में, हमारा PDF को PNG में converter यही render-to-canvas step करता है बिना file कहीं भेजे।
PHP
PHP pdftoppm को shell out कर सकता है या spatie/pdf-to-image जैसी libraries use कर सकता है, जो ImageMagick को wrap करती है:
<?php
use Spatie\PdfToImage\Pdf;
$pdf = new Pdf('input.pdf');
$pdf->setPage(1)
->setOutputFormat('png')
->saveImage('output.png');
अगर dependency add नहीं करना चाहते, तो सीधे Poppler call करें:
<?php
function pdfPageToPng(string $input, int $page, string $output, int $dpi = 300): void {
$cmd = sprintf(
'pdftoppm -png -r %d -f %d -l %d %s %s',
$dpi,
$page,
$page,
escapeshellarg($input),
escapeshellarg($output)
);
exec($cmd);
}
pdfPageToPng('input.pdf', 1, 'output', 300);
यह output-1.png लिखता है। Production में use करने से पहले अपनी खुद की error checking add करें।
Go
Go में built-in PDF renderer नहीं है, लेकिन github.com/gen2brain/go-fitz MuPDF को wrap करता है:
package main
import (
"image/jpeg"
"os"
"github.com/gen2brain/go-fitz"
)
func main() {
doc, err := fitz.New("input.pdf")
if err != nil {
panic(err)
}
defer doc.Close()
img, err := doc.Image(0)
if err != nil {
panic(err)
}
out, err := os.Create("output.jpg")
if err != nil {
panic(err)
}
defer out.Close()
if err := jpeg.Encode(out, img, &jpeg.Options{Quality: 90}); err != nil {
panic(err)
}
}
go-fitz PDF की default rendering resolution पर images return करता है। अगर DPI control चाहिए तो library docs check करें।
Java
Java PDF work के लिए Apache PDFBox standard choice है।
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class PdfToImage {
public static void main(String[] args) throws IOException {
try (PDDocument document = PDDocument.load(new File("input.pdf"))) {
PDFRenderer renderer = new PDFRenderer(document);
BufferedImage image = renderer.renderImageWithDPI(0, 300);
ImageIO.write(image, "png", new File("output.png"));
}
}
}
Maven dependency:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.2</version>
</dependency>
renderImageWithDPI zero-based page index और DPI value लेता है।
Python
Python में pymupdf या pdf2image से यह आसान होता है।
pymupdf के साथ:
import fitz
doc = fitz.open("input.pdf")
page = doc[0]
mat = fitz.Matrix(2, 2)
pix = page.get_pixmap(matrix=mat)
pix.save("output.png")
Matrix scale control करता है। 72 DPI PDF से roughly 300 DPI के लिए fitz.Matrix(300/72, 300/72) use करें।
pdf2image के साथ, जो Poppler को wrap करता है:
from pdf2image import convert_from_path
images = convert_from_path("input.pdf", dpi=300, first_page=1, last_page=1)
images[0].save("output.jpg", "JPEG", quality=90)
pdf2image convenient है लेकिन इसके लिए system पर Poppler installed होना चाहिए।
Common pitfalls
- DPI भूल जाना। Default PDF rendering अक्सर 72 या 96 DPI होता है। इस resolution पर text fuzzy दिखता है। अगर quality matter करती है तो हमेशा output DPI specify करें।
- Color space ignore करना। बिना profile के CMYK PDF को RGB में convert करने पर colors washed out या oversaturated दिख सकते हैं।
- Scanned PDFs को re-encode करना। अगर PDF पहले से ही JPEG scan है, तो उसे PNG में convert करने से खोया हुआ detail वापस नहीं आएगा। सिर्फ़ file बड़ी हो जाएगी।
- Font substitution। Headless servers में कभी-कभी PDF में embedded fonts नहीं होते। Renderer substitute करता है और layout break हो जाता है। PDF बनाते समय fonts embed करना इसे रोकता है।
- Page numbering off by one। Code APIs usually zero-based page indexes use करते हैं। Command-line tools usually one-based।
What to use where
- One-off personal use: macOS पर Preview, Windows पर कोई PDF reader, या browser converter।
- Batch processing on a server:
pdftoppmयाpdf2image। - Inside a product: Java के लिए Apache PDFBox, Python के लिए
pymupdf, TypeScript के लिएpdfjs-dist। - Privacy-sensitive files: Browser-based tool use करें ताकि PDF device से बाहर न जाए।
अगर आप कुछ install किए बिना सबसे तेज़ रास्ता चाहते हैं, तो हमारे PDF को JPG में, PDF को PNG में, और PDF को WebP में converters पूरी तरह browser में चलते हैं।



