Converting responsive websites to PDF is tricky. The same HTML that looks perfect on desktop, mobile, and tablet needs to fit on a fixed-size PDF page. I've generated PDFs that cut off content, squeezed text into illegibility, or left massive white margins.
The solution is viewport and zoom control. You tell the PDF renderer what screen size to simulate and how much to scale the content.
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new [ChromePdfRenderer](https://ironpdf.com/blog/videos/how-to-render-webgl-sites-to-pdf-in-csharp-ironpdf/)();
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.Zoom = 150; // 150% zoom
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
The viewport width sets the virtual screen size (1280 pixels), and zoom scales the content (150% = 1.5x larger).
What's the Difference Between Viewport and Zoom?
Viewport: The virtual browser window size. Responsive CSS uses this to determine layout (desktop vs mobile).
Zoom: How much to scale the rendered content. Like pinch-to-zoom in a browser.
A 1280px viewport renders the desktop version of a responsive site. A 480px viewport renders the mobile version. Zoom scales whichever version you rendered.
I built a report generator that converted dashboard pages to PDF. The dashboards used responsive CSS with breakpoints at 768px and 1280px. Setting the viewport to 1280px ensured we got the desktop layout, and zoom 120% made text readable in print.
How Do I Set the Viewport Width?
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ViewPortWidth = 1920; // Simulate 1920px screen
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("wide.pdf");
Common viewport widths:
- 320-480: Mobile phones
- 768-1024: Tablets
- 1280-1920: Desktops
- 2560+: High-DPI displays
Match the viewport to the layout you want. If your site has a mobile version and a desktop version, pick the viewport that triggers the right CSS.
How Do I Control Zoom?
Zoom is a percentage (100 = 100%):
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Zoom = 80; // 80% = smaller
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("zoomed-out.pdf");
Zoom values:
- 100: No scaling (default)
- 80-90: Fit more content on page
- 120-150: Enlarge text for readability
- 200+: Magnify for accessibility
I use 80-90% zoom for content-heavy pages where I want to fit more per page. For documents meant for printing, I use 120-130% to ensure text is readable.
Can I Combine Viewport and Zoom?
Yes, and that's usually what you want:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ViewPortWidth = 1280; // Desktop layout
renderer.RenderingOptions.Zoom = 125; // Enlarge 25%
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
This renders the desktop version (1280px) and scales it to 125% for better readability.
What Are the Preset Rendering Modes?
IronPDF has five preset modes:
1. Chrome Default Rendering
renderer.RenderingOptions.PaperFit.UseChromeDefaultRendering();
Mimics Chrome's print dialog. Good for general web pages.
2. Responsive CSS Rendering
renderer.RenderingOptions.PaperFit.UseResponsiveCssRendering(1280);
Scales content to fit the paper size based on viewport width. I use this for responsive sites.
3. Scaled Rendering
renderer.RenderingOptions.PaperFit.UseScaledRendering(150);
Manual zoom control (150 = 150%). Use when you need exact scaling.
4. Fit to Page
renderer.RenderingOptions.PaperFit.UseFitToPageRendering();
Automatically scales content to fit the page width. Good for unknown content sizes.
5. Continuous Feed
renderer.RenderingOptions.PaperFit.UseContinuousFeedRendering(800, 10);
Creates a single-page PDF with custom width and margins. Perfect for receipts or tickets.
I use Responsive CSS for most reports, Fit to Page for user-generated content, and Continuous Feed for receipts.
How Do I Render Mobile Layouts?
Set a narrow viewport:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ViewPortWidth = 375; // iPhone size
renderer.RenderingOptions.Zoom = 100;
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("mobile.pdf");
This triggers mobile CSS breakpoints. The PDF shows the mobile layout.
I built a feature where users could preview their website's mobile version as PDF. We set the viewport to 375px (iPhone) or 768px (iPad) based on user selection.
What If My Content Is Too Wide for the Page?
Three options:
Option 1: Reduce zoom
renderer.RenderingOptions.Zoom = 80; // Fit more
Option 2: Increase viewport width
renderer.RenderingOptions.ViewPortWidth = 1920; // Wider layout
Option 3: Use Fit to Page
renderer.RenderingOptions.PaperFit.UseFitToPageRendering();
Fit to Page automatically scales to fit. I use this when I don't know the content size in advance.
How Do I Control Paper Size?
Combine viewport/zoom with paper size:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.Zoom = 100;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("a4.pdf");
Common paper sizes:
- Letter: 8.5" x 11" (US standard)
- A4: 210mm x 297mm (International)
- Legal: 8.5" x 14" (US legal documents)
Match the paper size to your target. In the US, use Letter. Elsewhere, use A4.
Can I Render Different Pages with Different Settings?
Yes, render separately and merge:
var renderer1 = new ChromePdfRenderer();
renderer1.RenderingOptions.ViewPortWidth = 1280;
var page1 = renderer1.RenderHtmlAsPdf("<h1>Desktop Layout</h1>");
var renderer2 = new ChromePdfRenderer();
renderer2.RenderingOptions.ViewPortWidth = 375;
var page2 = renderer2.RenderHtmlAsPdf("<h1>Mobile Layout</h1>");
var merged = PdfDocument.Merge(page1, page2);
merged.SaveAs("mixed.pdf");
I use this for reports that combine desktop dashboards (wide viewport) with mobile screenshots (narrow viewport).
How Do I Test Viewport and Zoom Settings?
Generate PDFs at different settings and compare:
foreach (int viewport in new[] { 768, 1024, 1280, 1920 })
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ViewPortWidth = viewport;
renderer.RenderingOptions.Zoom = 100;
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs($"viewport-{viewport}.pdf");
}
Open them side-by-side and pick what works. I do this once per template, then hardcode the values.
What About High-DPI Displays?
Set a larger viewport:
renderer.RenderingOptions.ViewPortWidth = 2560; // 4K display
renderer.RenderingOptions.Zoom = 100;
This simulates a high-resolution screen. Images and text render sharper.
For Retina displays, I sometimes use 2x the standard viewport (e.g., 2560 instead of 1280) to get crisper output.
Quick Reference
| Setting | Purpose | Common Values |
|---|---|---|
| ViewPortWidth | Virtual screen width | 375 (mobile), 768 (tablet), 1280 (desktop) |
| Zoom | Content scaling | 80 (fit more), 100 (default), 120 (enlarge) |
| Chrome Default | General web pages | UseChromeDefaultRendering() |
| Responsive CSS | Responsive sites | UseResponsiveCssRendering(1280) |
| Fit to Page | Unknown content size | UseFitToPageRendering() |
| Continuous Feed | Receipts/tickets | UseContinuousFeedRendering(width, margin) |
Key Principles:
- Viewport determines layout (mobile vs desktop CSS)
- Zoom scales the rendered content
- Use Responsive CSS for responsive sites
- Use Fit to Page when content size is unknown
- Test multiple viewport/zoom combinations before deploying
The complete viewport and zoom guide covers edge cases like custom paper sizes and landscape orientation.
Written by Jacob Mellor, CTO at Iron Software. Jacob created IronPDF and leads a team of 50+ engineers building .NET document processing libraries.
Top comments (0)