DEV Community

IronSoftware
IronSoftware

Posted on

BitMiracle Docotic.PDF vs IronPDF: side by side for .NET teams in 2026

A development team evaluates BitMiracle Docotic.PDF for a document generation project. The documentation looks comprehensive, the API clean, and the GitHub samples plentiful. They install the core package and start building. Three hours in, they discover they need HTML-to-PDF conversion. The documentation mentions an HtmlToPdf add-on, so they install it. Then they hit the critical discovery: Docotic.PDF requires a license key to function—even in development. Without a valid license, every operation returns an error. The free 31-day trial requires providing contact information to receive a key via email.

This checklist discovery—core library ✓, add-on package ✓, license configuration ✗—surfaces a pattern with Docotic.PDF: comprehensive feature list, modular architecture, but operational complexity in the details.

Understanding IronPDF

IronPDF consolidates HTML-to-PDF conversion in a single package with optional trial licensing. Where Docotic.PDF separates core PDF manipulation from HTML rendering via add-ons, IronPDF integrates both. The architectural choice affects both simplicity and specialization: IronPDF focuses deeply on HTML rendering quality, Docotic.PDF offers broader PDF manipulation features with HTML as one input method among many.

The ChromePdfRenderer class works without configuration for development and testing, adding a watermark until licensed. Docotic.PDF won't execute any PDF operations without a valid license key, including trial keys that must be requested.

Key Limitations of Docotic.PDF

Product Status: ✓ Active (v9.8 August 2025). ✓ Consistent releases. ✗ Documentation scattered across website, NuGet, GitHub. ✗ HTML-to-PDF examples minimal compared to PDF manipulation examples. ✓ .NET 8 support added recently.

Missing Capabilities: ✓ HTML-to-PDF via Chromium add-on. ✗ Add-on requires separate package installation. ✗ License key required for all operations (including dev/test). ✗ No built-in async variants for HTML operations. ✗ Header/footer HTML templating less documented than text-based headers. ✗ URL authentication options not clearly documented.

Technical Issues: ✗ License validation errors if key not set correctly—no PDF operations work. ✗ HtmlToPdf add-on initialization not obvious from core documentation. ✗ Async patterns for HTML operations unclear—may require manual Task wrapping. ✗ Error messages generic when license issues occur. ✗ Trial license requires email request—not instant. ✗ System.Drawing.Common dependency in Gdi add-on not recommended for Linux/macOS per Microsoft docs.

Support Status: ✓ Free and paid licenses available. ✓ GitHub repository with samples. ✓ Responsive to issues (based on GitHub activity). ✗ HTML-to-PDF specific guidance sparse. ✗ No clear migration guides from other libraries. ✓ Active forum presence by maintainers.

Architecture Problems: ✗ Modular design requires understanding which add-on provides which feature. ✗ HtmlToPdf add-on separate from core—two packages to manage. ✗ License key must be set before any operations—no graceful degradation for trial. ✗ PDF manipulation features excellent but not needed for HTML-to-PDF workflows. ✓ 100% managed code (no native dependencies) is architectural strength. ✗ Async support for HTML rendering unclear from documentation.

License Requirement Checklist:

  • ✗ Cannot create PDFs without license key
  • ✗ Cannot read PDFs without license key
  • ✗ Trial license requires email request (not instant)
  • ✗ License key valid 31 days for trial
  • ✗ Must set BitMiracle.Docotic.LicenseManager.AddLicenseData(key) before any operation
  • ✗ Production requires commercial license purchase
  • ✓ Free licenses available for eligible projects

Feature Comparison Overview

Feature Docotic.PDF IronPDF
Current Status Active Active
HTML Support Chromium add-on (separate package) Chromium core
Rendering Quality Pixel-perfect (Chromium) Pixel-perfect (Chromium)
Installation 2 NuGet packages + license 1 NuGet package
License Required ✗ Yes (even for trial) ✓ Optional (watermark only)
Future Viability PDF manipulation focus HTML-to-PDF focus

Code Comparison Checklist

Docotic.PDF — Installation Checklist

