Converting Word documents to PDF is a common requirement—contracts, reports, proposals need to be shared as PDFs for consistent viewing. Here's how to do it programmatically without Microsoft Office installed.
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf("contract.docx");
pdf.SaveAs("contract.pdf");
Three lines, no Office dependency. The Word document converts with formatting intact.
Why Convert DOCX to PDF?
Word documents are editable—that's a feature, but also a problem when you need:
- Fixed layouts — PDFs render identically everywhere
- Secure distribution — Recipients can't easily modify content
- Print-ready output — What you see is what prints
- Compliance — Many industries require PDF for records
- Web-friendly — Browsers display PDFs natively
PDF is the finish line for document workflows. DOCX is the authoring format.
How Do I Convert a DOCX File?
Direct file conversion:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new DocxToPdfRenderer();
// From file path
var pdf = renderer.RenderDocxAsPdf("report.docx");
pdf.SaveAs("report.pdf");
// Full path
var pdf2 = renderer.RenderDocxAsPdf(@"C:\Documents\quarterly-report.docx");
pdf2.SaveAs(@"C:\PDFs\quarterly-report.pdf");
The renderer reads the DOCX, interprets formatting, and produces a PDF.
How Do I Convert from a Byte Array?
When DOCX data comes from a database or upload:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
// From upload, database, or API
byte[] docxBytes = await GetDocxFromStorage(documentId);
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf(docxBytes);
// Return as PDF bytes
byte[] pdfBytes = pdf.BinaryData;
// Or save to file
pdf.SaveAs("converted.pdf");
Byte array input/output enables in-memory processing without touching the file system.
How Do I Convert from a Stream?
Stream-based conversion for large files:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
using var docxStream = File.OpenRead("large-document.docx");
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf(docxStream);
// Get result as stream
Stream pdfStream = pdf.Stream;
// Or save directly
pdf.SaveAs("large-document.pdf");
Streams work well with web uploads and cloud storage downloads.
What Formatting Gets Preserved?
The converter handles standard Word features:
| Feature | Preserved |
|---|---|
| Text styles (bold, italic) | Yes |
| Fonts and sizes | Yes |
| Paragraphs and spacing | Yes |
| Tables | Yes |
| Images | Yes |
| Headers and footers | Yes |
| Page breaks | Yes |
| Bullet and numbered lists | Yes |
| Colors and highlighting | Yes |
Complex documents with standard formatting convert reliably.
How Do I Batch Convert Multiple Files?
Process entire folders:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var inputFolder = @"C:\Documents\Word";
var outputFolder = @"C:\Documents\PDF";
Directory.CreateDirectory(outputFolder);
var docxFiles = Directory.GetFiles(inputFolder, "*.docx");
var renderer = new DocxToPdfRenderer();
foreach (var docxFile in docxFiles)
{
var fileName = Path.GetFileNameWithoutExtension(docxFile);
var pdf = renderer.RenderDocxAsPdf(docxFile);
pdf.SaveAs(Path.Combine(outputFolder, $"{fileName}.pdf"));
pdf.Dispose();
Console.WriteLine($"Converted: {fileName}");
}
Mass conversion for document migration or archival projects.
How Do I Add Security After Conversion?
Secure PDFs with passwords and permissions:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf("confidential.docx");
// Add password protection
pdf.SecuritySettings.OwnerPassword = "admin-password";
pdf.SecuritySettings.UserPassword = "reader-password";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("confidential-secured.pdf");
Word documents have no built-in security. PDF conversion is where you add protection.
How Do I Add Headers and Footers?
Overlay consistent branding:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf("report.docx");
// Add header
pdf.AddHtmlHeaders(new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
CONFIDENTIAL | Company Name
</div>",
DrawDividerLine = true
});
// Add footer with [page numbers](https://ironpdf.com/blog/compare-to-other-components/questpdf-add-page-number-to-pdf/)
pdf.AddHtmlFooters(new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>"
});
pdf.SaveAs("report-with-headers.pdf");
Add consistent headers/footers regardless of what the original Word doc contained.
How Do I Merge Multiple DOCX Files?
Combine documents into a single PDF:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new DocxToPdfRenderer();
var documents = new[] { "intro.docx", "chapter1.docx", "chapter2.docx", "appendix.docx" };
var pdfs = new List<PdfDocument>();
foreach (var doc in documents)
{
pdfs.Add(renderer.RenderDocxAsPdf(doc));
}
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("complete-manual.pdf");
// Cleanup
foreach (var pdf in pdfs) pdf.Dispose();
merged.Dispose();
Multiple Word files become one cohesive PDF document.
How Do I Handle Conversion in ASP.NET?
Web-based document conversion:
using IronPdf;
using Microsoft.AspNetCore.Mvc;
// Install via NuGet: Install-Package IronPdf
[ApiController]
[Route("api/[controller]")]
public class DocumentController : ControllerBase
{
[HttpPost("convert")]
public IActionResult ConvertDocxToPdf(IFormFile file)
{
if (file == null || !file.FileName.EndsWith(".docx"))
return BadRequest("Please upload a DOCX file");
using var stream = file.OpenReadStream();
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf(stream);
return File(pdf.BinaryData, "application/pdf",
Path.ChangeExtension(file.FileName, ".pdf"));
}
}
Users upload Word files, receive PDF downloads.
How Do I Handle Large Documents?
Optimize memory for big files:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
public async Task ConvertLargeDocument(string inputPath, string outputPath)
{
// Use file stream to avoid loading entire file into memory
using var inputStream = new FileStream(inputPath,
FileMode.Open, FileAccess.Read, FileShare.Read,
bufferSize: 4096, useAsync: true);
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf(inputStream);
// Save directly (doesn't hold entire PDF in memory)
pdf.SaveAs(outputPath);
pdf.Dispose();
}
Stream-based handling manages memory better than loading entire files.
How Do I Compress the Output?
Reduce PDF file size:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf("image-heavy-document.docx");
// Compress embedded images (quality 1-100)
pdf.CompressImages(60);
Console.WriteLine($"File size: {pdf.BinaryData.Length / 1024} KB");
pdf.SaveAs("compressed-output.pdf");
Image-heavy Word documents benefit from compression.
How Do I Handle Errors?
Robust conversion with error handling:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
public bool TryConvertDocx(string inputPath, string outputPath, out string error)
{
error = null;
try
{
if (!File.Exists(inputPath))
{
error = "Input file not found";
return false;
}
var renderer = new DocxToPdfRenderer();
var pdf = renderer.RenderDocxAsPdf(inputPath);
pdf.SaveAs(outputPath);
pdf.Dispose();
return true;
}
catch (Exception ex)
{
error = $"Conversion failed: {ex.Message}";
return false;
}
}
Handle file access errors and conversion failures gracefully.
What About DOC (Legacy) Files?
Older .doc format requires different handling:
using IronPdf;
// Install via NuGet: Install-Package IronPdf
// DOCX (Office 2007+) converts directly
var pdf = renderer.RenderDocxAsPdf("modern.docx");
// For .doc files (Office 97-2003), consider:
// 1. Pre-convert to DOCX using another tool
// 2. Use Word Interop (requires Office installed)
// 3. Use a service that supports legacy formats
Modern libraries focus on DOCX (XML-based). Legacy .doc files may need pre-conversion.
Quick Reference
| Task | Code |
|---|---|
| Convert file | renderer.RenderDocxAsPdf("file.docx") |
| From bytes | renderer.RenderDocxAsPdf(byteArray) |
| From stream | renderer.RenderDocxAsPdf(stream) |
| Add password | pdf.SecuritySettings.UserPassword = "pass" |
| Compress | pdf.CompressImages(60) |
DOCX to PDF conversion bridges authoring and distribution. Write in Word, share as PDF.
For more conversion options and features, see the IronPDF DOCX conversion documentation.
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)