// ✗ STEP 1: Install core package
// Install-Package BitMiracle.Docotic.Pdf

// ✗ STEP 2: Install HTML add-on
// Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf

// ✗ STEP 3: Get license key
// Visit https://bitmiracle.com/pdf-library/
// Fill form, wait for email with trial key

// ✗ STEP 4: Configure license BEFORE any operations
using BitMiracle.Docotic;
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

namespace DococticExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // CRITICAL: Must set license before any PDF operation
            // Without this, all operations fail
            LicenseManager.AddLicenseData("YOUR-LICENSE-KEY-HERE");

            // Verify license loaded
            if (!LicenseManager.IsLicenseValid)
            {
                Console.WriteLine("ERROR: License not valid");
                Console.WriteLine("Request trial: https://bitmiracle.com/pdf-library/");
                return;
            }

            // ✓ Now PDF operations will work
            // See code examples below
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Installation checklist:

  • ✗ Install core package
  • ✗ Install HtmlToPdf add-on package
  • ✗ Request trial license (wait for email)
  • ✗ Add license key to code
  • ✗ Verify license before operations
  • ✓ Ready to use

IronPDF — Installation Checklist

// ✓ STEP 1: Install package
// Install-Package IronPdf

// ✓ STEP 2: Start coding (license optional)
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Optional: Add license to remove watermark
            // IronPdf.License.LicenseKey = "YOUR-KEY";

            // Works immediately with watermark
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello</h1>");
            pdf.SaveAs("output.pdf");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Installation checklist:

  • ✓ Install package
  • ✓ Start coding immediately
  • ✓ License optional (adds watermark if unlicensed)

Docotic.PDF — Basic HTML to PDF Checklist

using System;
using BitMiracle.Docotic;
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

namespace DococticHtmlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ✗ REQUIRED: Set license first
            LicenseManager.AddLicenseData("YOUR-LICENSE-KEY");

            // ✗ STEP 1: Create HtmlToPdf converter
            using (var converter = new HtmlToPdfConverter())
            {
                // ✗ STEP 2: Configure options
                var options = new PdfConversionOptions
                {
                    PageWidth = 210,  // mm (A4)
                    PageHeight = 297, // mm (A4)
                    MarginLeft = 10,
                    MarginRight = 10,
                    MarginTop = 10,
                    MarginBottom = 10
                };

                // ✗ STEP 3: HTML string
                string html = @"
                    <html>
                    <head>
                        <style>
                            body { font-family: Arial; margin: 20px; }
                            h1 { color: #333; }
                        </style>
                    </head>
                    <body>
                        <h1>Hello from Docotic.PDF</h1>
                        <p>Sample content with <strong>formatting</strong>.</p>
                    </body>
                    </html>";

                // ✗ STEP 4: Convert HTML to PDF
                using (var pdf = converter.Convert(html, options))
                {
                    // ✗ STEP 5: Save PDF
                    pdf.Save("output.pdf");

                    Console.WriteLine("✓ PDF created successfully");
                }
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Code checklist:

  • ✗ Set license key
  • ✗ Create HtmlToPdfConverter
  • ✗ Configure PdfConversionOptions
  • ✗ Call Convert method
  • ✗ Save result
  • ✓ Clean using statements for disposal

IronPDF — Basic HTML to PDF Checklist

using System;
using IronPdf;

namespace IronPdfHtmlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ✓ STEP 1: Create renderer
            var renderer = new ChromePdfRenderer();

            // ✓ STEP 2: Render HTML
            string html = @"
                <html>
                <head>
                    <style>
                        body { font-family: Arial; margin: 20px; }
                        h1 { color: #333; }
                    </style>
                </head>
                <body>
                    <h1>Hello from IronPDF</h1>
                    <p>Sample content with <strong>formatting</strong>.</p>
                </body>
                </html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            // ✓ STEP 3: Save
            pdf.SaveAs("output.pdf");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Code checklist:

  • ✓ Create renderer
  • ✓ Render HTML
  • ✓ Save PDF
  • ✓ Done

For HTML string details, see the HTML string to PDF guide.


Docotic.PDF — URL to PDF Checklist

using System;
using BitMiracle.Docotic;
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

namespace DococticUrlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ✗ Set license
            LicenseManager.AddLicenseData("YOUR-LICENSE-KEY");

            // ✗ Create converter
            using (var converter = new HtmlToPdfConverter())
            {
                // ✗ Configure options
                var options = new PdfConversionOptions();

                // ✗ OPTIONAL: Configure delay for JavaScript
                // Verify exact property name in docs for your version
                // options.JavaScriptDelayMilliseconds = 1000; // (verify in docs)

                // ✗ URL to convert
                string url = "https://example.com";

                // ✗ Convert URL
                // Note: Authentication/headers configuration unclear from docs
                using (var pdf = converter.ConvertUrl(url, options))
                {
                    // ✗ Save
                    pdf.Save("url_output.pdf");

                    Console.WriteLine("✓ URL converted");
                }
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

URL rendering checklist:

  • ✗ License key set
  • ✗ HtmlToPdfConverter created
  • ✗ URL passed to ConvertUrl method
  • ✗ JavaScript delay configured (if needed—verify API)
  • ✗ Authentication options (unclear from docs—verify)
  • ✓ Result saved

IronPDF — URL to PDF Checklist

using System;
using IronPdf;

namespace IronPdfUrlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ✓ Create renderer
            var renderer = new ChromePdfRenderer();

            // ✓ Configure timeout
            renderer.RenderingOptions.Timeout = 120;

            // ✓ Render URL
            var pdf = renderer.RenderUrlAsPdf("https://example.com");

            // ✓ Save
            pdf.SaveAs("url_output.pdf");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

URL rendering checklist:

  • ✓ Create renderer
  • ✓ Configure options
  • ✓ Render URL
  • ✓ Save PDF

For URL rendering with authentication, see the URL to PDF documentation.


Docotic.PDF — HTML File Checklist

using System;
using System.IO;
using BitMiracle.Docotic;
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

namespace DococticFileExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ✗ License key
            LicenseManager.AddLicenseData("YOUR-LICENSE-KEY");

            // ✗ Create HTML file
            string htmlFile = "template.html";
            string html = @"
                <html>
                <head>
                    <link rel='stylesheet' href='styles/main.css'>
                </head>
                <body>
                    <img src='images/logo.png'>
                    <h1>HTML File</h1>
                </body>
                </html>";
            File.WriteAllText(htmlFile, html);

            // ✗ Create converter
            using (var converter = new HtmlToPdfConverter())
            {
                // ✗ Configure base path for assets
                var options = new PdfConversionOptions();
                // Base path for relative URLs
                // Exact property name - verify in docs
                // options.BasePath = Path.GetDirectoryName(htmlFile);

                // ✗ Read HTML content
                string htmlContent = File.ReadAllText(htmlFile);

                // ✗ Convert
                using (var pdf = converter.Convert(htmlContent, options))
                {
                    // ✗ Save
                    pdf.Save("file_output.pdf");
                }
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

File rendering checklist:

  • ✗ License key set
  • ✗ HTML file created/exists
  • ✗ Base path configured for assets
  • ✗ HTML content read
  • ✗ Converter created
  • ✗ Convert called
  • ✓ PDF saved

IronPDF — HTML File Checklist

using System;
using IronPdf;

namespace IronPdfFileExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ✓ Create renderer
            var renderer = new ChromePdfRenderer();

            // ✓ Render file (auto-resolves assets)
            var pdf = renderer.RenderHtmlFileAsPdf("template.html");

            // ✓ Save
            pdf.SaveAs("file_output.pdf");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

File rendering checklist:

  • ✓ Create renderer
  • ✓ Render file
  • ✓ Assets auto-resolved
  • ✓ Save PDF

For file rendering, see the HTML file to PDF guide.


Docotic.PDF — Async Operations Checklist

using System;
using System.Threading.Tasks;
using BitMiracle.Docotic;
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

namespace DococticAsyncExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // ✗ License key
            LicenseManager.AddLicenseData("YOUR-LICENSE-KEY");

            // ✗ Async support unclear from docs
            // May need to wrap synchronous calls
            await Task.Run(() =>
            {
                using (var converter = new HtmlToPdfConverter())
                {
                    var options = new PdfConversionOptions();

                    using (var pdf = converter.Convert("<h1>Async</h1>", options))
                    {
                        pdf.Save("async_output.pdf");
                    }
                }
            });

            // ✗ OR check if ConvertAsync exists (verify in docs)
            // using (var converter = new HtmlToPdfConverter())
            // {
            //     var options = new PdfConversionOptions();
            //     using (var pdf = await converter.ConvertAsync("<h1>Async</h1>", options))
            //     {
            //         pdf.Save("async_output.pdf");
            //     }
            // }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Async checklist:

  • ✗ License key set
  • ✗ Check if native async methods exist
  • ✗ May require Task.Run wrapping
  • ✗ Async patterns not clearly documented

IronPDF — Async Operations Checklist

using System;
using System.Threading.Tasks;
using IronPdf;

namespace IronPdfAsyncExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // ✓ Create renderer
            var renderer = new ChromePdfRenderer();

            // ✓ Native async support
            var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async</h1>");

            // ✓ Async save
            await pdf.SaveAsAsync("async_output.pdf");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Async checklist:

  • ✓ Native async methods
  • ✓ Full async/await support
  • ✓ No manual Task wrapping needed

API Mapping Reference

Docotic.PDF Operation IronPDF Equivalent
LicenseManager.AddLicenseData(key) License.LicenseKey = key (optional)
new HtmlToPdfConverter() new ChromePdfRenderer()
new PdfConversionOptions() renderer.RenderingOptions
converter.Convert(html, options) renderer.RenderHtmlAsPdf(html)
converter.ConvertUrl(url, options) renderer.RenderUrlAsPdf(url)
pdf.Save(path) pdf.SaveAs(path)
options.PageWidth/PageHeight renderer.RenderingOptions.PaperSize
options.Margin* renderer.RenderingOptions.Margin*
Check docs for ConvertAsync renderer.RenderHtmlAsPdfAsync(html)
Manual base path config Auto-detected

Comprehensive Feature Comparison

Category Feature Docotic.PDF IronPDF
Status Active Development ✓ Yes ✓ Yes
Product Focus PDF manipulation HTML-to-PDF
HTML Module ✗ Separate add-on ✓ Core
Support Commercial Support ✓ Available ✓ Included
Free Licenses ✓ For eligible projects ✓ For dev/test
Documentation ✗ Scattered ✓ Unified
Code Examples ✓ GitHub samples ✓ Extensive
Content Creation HTML5 Support ✓ Chromium ✓ Chromium
CSS3 Support ✓ Complete ✓ Complete
JavaScript ✓ Full ✓ Full
Modern Frameworks ✓ Supported ✓ Supported
Responsive Design ✓ Supported ✓ Supported
Web Fonts ✓ Automatic ✓ Automatic
PDF Operations HTML to PDF ✓ Via add-on ✓ Native
URL to PDF ✓ Via add-on ✓ Native
Text Extraction ✓ Excellent ✓ Good
PDF Editing ✓ Comprehensive ✗ Limited
Form Fields ✓ Excellent ✓ Good
Architecture Native Dependencies ✓ None (managed) ✓ None (managed)
Package Count ✗ 2 (core + addon) ✓ 1
License Requirement ✗ Always ✓ Optional
Async Support ✗ Unclear ✓ Full
Installation Complexity ✗ Moderate ✓ Simple
License Setup ✗ Required first ✓ Optional
Trial Access ✗ Email request ✓ Instant
Development Learning Curve ✗ Moderate ✓ Shallow
API Clarity ✓ Clean ✓ Clear
Error Messages ✓ Good ✓ Detailed

Setup Checklist Comparison

Docotic.PDF Setup Checklist

  • ✗ Install core package (BitMiracle.Docotic.Pdf)
  • ✗ Install HTML add-on (BitMiracle.Docotic.Pdf.HtmlToPdf)
  • ✗ Visit website to request trial license
  • ✗ Wait for email with license key
  • ✗ Add license key to code with LicenseManager
  • ✗ Verify license loads correctly
  • ✓ Begin development

Time to first PDF: 30+ minutes (waiting for trial license email)

IronPDF Setup Checklist

  • ✓ Install package (IronPdf)
  • ✓ Begin development
  • ✓ Add license key later to remove watermark (optional)

Time to first PDF: 2 minutes


License Management Checklist

Docotic.PDF License

  • ✗ Required for all operations (even read/write)
  • ✗ Trial: 31 days after email request
  • ✗ Must be set before any PDF operation
  • ✗ License validation errors block all functionality
  • ✓ Free licenses available for eligible projects
  • ✓ Royalty-free commercial licenses

IronPDF License

  • ✓ Optional for development (adds watermark)
  • ✓ Trial: 30 days instant access
  • ✓ Full functionality during trial
  • ✓ Watermark-only restriction when unlicensed
  • ✓ Set license anytime to remove watermark
  • ✓ Royalty-free commercial licenses

Common Issues Checklist

Docotic.PDF Common Issues:

  1. ✗ "License not valid" - forgot to set license before operations
  2. ✗ Trial license request delayed - email spam folder
  3. ✗ Two packages needed - core + HtmlToPdf add-on
  4. ✗ Async patterns unclear - check docs for version
  5. ✗ Base path for assets - verify property name in docs

IronPDF Common Issues:

  1. ✓ Watermark appears - add license key to remove
  2. ✓ All other operations work without license

Installation Comparison

Docotic.PDF:

# Step 1: Install core
dotnet add package BitMiracle.Docotic.Pdf

# Step 2: Install HTML add-on
dotnet add package BitMiracle.Docotic.Pdf.HtmlToPdf

# Step 3: Request trial license
# Visit: https://bitmiracle.com/pdf-library/
# Fill form, wait for email

# Step 4: Add license to code
Enter fullscreen mode Exit fullscreen mode
using BitMiracle.Docotic;
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

// Required before any operation
LicenseManager.AddLicenseData("YOUR-KEY");
Enter fullscreen mode Exit fullscreen mode

IronPDF:

# Step 1: Install
dotnet add package IronPdf

# Done - start coding
Enter fullscreen mode Exit fullscreen mode
using IronPdf;
using IronPdf.Rendering;

// Optional - add later to remove watermark
// IronPdf.License.LicenseKey = "YOUR-KEY";
Enter fullscreen mode Exit fullscreen mode

Conclusion

BitMiracle Docotic.PDF provides a comprehensive PDF manipulation library with excellent text extraction, form handling, and editing capabilities. The HtmlToPdf add-on uses Chromium for pixel-perfect rendering. Teams needing extensive PDF manipulation features alongside HTML-to-PDF conversion may find Docotic.PDF's modular architecture matches their requirements. The 100% managed code with no native dependencies is an architectural strength.

The operational checklist surfaces where complexity emerges: two packages to install, trial license requiring email request, license key mandatory before any operations (including development), and async support patterns requiring documentation verification. For teams where PDF manipulation is primary and HTML rendering secondary, working through this checklist may be justified.

Migration consideration centers on workflow focus. If your codebase shows more HTML-to-PDF operations than PDF manipulation (text extraction, form filling, page editing), the two-package architecture and license-first requirement may add friction. Production deployments benefit from instant trial access for testing, single-package installation for CI/CD, and clear async patterns for web applications.

IronPDF's single-package installation with optional licensing eliminates the checklist complexity. The ChromePdfRenderer provides immediate HTML-to-PDF functionality without license configuration, adding only a watermark until licensed. For comprehensive HTML-to-PDF examples, review the HTML to PDF tutorial, and see the ChromePdfRenderer API documentation for configuration details.

What's your experience managing multi-package dependencies and trial license workflows in .NET projects?

Top comments (0)