<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jollen Moyani</title>
    <description>The latest articles on DEV Community by Jollen Moyani (@jollenmoyani).</description>
    <link>https://dev.to/jollenmoyani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F972927%2F876a12f1-3771-485a-87be-b132e7ebd4bf.png</url>
      <title>DEV Community: Jollen Moyani</title>
      <link>https://dev.to/jollenmoyani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jollenmoyani"/>
    <language>en</language>
    <item>
      <title>Choosing the Right PDF Library in 2026: A Developer’s Checklist</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Wed, 18 Mar 2026 14:15:57 +0000</pubDate>
      <link>https://dev.to/syncfusion/choosing-the-right-pdf-library-in-2026-a-developers-checklist-3lfa</link>
      <guid>https://dev.to/syncfusion/choosing-the-right-pdf-library-in-2026-a-developers-checklist-3lfa</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Choosing a PDF library in 2026 goes beyond basic rendering. Developers must evaluate ISO compliance, OCR and data extraction capabilities, cloud and serverless compatibility, security features, and performance optimizations like linearization and incremental updates. This guide provides a practical checklist, decision matrix, and real-world scenarios to help you select the right solution for modern applications.&lt;/p&gt;

&lt;p&gt;Many teams learn the hard way that a &lt;strong&gt;quick win&lt;/strong&gt; PDF helper breaks the moment it hits real workloads—failing compliance checks, choking on large files, or stalling inside serverless functions. Then comes the rewrite. Your best move is to avoid that path entirely by evaluating libraries against today’s real requirements: PDF/UA-2 accessibility, PAdES/LTV signatures, true redaction, cloud and WASM deployment, and AI-ready extraction.&lt;/p&gt;

&lt;p&gt;This comprehensive guide helps developers across JavaScript, Python, Java, PHP, and .NET select a library that supports all ISO-standard PDF types, integrates with AI and cloud-native workflows, and delivers military-grade security, all while remaining performant and developer-friendly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential basics you should validate first
&lt;/h2&gt;

&lt;p&gt;Before you explore new trends, ground yourself in the basics. Our &lt;a href="https://www.syncfusion.com/resource-center/choose-best-pdf-library-dotnet/" rel="noopener noreferrer"&gt;Resource Center&lt;/a&gt; emphasizes five pillars for PDF library selection:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Functionalities&lt;/strong&gt;: From basic creation to advanced editing (e.g., merging, annotations, digital signatures).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Handling large-scale operations without choking on memory or CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration ease&lt;/strong&gt;: Integration with your development environment, a clean and intuitive API that minimizes the learning curve, and quick start tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost and licensing&lt;/strong&gt;: Open source vs. commercial, with distribution rights and usage limitations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support and community&lt;/strong&gt;: Clear and up-to-date documentation, with enterprise-grade maintenance. Regular updates with bug fixes, new features, security updates, and compatibility enhancements.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why your PDF library choice matters now
&lt;/h2&gt;

&lt;p&gt;The following table highlights five transformative forces shaping PDF processing today.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Impact on PDF Processing&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI-driven workflows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extract meaning, not just text. AI software will summarize, classify, and detect anomalies from the PDF content.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud &amp;amp; serverless&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Run in AWS Lambda, Azure Functions, Vercel, with the latest infrastructure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regulatory compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PDF/UA (accessibility), PDF/A (archiving), ZUGFeRD (e-invoicing).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security threats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quantum risks, deepfakes, supply chain attacks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User expectations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Instant load, searchable scans, biometric sign-off.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ISO-Standard PDF types: Your library must support all
&lt;/h2&gt;

&lt;p&gt;A robust PDF library does more than just open files; it preserves the original intent across various specialized formats. PDFs come in many types, each tailored for specific scenarios. The following table outlines these types and highlights their unique characteristics in context.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ISO Standard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Use Case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Required Library Capabilities&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF/A-1a/2u/3/4/4e/4f&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 19005&lt;/td&gt;
&lt;td&gt;Long-term digital preservation (including engineering content in 4e).&lt;/td&gt;
&lt;td&gt;Font embedding, metadata, no JS, validation, U3D/PRC support (for 4e).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF/X-1a/4/6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 15930&lt;/td&gt;
&lt;td&gt;Print-ready graphics.&lt;/td&gt;
&lt;td&gt;CMYK support, bleed boxes, ICC profiles, preflight checks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF/VT-1/2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 16612&lt;/td&gt;
&lt;td&gt;Personalized transactional print.&lt;/td&gt;
&lt;td&gt;Data merging, high volume output, and color management.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF/UA-1/2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 14289&lt;/td&gt;
&lt;td&gt;Accessibility (WCAG 2.2, ADA, EU EAA).&lt;/td&gt;
&lt;td&gt;Semantic tagging, reading order, alt text, and logical structure maps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF/E-1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 24517&lt;/td&gt;
&lt;td&gt;Engineering &amp;amp; 3D CAD documentation.&lt;/td&gt;
&lt;td&gt;U3D/PRC models, measurements, annotations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PDF/R-1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ISO 19936 (2024)&lt;/td&gt;
&lt;td&gt;Raster image archiving.&lt;/td&gt;
&lt;td&gt;Multi-page TIFF-like (Raster) structure, OCR-ready, compression.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Game-changing technologies in modern PDF libraries
&lt;/h2&gt;

&lt;p&gt;Modern PDF libraries have moved far beyond simple file generation. As digital documents now power global e‑invoicing, AI-driven automation, and real-time analytics, PDF SDKs are evolving into platforms for intelligence, security, and scale.&lt;/p&gt;

&lt;p&gt;Below are four technologies redefining what &lt;strong&gt;PDF processing&lt;/strong&gt;  means today.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-powered document intelligence
&lt;/h3&gt;

&lt;p&gt;AI is transforming PDFs from static files into structured, machine‑readable data sources. Instead of just extracting text, modern libraries combine machine learning and computer vision to interpret layout, detect tables, infer semantics, and feed downstream automation pipelines in finance, legal, and healthcare.&lt;/p&gt;

&lt;p&gt;Today’s ecosystem supports advanced capabilities such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OCR with neural networks&lt;/strong&gt; (e.g., LSTM‑based engines).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout-aware parsing&lt;/strong&gt; with bounding boxes, reading order, and table grids.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic extraction&lt;/strong&gt; for classification, summarization, or risk/fraud checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with AI frameworks&lt;/strong&gt; like ML.NET or Azure Cognitive Services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example: OCR extraction from a scanned PDF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Syncfusion .NET Example: Extraction from PDF/R (scanned)&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Syncfusion.OCRProcessor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Syncfusion.Pdf.Parsing&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OCRProcessor&lt;/span&gt; &lt;span class="n"&gt;processor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;OCRProcessor&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;PdfLoadedDocument&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfLoadedDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"scanned-invoice.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Settings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Language&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;English&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PerformOCR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cloud-native and serverless-ready
&lt;/h3&gt;

&lt;p&gt;Cloud native PDF libraries are optimized for distributed, event-driven environments. They support streaming from cloud storage, handle burst workloads, and scale without manual provisioning. Serverless functions such as AWS Lambda, Azure Functions, and Google Cloud enable cost-efficient, on-demand PDF generation and processing.&lt;/p&gt;

&lt;p&gt;Cloud optimized features commonly include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero allocation, stream first APIs.&lt;/li&gt;
&lt;li&gt;Direct processing from S3, Blob Storage, or CDN URLs.&lt;/li&gt;
&lt;li&gt;AOT compilation for .NET Native or GraalVM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This architecture makes it easy to support high-volume workflows, like generating thousands of invoices per second or processing documents in parallel during peak load.&lt;/p&gt;

&lt;p&gt;For the full version of this article, please visit &lt;a href="https://www.syncfusion.com/blogs/post/how-to-choose-a-pdf-library" rel="noopener noreferrer"&gt;Syncfusion.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>dotnet</category>
      <category>dotnetpdflibrary</category>
      <category>documentprocessing</category>
    </item>
    <item>
      <title>Large PDFs and Spreadsheets Slowing You Down? See What’s New in Syncfusion 2026 Volume 1</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Tue, 17 Mar 2026 14:01:37 +0000</pubDate>
      <link>https://dev.to/syncfusion/large-pdfs-and-spreadsheets-slowing-you-down-see-whats-new-in-syncfusion-2026-volume-1-5ig</link>
      <guid>https://dev.to/syncfusion/large-pdfs-and-spreadsheets-slowing-you-down-see-whats-new-in-syncfusion-2026-volume-1-5ig</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; The Syncfusion 2026 Volume 1 release brings major performance and usability upgrades to the PDF Viewer, DOCX Editor, and Spreadsheet Editor SDKs. Key improvements include faster PDF page organization on the web; quicker Blazor text search; zoom persistence and custom stamp access in .NET MAUI; discontinuous chart ranges in the Spreadsheet Editor; full dashed/dotted border preservation in the DOCX Editor, and more. New Visual Studio extensions also streamline Blazor development.&lt;/p&gt;

&lt;p&gt;Working with large PDFs, complex spreadsheets, or heavily formatted Word documents can quickly become slow and frustrating. When page organization lags, search takes too long, or formatting gets lost, productivity drops across teams that rely on document-heavy workflows.&lt;/p&gt;

&lt;p&gt;The Syncfusion &lt;a href="https://help.syncfusion.com/common/essential-studio/release-notes/v33.1.44" rel="noopener noreferrer"&gt;2026 Volume 1&lt;/a&gt; release addresses these challenges with targeted performance and usability improvements across the &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk" rel="noopener noreferrer"&gt;PDF Viewer&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/docx-editor-sdk" rel="noopener noreferrer"&gt;DOCX Editor&lt;/a&gt;, and &lt;a href="https://www.syncfusion.com/spreadsheet-editor-sdk" rel="noopener noreferrer"&gt;Spreadsheet Editor&lt;/a&gt; SDKs.&lt;/p&gt;

&lt;p&gt;These updates deliver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster PDF page organization on the web&lt;/li&gt;
&lt;li&gt;Significantly improved text search performance in Blazor&lt;/li&gt;
&lt;li&gt;Better usability in the .NET MAUI PDF Viewer&lt;/li&gt;
&lt;li&gt;More flexible charting in the Spreadsheet Editor&lt;/li&gt;
&lt;li&gt;Accurate border style preservation in the DOCX Editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a smoother and more reliable editing experience across Web, Blazor, and .NET MAUI applications.&lt;/p&gt;

&lt;p&gt;Let’s explore these improvements in detail&lt;/p&gt;

&lt;h2&gt;
  
  
  PDF Viewer SDK
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk" rel="noopener noreferrer"&gt;PDF Viewer SDK&lt;/a&gt; receives several high-impact improvements across Web, Blazor, and .NET MAUI platforms. These updates focus on performance, usability, and workflow efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web PDF Viewer: Faster page organization for large documents
&lt;/h3&gt;

&lt;p&gt;Industries that work with large PDFs often experience slowdowns when organizing pages.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal teams reviewing lengthy contracts&lt;/li&gt;
&lt;li&gt;Engineering teams managing technical manuals&lt;/li&gt;
&lt;li&gt;Finance departments working with large consolidated reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As documents grow in size, opening the Organize Pages window can become slow or unresponsive, making page reordering or deletion tedious.&lt;/p&gt;

&lt;p&gt;The Syncfusion &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk/javascript-pdf-viewer" rel="noopener noreferrer"&gt;Web PDF Viewer&lt;/a&gt; now opens and closes the Organize Pages window significantly faster, even when working with very large documents. These improvements eliminate UI lag and temporary freezes, giving users a smoother and more responsive page-management experience.&lt;/p&gt;

&lt;p&gt;The following table shows the improvement in opening and closing times:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Document size&lt;/th&gt;
&lt;th&gt;Opening improvement&lt;/th&gt;
&lt;th&gt;Closing improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500 pages&lt;/td&gt;
&lt;td&gt;51.3%&lt;/td&gt;
&lt;td&gt;93.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000 pages&lt;/td&gt;
&lt;td&gt;62.3%&lt;/td&gt;
&lt;td&gt;93.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5,000 pages&lt;/td&gt;
&lt;td&gt;85.7%&lt;/td&gt;
&lt;td&gt;Fully responsive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10,000 pages&lt;/td&gt;
&lt;td&gt;76.2%&lt;/td&gt;
&lt;td&gt;Fully responsive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Blazor PDF Viewer: Performance improvements in text search
&lt;/h3&gt;

&lt;p&gt;Fast and accurate text search is essential in many industries that handle large PDFs, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal teams navigating case files.&lt;/li&gt;
&lt;li&gt;Research organizations analyze lengthy technical reports.&lt;/li&gt;
&lt;li&gt;Engineering teams reviewing extensive specifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these workflows, slow or inconsistent search performance can disrupt productivity, delay decision‑making, and make it difficult for users to quickly locate critical information across hundreds or even thousands of pages.&lt;/p&gt;

&lt;p&gt;To ensure a smoother and more dependable search experience, the Syncfusion &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk/blazor-pdf-viewer" rel="noopener noreferrer"&gt;Blazor PDF Viewer&lt;/a&gt; now delivers significantly faster, more reliable text search, thanks to targeted engine optimizations and refined indexing. You can now locate words and phrases far more quickly and with consistent accuracy, even when working with very large PDF files.&lt;/p&gt;

&lt;p&gt;The following metrics show reduced search times for documents of different sizes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Document size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Performance improvement (%)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60 pages&lt;/td&gt;
&lt;td&gt;95.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;114 pages&lt;/td&gt;
&lt;td&gt;95.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500 pages&lt;/td&gt;
&lt;td&gt;97.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000 pages&lt;/td&gt;
&lt;td&gt;96.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5,000 pages&lt;/td&gt;
&lt;td&gt;94.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  .NET MAUI PDF Viewer improvements
&lt;/h3&gt;

&lt;p&gt;The .NET MAUI PDF Viewer also introduces several usability improvements that make document navigation easier on mobile and tablet devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maintain zoom level in single-page view
&lt;/h3&gt;

&lt;p&gt;Field teams often review large documents on tablets, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construction inspection reports&lt;/li&gt;
&lt;li&gt;Clinical documentation&lt;/li&gt;
&lt;li&gt;Engineering diagrams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Constantly re-zooming when switching pages can slow down review workflows.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk/net-maui-pdf-viewer" rel="noopener noreferrer"&gt;.NET MAUI PDF Viewer&lt;/a&gt; now preserves the zoom level while navigating between pages in single-page view mode.&lt;/p&gt;

&lt;p&gt;Once you set your preferred zoom level, it stays consistent across the entire document, allowing users to read detailed diagrams or text without repeated adjustments.&lt;/p&gt;

&lt;p&gt;Refer to the following images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before enabling Zoom persistence:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FBefore-enabling-Zoom-persistence.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FBefore-enabling-Zoom-persistence.gif" alt="Before enabling Zoom persistence" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After enabling Zoom persistence:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FAfter-enabling-Zoom-persistence.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FAfter-enabling-Zoom-persistence.gif" alt="After enabling Zoom persistence" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Access custom stamp annotation views
&lt;/h4&gt;

&lt;p&gt;Many industries rely on status stamps such as Approved, Rejected, and Pending during document reviews. These are commonly used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manufacturing inspections&lt;/li&gt;
&lt;li&gt;Compliance reviews&lt;/li&gt;
&lt;li&gt;Legal approvals&lt;/li&gt;
&lt;li&gt;Healthcare verification workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All these require updating the status stamps after review and extracting who‑did‑what information for audit reporting. Once applied, custom stamp annotations were difficult to modify or automate, slowing down bulk updates and downstream reporting.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;.NET MAUI PDF Viewer&lt;/strong&gt; now allows you to retrieve and manage the visual elements of custom stamp annotations after placement, enabling dynamic updates during review and approval workflows.&lt;/p&gt;

&lt;p&gt;You can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access stamp properties&lt;/li&gt;
&lt;li&gt;Modify stamp appearance&lt;/li&gt;
&lt;li&gt;Extract stamp information for reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes approval workflows easier to automate and track.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FStamp-annotation-views-in-.NET-MAUI-PDF-Viewer.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FStamp-annotation-views-in-.NET-MAUI-PDF-Viewer.gif" alt="Custom stamp annotation views in .NET MAUI PDF Viewer" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Custom stamp annotation views in .NET MAUI PDF Viewer&lt;/p&gt;

&lt;h3&gt;
  
  
  Blazor Smart PDF Viewer
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk/ai-powered-blazor-pdf-viewer" rel="noopener noreferrer"&gt;Blazor Smart PDF Viewer&lt;/a&gt; has now reached production readiness and includes several AI-powered capabilities.&lt;/p&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://document.syncfusion.com/demos/pdf-viewer/blazor-server/smart-pdf-viewer/summarizer" rel="noopener noreferrer"&gt;Document summarizer&lt;/a&gt;: Provides AI-generated summaries and answers to user queries, enabling quick understanding of document content.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://document.syncfusion.com/demos/pdf-viewer/blazor-server/smart-pdf-viewer/smartredact" rel="noopener noreferrer"&gt;Smart redaction&lt;/a&gt;: Automatically detects and redacts sensitive information, ensuring accurate and secure content protection.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://document.syncfusion.com/demos/pdf-viewer/blazor-server/smart-pdf-viewer/smartfill" rel="noopener noreferrer"&gt;Smart fill&lt;/a&gt;: Automatically identifies and fills PDF form fields using AI, minimizing manual input and speeding up form completion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Spreadsheet Editor SDK
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/spreadsheet-editor-sdk" rel="noopener noreferrer"&gt;Spreadsheet Editor SDK&lt;/a&gt; also receives major improvements across Web and Blazor platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Spreadsheet Editor improvements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Discontinuous chart range support
&lt;/h4&gt;

&lt;p&gt;Teams in finance, research, project management, academics, and inventory operations often need to compare data series that live in completely different parts of a worksheet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revenue and expense metrics may sit in separate columns,&lt;/li&gt;
&lt;li&gt;Regional performance data may be stored in different sections,&lt;/li&gt;
&lt;li&gt;Project phase metrics may be spread across multiple tables, and&lt;/li&gt;
&lt;li&gt;Experiment/control datasets may exist far apart due to differing collection workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until now, creating a comparison chart required copying data into a single block, building multiple charts, or restructuring worksheets, all of which break live data flow and add maintenance overhead.&lt;/p&gt;

&lt;p&gt;With the new discontinuous chart range support in the Syncfusion web Spreadsheet Editor, you can create a single chart from multiple nonadjacent rows, columns, or cell blocks. Each selection becomes its own series; charts stay live and are linked to the source data.&lt;/p&gt;

&lt;p&gt;The supported major chart types are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Column&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bar&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Area&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pie&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Donut&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Line&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scatter&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can use &lt;strong&gt;Ctrl&lt;/strong&gt; (Windows/Linux) or &lt;strong&gt;Cmd&lt;/strong&gt; (Mac) keys to select multiple ranges.&lt;/p&gt;

&lt;p&gt;Read the full article on &lt;a href="https://www.syncfusion.com/blogs/post/whats-new-in-file-formats-2026-vol-1" rel="noopener noreferrer"&gt;Syncfusion’s official website.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>fileformats</category>
      <category>dotnet</category>
      <category>developertools</category>
      <category>documentprocessing</category>
    </item>
    <item>
      <title>Turn Static Word Docs into Interactive Forms: Create and Manage DOCX Form Fields in ASP.NET Core</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Wed, 04 Mar 2026 14:05:32 +0000</pubDate>
      <link>https://dev.to/syncfusion/turn-static-word-docs-into-interactive-forms-create-and-manage-docx-form-fields-in-aspnet-core-51k2</link>
      <guid>https://dev.to/syncfusion/turn-static-word-docs-into-interactive-forms-create-and-manage-docx-form-fields-in-aspnet-core-51k2</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; DOCX can do far more than store text. Turn plain Word files into interactive, fillable forms by inserting, updating, exporting, resetting, and protecting form fields in ASP.NET Core using Syncfusion’s UI and APIs.&lt;/p&gt;

&lt;p&gt;What if your Word documents could collect data like a web form? They can, transforming ordinary documents into interactive tools.&lt;/p&gt;

&lt;p&gt;DOCX form fields turn static documents into dynamic templates that users can fill out effortlessly. Whether you’re creating contracts, onboarding forms, surveys, or business workflows, they provide structure, consistency, and a smoother user experience.&lt;/p&gt;

&lt;p&gt;For developers, the ability to manage DOCX form fields programmatically unlocks even bigger advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automating repetitive document tasks.&lt;/li&gt;
&lt;li&gt;Generating and prefilling templates from external data sources.&lt;/li&gt;
&lt;li&gt;Maintaining accuracy and compliance in business‑critical forms ( &lt;strong&gt;legal&lt;/strong&gt;, &lt;strong&gt;HR&lt;/strong&gt;, &lt;strong&gt;finance&lt;/strong&gt; ).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this tutorial, we’ll learn how to insert, update, import, export, reset, and protect DOCX form fields in ASP.NET Core using the &lt;a href="https://www.syncfusion.com/docx-editor-sdk" rel="noopener noreferrer"&gt;Syncfusion DOCX Editor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are DOCX form fields?
&lt;/h2&gt;

&lt;p&gt;DOCX form fields are &lt;strong&gt;interactive elements&lt;/strong&gt; embedded directly inside a Word document. They allow users to enter data directly within the file, turning a simple document into a structured, fillable form. When you design templates with form fields, you can ensure consistent, organized data collection, which is especially useful in workflows where accuracy and uniformity are essential.&lt;/p&gt;

&lt;p&gt;These interactive fields fit naturally into many real-world scenarios, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onboarding forms and HR templates.&lt;/li&gt;
&lt;li&gt;Sales contracts and legal agreements.&lt;/li&gt;
&lt;li&gt;Surveys, questionnaires, and checklists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To support these workflows, DOCX files allow several types of form fields, each serving a different purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text:&lt;/strong&gt; Free-form input used for names, addresses, and notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkbox:&lt;/strong&gt; Binary selections such as Yes/No or True/False.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropdown:&lt;/strong&gt; Predefined options like departments, categories, or status values.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these field types make DOCX templates more dynamic and help streamline both data entry and document automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing form fields with Syncfusion DOCX Editor
&lt;/h2&gt;

&lt;p&gt;The Syncfusion &lt;a href="https://help.syncfusion.com/document-processing/word/word-processor/asp-net-core/getting-started-core" rel="noopener noreferrer"&gt;DOCX Editor&lt;/a&gt; is built to simplify and streamline form field management, offering an intuitive interface for efficient document editing.&lt;/p&gt;

&lt;p&gt;It provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in toolbar&lt;/strong&gt; for quickly adding interactive fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Properties pane&lt;/strong&gt; for customizing their attributes, such as names, default values, and formatting, without writing extra code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This integrated UI supports all essential form field types.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FDOCX-Form-Field-Types.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FDOCX-Form-Field-Types.png" alt="Creating form fields with Syncfusion DOCX Editor" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating form fields with Syncfusion DOCX Editor&lt;/p&gt;

&lt;p&gt;Let’s explore both UI-based tools and API-driven methods to build fully interactive, automated document workflows with minimal effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with DOCX Editor in ASP.NET Core
&lt;/h2&gt;

&lt;p&gt;To get started, we’ll need to set up the Syncfusion &lt;strong&gt;DOCX Editor&lt;/strong&gt; in our ASP.NET Core application. The steps below guide us through the initial configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a .NET Core web app
&lt;/h3&gt;

&lt;p&gt;Begin by using &lt;a href="https://visualstudio.microsoft.com/" rel="noopener noreferrer"&gt;Visual Studio&lt;/a&gt; to &lt;a href="https://learn.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-10.0&amp;amp;tabs=visual-studio" rel="noopener noreferrer"&gt;create a new ASP.NET Core project with Razor pages&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install the NuGet package
&lt;/h3&gt;

&lt;p&gt;Next, install the &lt;a href="https://www.nuget.org/packages/Syncfusion.EJ2.AspNet.Core/" rel="noopener noreferrer"&gt;Syncfusion.EJ2.AspNet.Core&lt;/a&gt; NuGet package to your project using the NuGet Package Manager or the following command.&lt;/p&gt;

&lt;p&gt;BASH&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Install-Package Syncfusion.EJ2.AspNet.Core &lt;span class="nt"&gt;-Version&lt;/span&gt; 32.1.19
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Add Syncfusion tag helper
&lt;/h3&gt;

&lt;p&gt;After installing the package, open the &lt;strong&gt;&lt;code&gt;ViewImports.cshtml&lt;/code&gt;&lt;/strong&gt; file and add the following line to enable the Syncfusion tag helper.&lt;/p&gt;

&lt;p&gt;BASH&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;@addTagHelper &lt;span class="k"&gt;*&lt;/span&gt;, Syncfusion.EJ2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Include the required styles and scripts
&lt;/h3&gt;

&lt;p&gt;To ensure proper rendering, add the Syncfusion CSS and JavaScript CDN links inside your &lt;code&gt;_Layout.cshtml&lt;/code&gt;file.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    ...
    &lt;span class="c"&gt;&amp;lt;!-- Syncfusion ASP.NET Core controls styles --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.syncfusion.com/ej2/32.1.19/fluent.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Syncfusion ASP.NET Core controls scripts --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.syncfusion.com/ej2/32.1.19/dist/ej2.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Register Script Manager
&lt;/h3&gt;

&lt;p&gt;Before closing the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag, include the Syncfusion Script Manager to ensure proper component initialization.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    ...
    &lt;span class="c"&gt;&amp;lt;!-- Syncfusion ASP.NET Core Script Manager --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ejs-scripts&amp;gt;&amp;lt;/ejs-scripts&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Add Syncfusion DOCX Editor in ASP.NET Core app
&lt;/h3&gt;

&lt;p&gt;Finally, add the DOCX Editor to the &lt;code&gt;Index.cshtml&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ejs-documenteditorcontainer&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/ejs-documenteditorcontainer&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This renders the full editor with its default toolbar and environment.&lt;/p&gt;

&lt;p&gt;Once these steps are complete, your Syncfusion DOCX Editor is fully configured and ready to start working with DOCX form fields, as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FDocumentEditor-in-ASP.NET-Core.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FDocumentEditor-in-ASP.NET-Core.png" alt="Creating an ASP.NET Core app with Syncfusion DOCX Editor" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating an ASP.NET Core app with Syncfusion DOCX Editor&lt;/p&gt;

&lt;h2&gt;
  
  
  Manage form fields in DOCX files
&lt;/h2&gt;

&lt;p&gt;Working with form fields in DOCX files is not just about reading values; it’s about creating dynamic, interactive documents. With the Syncfusion Document Editor, you can insert new form fields, update their properties, reset them, and even protect the document, so users can only edit designated fields.&lt;/p&gt;

&lt;p&gt;Below is a quick overview of the key operations you can perform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Insert form fields
&lt;/h3&gt;

&lt;p&gt;Form fields make it easy to build interactive documents such as feedback forms, contracts, and questionnaires. They ensure users enter structured responses digitally, protect legal text, and make surveys interactive and easy to analyze programmatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Insert form fields via UI
&lt;/h3&gt;

&lt;p&gt;We can insert form fields by selecting form fields from the built-in toolbar and choosing the desired field type, such as &lt;strong&gt;text&lt;/strong&gt;, &lt;strong&gt;checkbox&lt;/strong&gt;, or &lt;strong&gt;dropdown&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FCreating-form-fields-using-the-built-in-toolbar-in-the-DOCX-Editor.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FCreating-form-fields-using-the-built-in-toolbar-in-the-DOCX-Editor.gif" alt="Creating form fields using the built-in toolbar in the DOCX Editor" width="600" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Creating form fields using the built-in toolbar in the DOCX Editor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Explore our &lt;a href="https://document.syncfusion.com/demos/docx-editor/asp-net-core/documenteditor/formfields#/tailwind3" rel="noopener noreferrer"&gt;live demo&lt;/a&gt; and start adding form fields effortlessly!&lt;/p&gt;

&lt;h3&gt;
  
  
  Insert form fields programmatically
&lt;/h3&gt;

&lt;p&gt;We can also generate form fields dynamically using the &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/editor#insertformfield" rel="noopener noreferrer"&gt;insertFormField&lt;/a&gt; API. This is ideal for generating interactive documents that require fields to be inserted on demand.&lt;/p&gt;

&lt;p&gt;Just a few lines of code are all it takes:&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Insert Text form field&lt;/span&gt;
&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//Insert Checkbox form field&lt;/span&gt;
&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CheckBox&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//Insert Drop down form field&lt;/span&gt;
&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Dropdown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get form field names and properties
&lt;/h3&gt;

&lt;p&gt;Validating form fields before submission is essential for accuracy, consistency, and compliance. Retrieving field names and properties helps ensure all required fields are present, enables dynamic customization based on user roles or conditions, and supports auditing and reporting for compliance purposes.&lt;/p&gt;

&lt;p&gt;We can retrieve all form field names and fetch detailed properties using the &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/index-default#getformfieldnames" rel="noopener noreferrer"&gt;getFormFieldNames&lt;/a&gt; and &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/index-default#getformfieldinfo" rel="noopener noreferrer"&gt;getFormFieldInfo&lt;/a&gt; APIs.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get all form field names&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;formFieldsNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFormFieldNames&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;//Text form field&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;textfieldInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFormFieldInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Text1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Update form field properties
&lt;/h3&gt;

&lt;p&gt;Updating form field properties is essential for creating accurate and user-friendly documents. This feature allows you to pre-fill forms, enforce input formats, and maintain data consistency, commonly used in HR onboarding, tax forms, and compliance-driven templates.&lt;/p&gt;

&lt;h4&gt;
  
  
  Update via UI
&lt;/h4&gt;

&lt;p&gt;You can update form field values directly using the built-in toolbar and properties pane in the editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FUpdating-form-fields-via-the-built-in-toolbar-in-DOCX-Editor.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FUpdating-form-fields-via-the-built-in-toolbar-in-DOCX-Editor.gif" alt="Updating form fields via the built-in toolbar in DOCX Editor" width="600" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Updating form fields via the built-in toolbar in DOCX Editor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Try it yourself in our &lt;a href="https://document.syncfusion.com/demos/docx-editor/asp-net-core/documenteditor/formfields#/tailwind3" rel="noopener noreferrer"&gt;live demo&lt;/a&gt; and see how quickly you can update form fields without writing any code!&lt;/p&gt;

&lt;h4&gt;
  
  
  Update programmatically
&lt;/h4&gt;

&lt;p&gt;Use the &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/index-default#setformfieldinfo" rel="noopener noreferrer"&gt;setFormFieldInfo&lt;/a&gt; API to dynamically update properties:&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Set text form field properties&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;textfieldInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFormFieldInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Text1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;textfieldInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;textfieldInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Uppercase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;textfieldInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setFormFieldInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Text1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;textfieldInfo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reset form fields
&lt;/h3&gt;

&lt;p&gt;Resetting form fields is useful when users need to start over, such as re-filling a form on a shared device. It prevents accidental reuse of previous responses and ensures clean data collection. It is ideal for surveys, questionnaires, and repeated forms of submissions.&lt;/p&gt;

&lt;p&gt;You can reset all form fields to their default values using the &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/index-default#resetformfields" rel="noopener noreferrer"&gt;resetFormFields&lt;/a&gt; API:&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resetFormFields&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Import and export form field data of DOCX files
&lt;/h3&gt;

&lt;p&gt;Exporting and importing form fields data makes it easy to reuse information across documents. This feature helps you save user input, generate reports, or create pre-filled forms to speed up workflows.&lt;/p&gt;

&lt;p&gt;You can export all form field values from the loaded document using the &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/index-default#exportformdata" rel="noopener noreferrer"&gt;exportFormData&lt;/a&gt; method. Similarly, you can prefill form fields by importing data with the &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/index-default#importformdata" rel="noopener noreferrer"&gt;importFormData&lt;/a&gt; method.&lt;/p&gt;

&lt;p&gt;Here’s how you can export form field data from the DOCX files with Syncfusion DOCX Editor:&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;formFieldDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exportFormData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here’s how you can import the saved data back into the DOCX files with Syncfusion:&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;textformField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fieldName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Text1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;checkformField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fieldName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Check1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;dropdownformField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fieldName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Drop1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Import form field data&lt;/span&gt;
&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;importFormData&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nx"&gt;textformField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;checkformField&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;dropdownformField&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For more details about importing and exporting form fields, read &lt;a href="https://help.syncfusion.com/document-processing/word/word-processor/asp-net-core/form-fields" rel="noopener noreferrer"&gt;the full documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Protect the document for form filling
&lt;/h3&gt;

&lt;p&gt;Enable protection so that users can only fill out form fields while the rest of the document remains read-only. We can use this feature for &lt;strong&gt;legal documents&lt;/strong&gt;, &lt;strong&gt;contracts&lt;/strong&gt;, &lt;strong&gt;templates&lt;/strong&gt;, and any scenario where the primary text must stay unchanged.&lt;/p&gt;

&lt;h4&gt;
  
  
  Enable protection via UI
&lt;/h4&gt;

&lt;p&gt;To enable protection using the built-in interface:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Review&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Restrict Editing&lt;/strong&gt; from the toolbar.&lt;/li&gt;
&lt;li&gt;Choose the option to allow editing &lt;strong&gt;only in form fields&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This ensures that users can interact with designated fields while preventing modifications to the rest of the document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FEnabling-only-form-filling-mode-in-a-Word-document-using-the-DOCX-Editor.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F03%2FEnabling-only-form-filling-mode-in-a-Word-document-using-the-DOCX-Editor.gif" alt="Enabling only form-filling mode in a Word document using the DOCX Editor" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enabling only form-filling mode in a Word document using the DOCX Editor&lt;/p&gt;

&lt;h4&gt;
  
  
  Enable protection programmatically
&lt;/h4&gt;

&lt;p&gt;You can also control document protection through code. Use &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/editor#enforceprotection" rel="noopener noreferrer"&gt;enforceProtection&lt;/a&gt; to enable form-filling-only mode, and &lt;a href="https://ej2.syncfusion.com/javascript/documentation/api/document-editor/editor#stopprotection" rel="noopener noreferrer"&gt;stopProtection&lt;/a&gt; to remove existing protection.&lt;/p&gt;

&lt;p&gt;JavaScript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;documenteditorElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;documenteditorElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ej2_instances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;documenteditor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Enable protection for form fields only&lt;/span&gt;
&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enforceProtection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FormFieldsOnly&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Stop the document protection&lt;/span&gt;
&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentEditor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stopProtection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. Can a DOCX file use form fields?
&lt;/h4&gt;

&lt;p&gt;Yes. DOCX supports text, checkbox, and dropdown fields for interactive documents.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can I update or reset fields?
&lt;/h4&gt;

&lt;p&gt;Yes. Use the &lt;code&gt;setFormFieldInfo&lt;/code&gt; method to update properties and &lt;code&gt;resetFormFields()&lt;/code&gt; to clear values.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. What types of form fields are supported?
&lt;/h4&gt;

&lt;p&gt;The DOCX file supports a variety of form fields, including text fields for general &lt;strong&gt;text entry&lt;/strong&gt;, &lt;strong&gt;numbers&lt;/strong&gt;, and &lt;strong&gt;dates&lt;/strong&gt;, checkbox fields for binary selections, and dropdown fields that allow users to choose from a predefined list of strings.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Does the Syncfusion editor support form fields?
&lt;/h4&gt;

&lt;p&gt;Yes, the Docx Editor supports legacy form fields (text, checkbox, and dropdown lists) to create fillable forms. It also supports content controls.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Can I create form fields using the UI?
&lt;/h4&gt;

&lt;p&gt;Yes, the &lt;strong&gt;Document Editor&lt;/strong&gt; control provides an intuitive UI for inserting and managing form fields through its toolbar.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. How can I retrieve form field data?
&lt;/h4&gt;

&lt;p&gt;You can get all field names using &lt;code&gt;getFormFieldNames()&lt;/code&gt; and retrieve specific properties (like &lt;strong&gt;default values&lt;/strong&gt;, &lt;strong&gt;formats&lt;/strong&gt;, or &lt;strong&gt;type&lt;/strong&gt; ) using &lt;code&gt;getFormFieldInfo('FieldName')&lt;/code&gt;. Data can also be programmatically exported from the entire document.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. How do I protect the document so that only form fields are editable?
&lt;/h4&gt;

&lt;p&gt;The document can be protected using the &lt;strong&gt;“Restrict Editing”&lt;/strong&gt; feature, which locks the document layout while allowing users to fill in form fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thank you for reading! Managing form fields in DOCX files offers powerful advantages for web applications, enabling interactive documents, streamlined data collection, and fully automated workflows. With the &lt;a href="https://www.syncfusion.com/docx-editor-sdk" rel="noopener noreferrer"&gt;Syncfusion DOCX Editor&lt;/a&gt;, developers can effortlessly insert, customize, and manage form fields, and import or export their data to support dynamic templates and system integrations. These capabilities significantly reduce manual effort and make it easier to build fast, efficient, and user‑friendly document solutions.&lt;/p&gt;

&lt;p&gt;If you’re an existing customer, the latest version is available on the &lt;a href="https://www.syncfusion.com/account/downloads" rel="noopener noreferrer"&gt;License and Downloads&lt;/a&gt; page. New to Syncfusion? Try our &lt;a href="https://www.syncfusion.com/downloads/docx-editor-sdk?tag=es-ft-docx-editor-sdk-banner" rel="noopener noreferrer"&gt;30-day free trial&lt;/a&gt; and experience all the newest features firsthand.&lt;/p&gt;

&lt;p&gt;We’re here to support you every step of the way! Reach out through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forums&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;. We’re always happy to assist.&lt;/p&gt;

</description>
      <category>word</category>
      <category>documenteditor</category>
      <category>documentprocessing</category>
      <category>docxeditor</category>
    </item>
    <item>
      <title>Building a 10 Faster, Cloud-Ready Document Pipeline Without Office or Adobe</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Wed, 25 Feb 2026 13:42:58 +0000</pubDate>
      <link>https://dev.to/syncfusion/building-a-10x-faster-cloud-ready-document-pipeline-without-office-or-adobe-2m6h</link>
      <guid>https://dev.to/syncfusion/building-a-10x-faster-cloud-ready-document-pipeline-without-office-or-adobe-2m6h</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Traditional document automation built on Microsoft Office Interop and Adobe dependencies often fails in server and cloud environments due to instability, threading issues, and platform limitations. By switching to server-safe, managed .NET document libraries, we built a cloud-ready pipeline that renders, converts, and processes documents up to 10× faster, without crashes, unpredictable behavior, or OS-level dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment our document pipeline started crashing
&lt;/h2&gt;

&lt;p&gt;When routine document tasks started taking minutes instead of seconds, and our automated workflows began failing at the worst possible moments, we knew something was seriously wrong.&lt;/p&gt;

&lt;p&gt;As we scaled, relying on Adobe and Microsoft Office became a bottleneck we could no longer ignore. These tools were built for desktops, not the cloud. And once Docker, Linux, and Kubernetes entered the picture, the cracks widened fast: random crashes, slow rendering, mysterious file locks, broken conversions… everything was becoming unpredictable.&lt;/p&gt;

&lt;p&gt;That’s when we shifted to a new category of technology: &lt;strong&gt;server‑safe, code‑first document SDKs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And the solution that transformed our entire workflow? &lt;a href="https://www.syncfusion.com/document-sdk" rel="noopener noreferrer"&gt;Syncfusion Document Processing SDK&lt;/a&gt;. It offers consistent processing, seamless scaling, and reliability for automation. Our pipeline now delivers consistent speed across OSes and workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Adobe &amp;amp; Office broke our automated pipelines
&lt;/h2&gt;

&lt;p&gt;As our automation footprint grew, so did the cracks. The more we scaled, the more Adobe and Microsoft Office exposed their limits. Here’s what we found when we tried to run them inside modern server environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not built for server-side execution:&lt;/strong&gt; Both Adobe and Office were designed for interactive desktop use, not for background automation. When forced into server roles, they frequently hang, stall, or fail unpredictably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slow, resource-intensive rendering:&lt;/strong&gt; Document rendering consumes excessive CPU and memory. Under real-world load, these apps become bottlenecks, slowing jobs down and dragging entire pipelines to a crawl.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unpredictable automation failures:&lt;/strong&gt; We constantly encountered COM exceptions, random crashes, and mysterious file locks. Even minor tasks felt like rolling the dice every time the script ran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not suitable for Docker, Linux, or Kubernetes:&lt;/strong&gt; Modern infrastructure demands portability, but these tools require full desktop environments. Containers reject them outright, making cloud deployment nearly impossible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex, expensive licensing at scale:&lt;/strong&gt; Licensing for Adobe and Office gets complicated and costly very quickly. Every additional server, instance, or workflow adds both expense and compliance overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deeper we went, the clearer it became: using Adobe and Office in automated pipelines injects fragility where you need reliability. These issues aren’t rare edge cases; they’re systemic. And they’re exactly what Syncfusion’s Document SDK was built to solve with a server-safe, code-first approach purpose-built for modern automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we needed: A cloud‑ready, failure‑proof document pipeline
&lt;/h2&gt;

&lt;p&gt;After understanding where our old system failed, we mapped out exactly what a modern document pipeline should look like. Every goal is focused on building a solution that stays reliable, scalable, and cloud-friendly from day one.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;100% server-safe:&lt;/strong&gt; We wanted a pipeline that runs entirely in headless environments, with no UI dependencies. No more desktop apps pretending to be server tools, just clean, predictable execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No external installations:&lt;/strong&gt; The new system shouldn’t rely on Adobe, Office, or any third-party apps installed on machines. Everything needed to run directly within our codebase and deployment environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast, multi-threaded, scalable:&lt;/strong&gt; Speed had to be a core requirement, not an afterthought. The redesigned workflow needed to support parallel tasks and handle spikes in document volume without choking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent rendering across environments:&lt;/strong&gt; A document generated on one server should look identical everywhere else. We aimed for stable, deterministic rendering across Windows, Linux, containers, and cloud clusters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built entirely on .NET:&lt;/strong&gt; To streamline development and maintenance, we chose to unify everything under .NET. This allowed us to leverage familiar tooling, strong performance, and clean integration with our existing services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Syncfusion Document SDK became the clear winner
&lt;/h2&gt;

&lt;p&gt;Throughout our evaluation of leading document SDKs, Syncfusion proved to be the clear choice, offering robust &lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library" rel="noopener noreferrer"&gt;PDF&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library" rel="noopener noreferrer"&gt;Word&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/document-sdk/net-excel-library" rel="noopener noreferrer"&gt;Excel&lt;/a&gt;, and &lt;a href="https://www.syncfusion.com/document-sdk/net-powerpoint-library" rel="noopener noreferrer"&gt;PowerPoint&lt;/a&gt; libraries that have matured over &lt;strong&gt;20 years&lt;/strong&gt; of continuous development. It satisfied all the architectural requirements we had defined and resolved several underlying issues we hadn’t identified until we dug deeper.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full document creation without Adobe/Office:&lt;/strong&gt; Syncfusion lets us generate PDFs, Word files, Excel sheets, and PowerPoint entirely through code. We no longer depend on heavyweight desktop apps or background installations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform support:&lt;/strong&gt; The libraries run flawlessly on Windows, Linux, Docker, and Kubernetes. This gave us the freedom to deploy anywhere without worrying about OS-level restrictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-performance rendering engine:&lt;/strong&gt; Documents now render faster and more consistently, even under heavy load. Its optimized engine handles complex layouts without draining server resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible conversion workflows:&lt;/strong&gt; Whether it’s &lt;strong&gt;DOCX to PDF&lt;/strong&gt; , &lt;strong&gt;HTML to PDF&lt;/strong&gt; , or &lt;strong&gt;Excel to CSV&lt;/strong&gt; , everything happens inside a clean .NET workflow. We automated conversions that were previously unreliable or impossible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified licensing model:&lt;/strong&gt; Instead of paying per seat or per server, we benefit from a single, predictable license. Unlike Adobe or Office, there are no hidden automation fees or usage-based charges.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rebuilding our document processing pipeline with Syncfusion
&lt;/h2&gt;

&lt;p&gt;Migrating the document pipeline to Syncfusion allowed us to redesign our workflow with performance and stability at the forefront. As a result, Syncfusion delivered faster processing, cleaner rendering, and more predictable automation, while eliminating the desktop-bound dependencies that limited our previous setup.&lt;/p&gt;

&lt;p&gt;Moreover, the &lt;a href="https://help.syncfusion.com/document-processing/ai-coding-assistant/mcp-server/documentsdk" rel="noopener noreferrer"&gt;Syncfusion Document SDK AI Coding Assistant MCP Server&lt;/a&gt; further strengthens this workflow by providing intelligent, context-aware code suggestions for &lt;strong&gt;PDF&lt;/strong&gt; , &lt;strong&gt;Word&lt;/strong&gt; , &lt;strong&gt;Excel&lt;/strong&gt; , and &lt;strong&gt;PowerPoint&lt;/strong&gt; development. It streamlines implementation by generating accurate, library-specific guidance and examples, reducing the need for manual documentation lookup. This results in faster development, fewer integration issues, and a more efficient document automation pipeline overall.&lt;/p&gt;

&lt;h3&gt;
  
  
  PDF automation: Faster, cleaner, more reliable
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library" rel="noopener noreferrer"&gt;Syncfusion PDF Library&lt;/a&gt; transforms how our pipeline generates, processes, and optimizes PDFs. It gave us a stable, API-driven system that handles complex operations with precision, without relying on external tools or desktop automation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified PDF manipulation (Merge/Split/Stamp/Encrypt):&lt;/strong&gt; All common PDF operations now run through a single, reliable engine. We can combine, split, watermark, and secure documents programmatically with minimal code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance-ready signatures and forms:&lt;/strong&gt; The library supports digital signatures, form filling, validation, and PDF/A generation out of the box. This helped us automate secure and compliance-driven workflows with zero external plugins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-performance rendering engine:&lt;/strong&gt; Syncfusion processes PDFs faster while using significantly less memory. This optimization keeps our pipeline stable under load and improves throughput across high-volume operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced HTML-to-PDF rendering:&lt;/strong&gt; Syncfusion converts modern web pages into pixel-perfect PDFs with full CSS and JavaScript execution. Charts, animations, and responsive layouts render exactly as they appear in the browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to dive deeper into how these PDF features work? Check out the &lt;a href="https://livedocumentsdkapp.azurewebsites.net/demos/pdf/default#/tailwind" rel="noopener noreferrer"&gt;live demos&lt;/a&gt;, explore &lt;a href="https://www.syncfusion.com/code-examples/pdf-examples" rel="noopener noreferrer"&gt;real examples&lt;/a&gt;, and review the full technical &lt;a href="https://help.syncfusion.com/document-processing/pdf/overview" rel="noopener noreferrer"&gt;overview&lt;/a&gt; to see everything in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FNET-PDF-Library-PDF-automation-enhancements.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FNET-PDF-Library-PDF-automation-enhancements.png" alt="Key automation features of .NET PDF Library" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key automation features of .NET PDF Library&lt;/p&gt;

&lt;h3&gt;
  
  
  Word automation: High‑volume DOCX at scale
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/document-sdk/net-word-library" rel="noopener noreferrer"&gt;Syncfusion .NET Word Library&lt;/a&gt; allows us to rebuild our Word generation pipeline with far greater precision and performance. It handles complex layouts, large datasets, and high-volume document generation without the instability of Office automation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complex DOCX composition (Fields, images, tables):&lt;/strong&gt; The Word library dynamically constructs &lt;strong&gt;DOCX&lt;/strong&gt; files with structured fields, embedded images, nested tables, and rich formatting. It reliably processes complex layouts, even as templates grow in size or complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput mail merge engine:&lt;/strong&gt; Syncfusion &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library/mail-merge" rel="noopener noreferrer"&gt;Mail Merge&lt;/a&gt; handles thousands of records per second with minimal overhead, making it ideal for real-time scenarios such as bulk invoice, report, or contract generation, or personalized document delivery at scale. It maps data fields, generates personalized documents, and scales horizontally without blocking threads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accurate rendering with faster processing at scale:&lt;/strong&gt; It consistently renders documents the same way across different environments and servers. Its optimized processing pipeline reduces CPU usage and accelerates bulk operations, making large-scale automation far more stable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiformat conversion (DOCX → PDF/HTML/Text/MD/Images/RTF):&lt;/strong&gt; The conversion engine converts DOCX files into &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library/word-to-pdf-conversion" rel="noopener noreferrer"&gt;PDF&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library/html-conversions" rel="noopener noreferrer"&gt;HTML&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library/markdown-conversions" rel="noopener noreferrer"&gt;Markdown&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library/word-to-image-conversion" rel="noopener noreferrer"&gt;images&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/document-sdk/net-word-library/text-conversions" rel="noopener noreferrer"&gt;plain text&lt;/a&gt;, or &lt;a href="https://help.syncfusion.com/document-processing/word/word-library/net/rtf" rel="noopener noreferrer"&gt;RTF&lt;/a&gt; with high fidelity, preserving layout, styles, and media-rich content, without requiring Microsoft Word.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking to implement these Word features in your own workflow? Start with the &lt;a href="https://document.syncfusion.com/demos/word/helloworld#/tailwind3" rel="noopener noreferrer"&gt;live demo&lt;/a&gt;, then dive into the &lt;a href="https://help.syncfusion.com/document-processing/word/word-library/net/overview" rel="noopener noreferrer"&gt;DocIO&lt;/a&gt; docs and &lt;a href="https://www.syncfusion.com/code-examples/docio-examples" rel="noopener noreferrer"&gt;example code&lt;/a&gt; to see how to bring it all together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FNET-Word-Library-with-automation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FNET-Word-Library-with-automation.png" alt="Key automation features of .NET Word Library" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key automation features of .NET Word Library&lt;/p&gt;

&lt;h3&gt;
  
  
  Excel automation: Full spreadsheet generation without Excel
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/document-sdk/net-excel-library" rel="noopener noreferrer"&gt;Syncfusion Excel Library&lt;/a&gt; enables us to build a fully automated Excel pipeline without relying on Microsoft Excel. It generates, formats, calculates, and converts spreadsheets across any server environment with consistent output and high performance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment-independent XLSX generation:&lt;/strong&gt; Syncfusion creates native XLSX files through pure .NET APIs, no Excel installation required. This makes our automation fully compatible with Windows, Linux, Docker, and Kubernetes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated financial sheets with formulas and styles:&lt;/strong&gt; We generate complex financial models with formulas, conditional formatting, cell styles, and dynamic ranges. The engine calculates values accurately, making it ideal for reports, audits, and analytics workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-driven charts and pivot tables:&lt;/strong&gt; The library builds charts and pivot tables directly from live data sources. Our dashboards update automatically, producing clear visual summaries without any manual post-processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excel-to-PDF conversion with layout accuracy:&lt;/strong&gt; Syncfusion converts spreadsheets into high-fidelity PDFs while preserving styles, grids, fonts, and page layout. This gave us a seamless way to produce polished reports directly from raw Excel data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to see these Excel automation features in action? Try the &lt;a href="https://document.syncfusion.com/demos/excel/create#/tailwind3" rel="noopener noreferrer"&gt;live demo&lt;/a&gt;, browse the &lt;a href="https://help.syncfusion.com/document-processing/excel/excel-library/net/overview" rel="noopener noreferrer"&gt;XlsIO documentation&lt;/a&gt;, and explore the &lt;a href="https://github.com/SyncfusionExamples/XlsIO-Examples" rel="noopener noreferrer"&gt;GitHub examples&lt;/a&gt; to understand how easily you can generate and manipulate Excel files programmatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FNET-Excel-Library-with-automation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FNET-Excel-Library-with-automation.png" alt="Key automation features of .NET Excel Library" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key automation features of .NET Excel Library&lt;/p&gt;

&lt;h3&gt;
  
  
  PowerPoint automation: Fully automated presentations
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/document-sdk/net-powerpoint-library" rel="noopener noreferrer"&gt;Syncfusion PowerPoint Library&lt;/a&gt; lets us automate end-to-end presentation workflows without opening PowerPoint. We now create, populate, standardize, and export decks programmatically across any environment with consistent results.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autogenerated recurring presentations:&lt;/strong&gt; We schedule and build recurring decks (weekly reports, monthly metrics, QBRs) through .NET APIs. The pipeline assembles slides from live data, ensuring every run uses the latest numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-bound slides with visuals and branding:&lt;/strong&gt; Slides automatically populate with charts, images, icons, and brand-consistent themes. We enforce fonts, palettes, and layouts so every presentation matches our design system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template reuse and smart slide editing:&lt;/strong&gt; The engine loads existing PPTX templates, clones slides, and replaces placeholders with dynamic content. We modify shapes, text boxes, tables, and charts in place, with no manual tweaking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiformat export (PPTX → PDF/Images):&lt;/strong&gt; We export final decks to PDF or per-slide images for sharing and archiving. The output preserves layout fidelity, making distribution simple across email, portals, and slide libraries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Discover how simple automated presentations can be, check out the &lt;a href="https://document.syncfusion.com/demos/powerpoint/default#/tailwind3" rel="noopener noreferrer"&gt;live demo&lt;/a&gt;, and the &lt;a href="https://help.syncfusion.com/document-processing/powerpoint/powerpoint-library/net/getting-started" rel="noopener noreferrer"&gt;quick-start guide&lt;/a&gt; to get a closer look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FPowerPoint-Library-with-automation.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FPowerPoint-Library-with-automation.jpg" alt="Key automation features of PowerPoint Library" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key automation features of PowerPoint Library&lt;/p&gt;

&lt;h2&gt;
  
  
  Want a no‑code setup instead?
&lt;/h2&gt;

&lt;p&gt;If you don’t want to spend time setting up servers, writing backend code, or configuring libraries, &lt;a href="https://help.syncfusion.com/document-processing/web-apis/overview" rel="noopener noreferrer"&gt;Syncfusion’s ready-to-deploy Document Processing Web APIs&lt;/a&gt; allow you to automate document processing workflows quickly and effortlessly. No extra license is required, as your existing Document SDK license already includes full access to these Web APIs. For more details, check out the &lt;a href="https://help.syncfusion.com/document-processing/web-apis/docker-image-hosting-guide" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The final outcome: A faster, cheaper, office-free document workflow
&lt;/h2&gt;

&lt;p&gt;Rebuilding our document pipeline with Syncfusion transformed daily operations, tasks that once felt fragile now run consistently fast and reliably across all environments.&lt;/p&gt;

&lt;p&gt;What began as a fix for recurring Adobe/Office bottlenecks turned into a long‑term upgrade for the entire platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster performance&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Rendering time dropped dramatically.&lt;/li&gt;
&lt;li&gt;Tasks that took minutes now finish in seconds.&lt;/li&gt;
&lt;li&gt;AI Coding Assistant speeds up complex document operations.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Lower operational costs&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;No Adobe/Office installations or licensing overhead.&lt;/li&gt;
&lt;li&gt;Reduced CPU and memory usage.&lt;/li&gt;
&lt;li&gt;Lightweight Web API Docker images make scaling cost‑efficient.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Greater stability at scale&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;No more COM errors, file locks, or random crashes.&lt;/li&gt;
&lt;li&gt;High‑volume processing runs smoothly.&lt;/li&gt;
&lt;li&gt;Parallel jobs stay consistent across distributed systems.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Stronger security &amp;amp; compliance&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Fewer attack surfaces thanks to removing desktop apps.&lt;/li&gt;
&lt;li&gt;Built‑in encryption, compliance formats, and safe rendering.&lt;/li&gt;
&lt;li&gt;Self‑hosted Web API Docker images ensure full policy control.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Higher developer productivity&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Fewer automation issues to troubleshoot.&lt;/li&gt;
&lt;li&gt;Easier to maintain, purely .NET‑based pipeline.&lt;/li&gt;
&lt;li&gt;AI Coding Assistant reduces repetitive coding.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Ready for future growth&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Scales effortlessly across Windows, Linux, Docker, and Kubernetes.&lt;/li&gt;
&lt;li&gt;Stable foundation for adding new formats and workloads.&lt;/li&gt;
&lt;li&gt;Designed for long‑term cloud‑native expansion.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Will migration to Syncfusion Document SDK require rewriting all my templates?
&lt;/h4&gt;

&lt;p&gt;Not necessarily. Most templates ( &lt;strong&gt;DOCX&lt;/strong&gt; , &lt;strong&gt;XLSX&lt;/strong&gt; , &lt;strong&gt;PPTX&lt;/strong&gt; , &lt;strong&gt;HTML&lt;/strong&gt; , &lt;strong&gt;PDF&lt;/strong&gt; ) can be reused as-is. Syncfusion’s libraries support fields, bookmarks, placeholders, mail merge, structured editing, and &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/working-with-pdf-templates" rel="noopener noreferrer"&gt;template-based document generation&lt;/a&gt; without requiring major layout changes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Are Syncfusion Document SDKs secure enough for regulated industries?
&lt;/h4&gt;

&lt;p&gt;Yes. The SDKs provide built-in support for encryption, redaction, digital signatures, secure PDF/A, form security, and isolated execution without external applications. These features align well with compliance requirements in finance, healthcare, legal, and government workflows.&lt;/p&gt;

&lt;h4&gt;
  
  
  Does migrating to Syncfusion Document SDK improve long-term maintainability and CI/CD stability?
&lt;/h4&gt;

&lt;p&gt;Yes. Migrating eliminates fragile COM automation, reduces breakages caused by desktop updates, and removes dependencies on Office installations. With a pure .NET codebase, build pipelines become easier to maintain and more predictable, improving long-term stability and reducing technical hurdles.&lt;/p&gt;

&lt;h4&gt;
  
  
  Do Syncfusion Document SDKs provide advanced formatting or rendering quality?
&lt;/h4&gt;

&lt;p&gt;Yes. Syncfusion &lt;a href="https://www.syncfusion.com/document-sdk" rel="noopener noreferrer"&gt;Document SDKs&lt;/a&gt; include independent, high-fidelity rendering engines for &lt;strong&gt;PDF&lt;/strong&gt; , &lt;strong&gt;Word&lt;/strong&gt; , &lt;strong&gt;Excel&lt;/strong&gt; , and &lt;strong&gt;PowerPoint&lt;/strong&gt;. They ensure consistent, accurate output across environments and are designed to match or exceed desktop application rendering, even for complex layouts, without requiring Adobe or Office.&lt;/p&gt;

&lt;h4&gt;
  
  
  Do Syncfusion SDKs use a lot of CPU or memory?
&lt;/h4&gt;

&lt;p&gt;No. Syncfusion libraries are optimized for multi-threaded processing, lazy loading, and high-volume workloads. They run purely in code without UI components, resulting in lower CPU and memory usage.&lt;/p&gt;

&lt;h1&gt;
  
  
  Can SDK-based workflows create dynamic, data-driven documents?
&lt;/h1&gt;

&lt;p&gt;Yes. You can easily generate documents from database values, making it simple to create invoices, reports, dashboards, mail-merged files, and other dynamically populated documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to transform your document pipeline?
&lt;/h2&gt;

&lt;p&gt;Thank you for taking the time to follow our journey. For us, the Syncfusion &lt;a href="https://www.syncfusion.com/document-sdk" rel="noopener noreferrer"&gt;Document Processing SDK&lt;/a&gt; has become the most reliable and future‑ready foundation for modern document automation, especially when traditional Adobe/Office‑based workflows could no longer keep up.&lt;/p&gt;

&lt;p&gt;If your document pipeline is running into the same limitations we faced, you don’t have to keep patching temporary fixes. Switching to Syncfusion gave us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A noticeably &lt;strong&gt;faster&lt;/strong&gt; pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable, stable automation&lt;/strong&gt; across environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower operational costs&lt;/strong&gt; without desktop dependencies&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;cleaner, maintainable architecture&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;And a &lt;strong&gt;future‑proof platform&lt;/strong&gt; built for cloud scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existing customers can download the latest version directly from their &lt;a href="https://www.syncfusion.com/sales/teamlicense" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. New users can explore everything with a free &lt;a href="https://www.syncfusion.com/downloads/document-sdk?tag=es-seo-document-sdk-download-trial" rel="noopener noreferrer"&gt;30-day trial&lt;/a&gt; and experience the full capabilities firsthand.&lt;/p&gt;

&lt;p&gt;If you ever need help getting started or want guidance on your workflow, our team is here for you through the &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forum&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback/document-sdk" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;. We’re always happy to assist!&lt;/p&gt;

</description>
      <category>fileformats</category>
      <category>documentprocessinglibrary</category>
      <category>documentsdks</category>
      <category>docxeditor</category>
    </item>
    <item>
      <title>Automating PDF Workflows in C#: Merge, Split, Convert, and Secure Documents</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Mon, 23 Feb 2026 09:57:35 +0000</pubDate>
      <link>https://dev.to/syncfusion/automating-pdf-workflows-in-c-merge-split-convert-and-secure-documents-abh</link>
      <guid>https://dev.to/syncfusion/automating-pdf-workflows-in-c-merge-split-convert-and-secure-documents-abh</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR: The fastest way to automate PDFs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Syncfusion .NET PDF Library lets developers merge, split, convert, and secure PDFs in minutes with clean C# APIs, no heavy setup, and no external dependencies. Prefer zero backend work? Their ready‑to‑deploy Docker‑based Document Processing Web APIs give you instant PDF automation through simple REST endpoints. From conversions to enterprise‑grade security, Syncfusion delivers a fast, scalable, end‑to‑end document workflow solution.&lt;/p&gt;
&lt;h2&gt;
  
  
  PDF automation is no longer optional: It’s essential
&lt;/h2&gt;

&lt;p&gt;Modern applications rely on fast, reliable, and fully automated document workflows. Whether you’re generating invoices, processing forms, or producing reports, businesses expect these tasks to run seamlessly in the background, with no manual steps, no delays. As organizations move beyond traditional, manual PDF handling, automation has become essential. It minimizes human error, accelerates internal operations, and ensures documents are processed consistently and accurately at scale.&lt;/p&gt;

&lt;p&gt;But developers often lose critical time wrestling with infrastructure instead of building features. That’s where Syncfusion&lt;sup&gt;®&lt;/sup&gt; changes the game.&lt;/p&gt;
&lt;h2&gt;
  
  
  Get a complete PDF workflow in 20 minutes
&lt;/h2&gt;

&lt;p&gt;Syncfusion &lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library" rel="noopener noreferrer"&gt;.NET PDF Library&lt;/a&gt; makes this possible with straightforward APIs, true cross‑platform support, and high‑performance components designed for real‑world business needs.&lt;/p&gt;

&lt;p&gt;Not familiar with .NET? No problem. Syncfusion also provides a ready‑to‑deploy Docker image for its Document Processing Web APIs, enabling you to launch PDF-automation services without configuring servers or managing runtime environments. With Docker, you benefit from simple deployment, easy scaling, and a consistent environment across platforms. With zero configuration, you gain instant access to essential PDF operations, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Merge&lt;/li&gt;
&lt;li&gt;Split&lt;/li&gt;
&lt;li&gt;Compress&lt;/li&gt;
&lt;li&gt;Rotate&lt;/li&gt;
&lt;li&gt;Protect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus full &lt;strong&gt;Office‑to‑PDF conversion&lt;/strong&gt;, all through simple HTTP endpoints.&lt;/p&gt;

&lt;p&gt;For enterprise teams seeking PDF automation with minimal setup and complexity, the &lt;a href="https://help.syncfusion.com/document-processing/web-apis/overview" rel="noopener noreferrer"&gt;Syncfusion Document Processing Web APIs&lt;/a&gt; provide a streamlined pathway to deployment, accelerating time-to-value.&lt;/p&gt;
&lt;h2&gt;
  
  
  The real problem: Merging, splitting, converting &amp;amp; securing PDFs takes way too long
&lt;/h2&gt;

&lt;p&gt;While PDF management may appear straightforward, most traditional approaches introduce unnecessary complexity for development teams. Time spent on environment preparation delays feature delivery, increases project overhead, and ultimately affects business outcomes. Common enterprise challenges include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance issues:&lt;/strong&gt; Large PDFs or batch operations often slow down or fail unexpectedly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent accuracy:&lt;/strong&gt; Text extraction, formatting, or layout detection often produces incorrect or unpredictable results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High resource usage:&lt;/strong&gt; Memory and CPU consumption spike during heavy PDF processing, affecting overall app performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of a unified workflow:&lt;/strong&gt; Developers must combine multiple tools just to merge, split, convert, and secure documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these constraints, delivering consistent and scalable PDF automation becomes resource-intensive, an inefficiency modern organizations cannot afford in a competitive market.&lt;/p&gt;
&lt;h2&gt;
  
  
  Syncfusion .NET PDF Library: Your all‑in‑one PDF power tool
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/overview" rel="noopener noreferrer"&gt;Syncfusion .NET PDF Library&lt;/a&gt;removes operational complexity by providing the speed, reliability, and flexibility required for enterprise document workflows. Programmatic PDF operations from generation to conversion enable teams to rapidly deliver business outcomes. This solution stands out because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight and dependency-free:&lt;/strong&gt; Ready to use without requiring any external components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform support:&lt;/strong&gt; Runs seamlessly on &lt;strong&gt;Windows&lt;/strong&gt; , &lt;strong&gt;Linux&lt;/strong&gt; , &lt;strong&gt;macOS&lt;/strong&gt; , &lt;strong&gt;Docker&lt;/strong&gt; , &lt;strong&gt;Azure Functions&lt;/strong&gt; , and &lt;strong&gt;AWS Lambda&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scales effortlessly:&lt;/strong&gt; Suitable for small apps all the way up to enterprise-grade workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This methodology reduces complexity across the workflow, enabling enterprises to implement scalable, reliable PDF automation aligned with operational goals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Looking beyond document processing, what if you need interactive PDF capabilities?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion offers a powerful &lt;a href="https://www.syncfusion.com/pdf-viewer-sdk" rel="noopener noreferrer"&gt;PDF Viewer SDK&lt;/a&gt; that allows you to view, annotate, select, organize, and design forms directly in your apps. The PDF Viewer SDK requires a &lt;a href="https://www.syncfusion.com/sales/pricing" rel="noopener noreferrer"&gt;separate license&lt;/a&gt;, which doesn’t include document processing libraries. This makes it easy to choose only the viewing capabilities you need while keeping your PDF workflow flexible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Want to see it in action? Try out our &lt;a href="https://document.syncfusion.com/demos/pdf-viewer/asp-net-core/pdfviewer/default#/tailwind3" rel="noopener noreferrer"&gt;PDF Viewer SDK live demo&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Setting up: What you need before you start
&lt;/h3&gt;

&lt;p&gt;Before you try any PDF operations, you’ll need to install the required &lt;a href="https://help.syncfusion.com/document-processing/nuget-packages" rel="noopener noreferrer"&gt;Syncfusion NuGet packages&lt;/a&gt;. This ensures your project has everything it needs to work with the .NET PDF Library. Use the following command to add it to your project:&lt;/p&gt;

&lt;p&gt;BASH&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet add package Syncfusion.Pdf.Net.Core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Looking for more details on PDF Creation? Explore the full user guide on how to &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/create-pdf-file-in-c-sharp-vb-net" rel="noopener noreferrer"&gt;create or generate a PDF file in C# and VB.NET&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Merge PDFs with a few lines of code
&lt;/h2&gt;

&lt;p&gt;Merging documents is a common requirement across many domains, such as combining invoices, assembling contract bundles, or grouping analysis reports. With Syncfusion PDF Library, &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/merge-documents" rel="noopener noreferrer"&gt;merging PDFs&lt;/a&gt; is extremely straightforward, and these capabilities make it truly simple to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean and intuitive APIs:&lt;/strong&gt; Simple method calls like &lt;a href="https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.PdfDocumentBase.html#Syncfusion_Pdf_PdfDocumentBase_Merge_Syncfusion_Pdf_PdfDocumentBase_Syncfusion_Pdf_Parsing_PdfLoadedDocument_" rel="noopener noreferrer"&gt;PdfDocumentBase.Merge()&lt;/a&gt; handles merging without extra steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No external dependencies:&lt;/strong&gt; Works out of the box, no plug‑ins, no special system requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast and optimized processing:&lt;/strong&gt; Built to handle large files and batches efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent output:&lt;/strong&gt; Ensures reliable results across platforms without manual adjustments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s how simple the merging process looks in code:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;finalDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfDocument&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Get the stream from existing PDF documents &lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;firstStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"data/file1.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;secondStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"data/file2.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Create a stream array for merging &lt;/span&gt;
        &lt;span class="n"&gt;Stream&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;streams&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;firstStream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secondStream&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

        &lt;span class="c1"&gt;// Merge PDF documents &lt;/span&gt;
        &lt;span class="n"&gt;PdfDocumentBase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;finalDocument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;streams&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Save the document &lt;/span&gt;
        &lt;span class="n"&gt;finalDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Output.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This merges documents &lt;strong&gt;in seconds&lt;/strong&gt;, no temporary files, no complex pipelines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FMerge-PDF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FMerge-PDF.png" alt="Merging PDFs using .NET PDF Library" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Merging PDFs using .NET PDF Library&lt;/p&gt;

&lt;h2&gt;
  
  
  Split PDFs into multiple files
&lt;/h2&gt;

&lt;p&gt;Large PDFs often need to be split for indexing, archiving, or use in cloud‑based systems, and our .NET PDF Library makes this process incredibly simple by allowing developers to extract exactly the pages they need with minimal code and zero configuration.&lt;/p&gt;

&lt;p&gt;Here’s how it makes &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/split-documents" rel="noopener noreferrer"&gt;PDF splitting&lt;/a&gt; easy and efficient:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select specific pages or page ranges using clean, intuitive APIs.&lt;/li&gt;
&lt;li&gt;Handle large documents with optimized performance, even during batch operations.&lt;/li&gt;
&lt;li&gt;Generate separate PDFs instantly, without complex logic or external tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is the code snippet for extracting a single page:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Load the PDF document&lt;/span&gt;
&lt;span class="n"&gt;PdfLoadedDocument&lt;/span&gt; &lt;span class="n"&gt;loadedDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfLoadedDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PDF_Succinctly.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create new PDF document&lt;/span&gt;
&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfDocument&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Import the particular page from the existing PDF&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ImportPage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loadedDocument&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Save the new PDF document&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PDF_Succinctly8.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Close the PDF documents&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;loadedDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Refer to the following image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FSplit-PDF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FSplit-PDF.png" alt="Extracting a single page from a PDF" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Extracting a single page from a PDF&lt;/p&gt;

&lt;p&gt;Instead of extracting a single page, we can also split the document by selecting a page range, as shown below:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create the page range values.&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[,]&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[,]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Load the PDF document&lt;/span&gt;
&lt;span class="n"&gt;PdfLoadedDocument&lt;/span&gt; &lt;span class="n"&gt;loadedDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfLoadedDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"../../../../Data/PDF_Succinctly.pdf"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Split the pages into fixed number&lt;/span&gt;
&lt;span class="n"&gt;loadedDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SplitByRanges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Output-{0}.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Close the PDF document&lt;/span&gt;
&lt;span class="n"&gt;loadedDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See the image below for clarification.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FSplitting-a-range-of-pages-into-a-separate-PDF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FSplitting-a-range-of-pages-into-a-separate-PDF.png" alt="Extracting a range of pages into a separate PDF" width="800" height="849"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Extracting a range of pages into a separate PDF&lt;/p&gt;

&lt;h2&gt;
  
  
  Convert Word/Excel/HTML/Image files to PDF perfectly
&lt;/h2&gt;

&lt;p&gt;Syncfusion .NET PDF Library makes PDF conversion effortless and dependable. Whether you’re working with Word, Excel, HTML, or images, the library ensures high accuracy and layout fidelity across all document formats.&lt;/p&gt;

&lt;p&gt;Let’s see how to convert &lt;strong&gt;Word to PDF&lt;/strong&gt;, &lt;strong&gt;images to PDF&lt;/strong&gt;, and &lt;strong&gt;HTML to PDF&lt;/strong&gt; using our .NET libraries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Convert Word to PDF (DOCX to PDF)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/document-sdk/net-word-library" rel="noopener noreferrer"&gt;Syncfusion .NET Word Library&lt;/a&gt; makes it easy to convert Word documents into clean, accurate PDFs without losing formatting or layout. This is especially useful for workflows that rely on document templates or automated report generation.&lt;/p&gt;

&lt;p&gt;Here’s why converting &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/working-with-document-conversions#converting-word-documents-to-pdf" rel="noopener noreferrer"&gt;Word to PDF&lt;/a&gt; with Syncfusion is valuable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preserves formatting and layout:&lt;/strong&gt; Even with complex styles, tables, and headers/footers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivers consistent output:&lt;/strong&gt; Essential for automated document generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles large documents:&lt;/strong&gt; Processes dynamic content without performance issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Produces professional PDFs:&lt;/strong&gt; Ideal for reports, contracts, letters, and mail merge outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s the code to convert a Word document to PDF:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Open the Word document file stream.&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;inputStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Template.docx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Loads an existing Word document.&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WordDocument&lt;/span&gt; &lt;span class="n"&gt;wordDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;WordDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inputStream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FormatType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Automatic&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Creates an instance of DocIORenderer.&lt;/span&gt;
        &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DocIORenderer&lt;/span&gt; &lt;span class="n"&gt;renderer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DocIORenderer&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Converts Word document into PDF document.&lt;/span&gt;
            &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;pdfDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ConvertToPDF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wordDocument&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Saves the PDF file to the file system.&lt;/span&gt;
                &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;outputStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Output.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadWrite&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;pdfDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outputStream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The image that follows details this process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FWord-To-PDF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FWord-To-PDF.png" alt="Converting Word to PDF using .NET PDF Library" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Converting Word to PDF using .NET PDF Library&lt;/p&gt;

&lt;h3&gt;
  
  
  Convert HTML-to-PDF
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library/html-to-pdf" rel="noopener noreferrer"&gt;HTML-to-PDF converter&lt;/a&gt; transforms webpages and dynamic HTML content into accurate PDFs, preserving the original appearance. This is perfect for apps that generate invoices, receipts, or form submissions.&lt;/p&gt;

&lt;p&gt;Here’s what makes our HTML to PDF conversion effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preserves full layout fidelity:&lt;/strong&gt; Including CSS, fonts, tables, and positioning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles dynamic content:&lt;/strong&gt; Supports JavaScript-rendered dashboards, forms, and templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensures pixel-perfect rendering:&lt;/strong&gt; Ideal for branded or style-heavy documents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile export options:&lt;/strong&gt; Perfect for web pages, invoices, tickets, certificates, and reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use the following code snippet for HTML‑to‑PDF conversion:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Initialize HTML to PDF converter.&lt;/span&gt;
&lt;span class="n"&gt;HtmlToPdfConverter&lt;/span&gt; &lt;span class="n"&gt;htmlConverter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HtmlToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;BlinkConverterSettings&lt;/span&gt; &lt;span class="n"&gt;blinkConverterSettings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;BlinkConverterSettings&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Set Blink viewport size.&lt;/span&gt;
&lt;span class="n"&gt;blinkConverterSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ViewPortSize&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Syncfusion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Drawing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Assign Blink converter settings to HTML converter.&lt;/span&gt;
&lt;span class="n"&gt;htmlConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConverterSettings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blinkConverterSettings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Convert URL to PDF document.&lt;/span&gt;
&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;htmlConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://www.syncfusion.com"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create a filestream.&lt;/span&gt;
&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;fileStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"HTML-to-PDF.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateNew&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadWrite&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Save and close the PDF document.&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FHTML-to-PDF-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FHTML-to-PDF-1.png" alt="Converting a HTML page to PDF using .NET PDF Library" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Converting a HTML page to PDF using .NET PDF Library&lt;/p&gt;

&lt;h3&gt;
  
  
  Convert images to PDF
&lt;/h3&gt;

&lt;p&gt;For scanning apps, mobile uploads, or workflows that handle photos as documents, our &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/converting-images-to-pdf" rel="noopener noreferrer"&gt;image-to-PDF&lt;/a&gt; conversion feature enables smooth and accurate conversion of images into high‑quality, standards‑compliant PDFs.&lt;/p&gt;

&lt;p&gt;Here’s why image-to-PDF conversion with Syncfusion is valuable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preserves image quality:&lt;/strong&gt;  Maintains clarity and resolution without distortion or compression loss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports multi-image conversion:&lt;/strong&gt;  Easily creates multi-page PDFs from multiple scans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic formatting:&lt;/strong&gt; Handles scaling and alignment for clean, consistent output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile use cases:&lt;/strong&gt;  Perfect for scanned documents, ID proofs, receipts, and photo archiving.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Refer to the code snippet for image‑to‑PDF conversion:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Your existing code starts here&lt;/span&gt;
&lt;span class="n"&gt;ImageToPdfConverter&lt;/span&gt; &lt;span class="n"&gt;imageToPdfConverter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ImageToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;imageToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PageSize&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfPageSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;A4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;imageToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ImagePosition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfImagePosition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TopLeftCornerOfPage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;imageStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppDomain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentDomain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Autumn Leaves.jpg"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;pdfDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;imageToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageStream&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;pdfDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;AppDomain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentDomain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"Output"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"Output.pdf"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the image below for a visual overview.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FImage-to-PDF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FImage-to-PDF.png" alt="Converting image to PDF using .NET PDF Library" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Converting image to PDF using .NET PDF Library&lt;/p&gt;

&lt;h2&gt;
  
  
  Secure PDFs with enterprise‑grade features
&lt;/h2&gt;

&lt;p&gt;The .NET PDF library delivers robust, &lt;a href="https://help.syncfusion.com/document-processing/pdf/pdf-library/net/working-with-security" rel="noopener noreferrer"&gt;enterprise-grade PDF security&lt;/a&gt; designed to protect sensitive data across industries. It includes reliable password protection to restrict access, precise permission controls to limit actions like printing or copying, and trusted digital signatures to verify authenticity and detect tampering. Together, these features ensure your PDFs remain secure, compliant, and safe for sharing in critical workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Password protection
&lt;/h3&gt;

&lt;p&gt;Our comprehensive PDF Library allows you to &lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library/digital-signature-pdf" rel="noopener noreferrer"&gt;encrypt PDFs with user and owner passwords&lt;/a&gt;, preventing unauthorized access. User passwords restrict opening the document, while owner passwords control editing permissions.&lt;/p&gt;

&lt;p&gt;Use the following code snippet to secure your PDF with password protection:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Reading security settings of the document&lt;/span&gt;
&lt;span class="n"&gt;PdfSecurity&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Security&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Set the document's permission settings&lt;/span&gt;
&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UserPassword&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"password123"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OwnerPassword&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"adminaccess
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See the accompanying image for more context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FSecure-PDF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FSecure-PDF.png" alt="Adding password protection to a PDF" width="591" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adding password protection to a PDF&lt;/p&gt;

&lt;h3&gt;
  
  
  Digital signatures
&lt;/h3&gt;

&lt;p&gt;It also enables us to &lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library/digital-signature-pdf" rel="noopener noreferrer"&gt;digitally sign PDFs with X.509 certificates&lt;/a&gt;, ensuring document authenticity, integrity, and non-repudiation. Digital signatures provide compliance with legal standards and create reliable audit trails for sensitive documents.&lt;/p&gt;

&lt;p&gt;Use the following code snippet to digitally sign your PDF:&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;PdfSignature&lt;/span&gt; &lt;span class="n"&gt;signature&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfSignature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Signature"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the image below for a visual overview.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FDigital-Signature.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2026%2F02%2FDigital-Signature.png" alt="Adding digital signature to a PDF" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adding digital signature to a PDF&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prefer JavaScript?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion also offers the &lt;a href="https://www.syncfusion.com/document-sdk/javascript-pdf-library" rel="noopener noreferrer"&gt;JavaScript PDF Library&lt;/a&gt; for secure, client‑side document processing with built‑in protection features and flexible browser‑based workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to give it a try?&lt;/strong&gt; Explore the &lt;a href="https://document.syncfusion.com/demos/pdf/javascript/#/tailwind3/pdf/default.html" rel="noopener noreferrer"&gt;JavaScript PDF Library live&lt;/a&gt; demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tired of building from scratch? Try our ready‑to‑deploy Document Processing Web APIs
&lt;/h2&gt;

&lt;p&gt;If you don’t want to spend time setting up servers, writing backend code, or configuring libraries, &lt;a href="https://help.syncfusion.com/document-processing/web-apis/overview" rel="noopener noreferrer"&gt;Syncfusion’s ready-to-deploy Document Processing Web APIs&lt;/a&gt; allow you to automate PDFs quickly and effortlessly. You can deploy the Docker image to your environment and instantly access powerful document features via simple REST endpoints.&lt;/p&gt;

&lt;p&gt;Below are the things you get right away to deploy Document Processing Web APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;ready‑to‑deploy Docker image&lt;/strong&gt; packed with built‑in PDF APIs.&lt;/li&gt;
&lt;li&gt;Ideal for  &lt;strong&gt;quick deployment&lt;/strong&gt; and fast PDF automation in any project without needing to be familiar with .NET.&lt;/li&gt;
&lt;li&gt;Developer‑friendly with zero .NET learning curve.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduce infrastructure costs&lt;/strong&gt; by deploying in your own cloud environment.&lt;/li&gt;
&lt;li&gt;Enhanced &lt;strong&gt;security&lt;/strong&gt; with your own cloud infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero coding or backend setup&lt;/strong&gt; required to start using it.&lt;/li&gt;
&lt;li&gt;Support for &lt;strong&gt;merge, split, convert, compress, and secure&lt;/strong&gt; operations.&lt;/li&gt;
&lt;li&gt;Works with &lt;strong&gt;any frontend or backend&lt;/strong&gt; via straightforward REST calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re interested in hosting the ready‑to‑deploy Docker image for Syncfusion’s Document Processing Web APIs, refer to our &lt;a href="https://help.syncfusion.com/document-processing/web-apis/docker-image-hosting-guide" rel="noopener noreferrer"&gt;Docker image hosting guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Do I need a PDF viewer to perform PDF operations?
&lt;/h4&gt;

&lt;p&gt;No. Syncfusion lets you merge, split, convert, and secure PDFs programmatically without any viewer component.&lt;/p&gt;

&lt;h4&gt;
  
  
  Which platforms support the PDF Library?
&lt;/h4&gt;

&lt;p&gt;It runs seamlessly on Windows, Linux, macOS, Docker containers, Azure Functions, and AWS Lambda.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can Syncfusion handle large or complex PDFs?
&lt;/h4&gt;

&lt;p&gt;Yes. The library is optimized for performance. It can efficiently handle large documents and batch operations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Is it possible to combine multiple operations in one workflow?
&lt;/h4&gt;

&lt;p&gt;Absolutely, merge, split, convert, and secure operations can be chained effortlessly in a single pipeline.&lt;/p&gt;

&lt;h4&gt;
  
  
  How do I get started without writing backend code?
&lt;/h4&gt;

&lt;p&gt;Use the ready‑to‑deploy Document Processing Web APIs, which expose PDF operations through simple REST endpoints.&lt;/p&gt;

&lt;h4&gt;
  
  
  Does the library maintain layout accuracy during conversions?
&lt;/h4&gt;

&lt;p&gt;Yes. Conversions from Word, HTML, and images preserve fonts, formatting, tables, and visual structure.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can I restrict actions like printing or copying while securing a PDF?
&lt;/h4&gt;

&lt;p&gt;Yes. You can set a user password, an owner password, and fine‑tune specific permissions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Does Syncfusion support multiple digital signatures?
&lt;/h4&gt;

&lt;p&gt;Yes. You can apply multiple signatures, including sequential and certifying signatures, in one document.&lt;/p&gt;

&lt;h4&gt;
  
  
  Is Syncfusion suitable for enterprise workloads?
&lt;/h4&gt;

&lt;p&gt;Definitely, the library is built for high performance, scalability, and reliable automation across enterprise systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts: A complete PDF automation system in 20 minutes
&lt;/h2&gt;

&lt;p&gt;Thank you for taking the time to read this blog. Building PDF workflows doesn’t have to take days, and Syncfusion proves it. With our &lt;a href="https://www.syncfusion.com/document-sdk/net-pdf-library" rel="noopener noreferrer"&gt;.NET PDF library&lt;/a&gt; and ready‑to‑use APIs, we can move from setup to production in as little as 20 minutes. The platform is fast, stable, and built to handle real‑world document workloads.&lt;/p&gt;

&lt;p&gt;Here are the key takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports complete PDF workflows, including creation, conversion, merging, splitting, and automation.&lt;/li&gt;
&lt;li&gt;Provides enterprise‑grade security with password protection, permission controls, and digital signatures.&lt;/li&gt;
&lt;li&gt;Offers high‑performance APIs optimized for modern apps and large‑scale processing.&lt;/li&gt;
&lt;li&gt;Ensures consistent behavior across platforms, enabling seamless integration with any tech stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get started, try the Syncfusion .NET PDF Library SDK to generate, modify, and automate PDFs effortlessly. If you’re a Syncfusion user, you can download the setup from the &lt;a href="https://www.syncfusion.com/sales/teamlicense" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. Otherwise, you can download a free &lt;a href="https://www.syncfusion.com/downloads/document-sdk?tag=es-seo-document-sdk-download-trial" rel="noopener noreferrer"&gt;30-day trial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also contact us through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forum&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback/document-sdk" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt; for queries. We are always happy to assist you!&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>net</category>
      <category>netpdflibrary</category>
      <category>csharp</category>
    </item>
    <item>
      <title>.NET 11 Preview for .NET MAUI: Simplify XAML with Inline C# Expressions</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Fri, 20 Feb 2026 11:21:37 +0000</pubDate>
      <link>https://dev.to/syncfusion/net-11-preview-for-net-maui-simplify-xaml-with-inline-c-expressions-2k3j</link>
      <guid>https://dev.to/syncfusion/net-11-preview-for-net-maui-simplify-xaml-with-inline-c-expressions-2k3j</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; What if your MAUI UI logic didn’t need converters or extra ViewModel properties at all? .NET 11 preview C# expressions let you embed tiny, safe, strongly typed C# snippets directly in XAML, cleaning up formatting, UI only math, and conditionals with source generated speed. Still experimental, but perfect for demos and early exploration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this .NET 11 Preview feature is blowing up in the MAUI community
&lt;/h2&gt;

&lt;p&gt;Designing clean UI in .NET MAUI sounds easy, but formatting text, combining values, or doing simple UI calculations often forces us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create one‑off converters,&lt;/li&gt;
&lt;li&gt;Spin up extra &lt;strong&gt;ViewModel&lt;/strong&gt; properties, or&lt;/li&gt;
&lt;li&gt;Use clunky &lt;strong&gt;StringFormat&lt;/strong&gt; hacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It all feels like too much work for something as small as showing a price. But .NET 11 fixes this with the new feature called *&lt;em&gt;C# Expressions in XAML. *&lt;/em&gt; A small change with a huge, exciting impact!&lt;/p&gt;

&lt;p&gt;With this preview feature, you can finally write short, safe C# expressions directly in XAML, no converter, no boilerplate, no ceremony.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly are “C# Expressions in XAML”?
&lt;/h2&gt;

&lt;p&gt;C# expressions in XAML let us embed short snippets directly into our bindings. Instead of pairing a binding with a converter, we can express the final display value directly in markup.&lt;/p&gt;

&lt;p&gt;The feature is powered by the XAML Source Generator, which validates and generates strongly typed code from those expressions at build time. This keeps everything safe, fast, and readable, while making XAML feel much more natural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this feature matters a lot
&lt;/h2&gt;

&lt;p&gt;Here are the key benefits of using C# expressions in XAML:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster onboarding:&lt;/strong&gt; Beginners don’t need to learn converters or extra patterns just to display formatted values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less boilerplate:&lt;/strong&gt; Small, view-only transformations don’t force extra ViewModel properties or one-off converters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stronger tooling:&lt;/strong&gt; Source generation brings lightning-fast compile-time validation and a performance boost over older methods.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these superpowers make our UI code feel as intuitive and lively as what we imagine on the screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use it (and when not to)
&lt;/h2&gt;

&lt;p&gt;Like any tool, C# expressions in XAML shine in the right scenarios.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use it for small, presentational logic:

&lt;ul&gt;
&lt;li&gt;Formatting values (Currency, date, etc.)&lt;/li&gt;
&lt;li&gt;Simple math&lt;/li&gt;
&lt;li&gt;String composition&lt;/li&gt;
&lt;li&gt;Toggling visuals based on a boolean&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Avoid it for complex, reusable, business-critical logic, including:

&lt;ul&gt;
&lt;li&gt;Pricing rules&lt;/li&gt;
&lt;li&gt;Tax calculations&lt;/li&gt;
&lt;li&gt;Logic that needs unit tests or reuse across multiple screens&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; If the logic isn’t obvious in one quick read, move it to the &lt;strong&gt;ViewModel&lt;/strong&gt; or domain layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting comfortable with the syntax
&lt;/h2&gt;

&lt;p&gt;Here are a few small examples that reflect everyday UI scenarios where developers often fall back on converters or extra &lt;strong&gt;ViewModel&lt;/strong&gt; properties today.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Currency formatting without a converter
&lt;/h3&gt;

&lt;p&gt;We can format currency using standard C# formatting. It displays localized currency according to the device or app culture.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{$'{Price:C2}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2) Show a computed total directly in the UI
&lt;/h3&gt;

&lt;p&gt;For basic totals, we can keep the logic right next to the label.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{$'Total: {Price * Quantity:C2}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) Build user-friendly text with string interpolation
&lt;/h3&gt;

&lt;p&gt;Instead of creating separate property in the &lt;strong&gt;ViewModel&lt;/strong&gt; , we can directly perform string interpolation in XAML.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{$'{Quantity} × {ProductName}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4) Use a conditional expression for status
&lt;/h3&gt;

&lt;p&gt;For the simple UI state, there is no need for converters anymore.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Active"&lt;/span&gt; &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"{IsActive}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Inactive"&lt;/span&gt; &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"{!IsActive}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5) Conditional styling stays clean too
&lt;/h3&gt;

&lt;p&gt;We can also switch colors based on the state.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{IsActive ? 'Active' : 'Inactive'}"&lt;/span&gt;
       &lt;span class="na"&gt;TextColor=&lt;/span&gt;&lt;span class="s"&gt;"{IsActive ? Colors.Green : Colors.Gray}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mini page walkthrough: Before vs. after
&lt;/h2&gt;

&lt;p&gt;Want to see the magic? Nothing beats comparing a classic page with one upgraded to C# expressions in XAML for .NET MAUI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: Works, but adds extra steps
&lt;/h3&gt;

&lt;p&gt;A typical XAML page might start with bindings like these:&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Price, StringFormat='{}{0:C2}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Total}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding DisplayText}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To support this, we often introduce &lt;strong&gt;ViewModel&lt;/strong&gt; properties that exist purely for formatting the UI.&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;DisplayText&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Quantity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; × &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ProductName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Total&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Quantity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After: The UI reads like the UI
&lt;/h3&gt;

&lt;p&gt;With C# expressions in XAML, the page instantly feels more direct and readable. Instead of hiding display logic in the &lt;strong&gt;ViewModel&lt;/strong&gt; , you can now express it right where it belongs—front and center in the UI!&lt;/p&gt;

&lt;p&gt;Our XAML transforms, looking cleaner, more expressive, and aligning perfectly with our original creative vision!&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;ContentPage&lt;/span&gt; &lt;span class="na"&gt;x:DataType=&lt;/span&gt;&lt;span class="s"&gt;"local:ProductViewModel"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;VerticalStackLayout&lt;/span&gt; &lt;span class="na"&gt;Spacing=&lt;/span&gt;&lt;span class="s"&gt;"6"&lt;/span&gt; &lt;span class="na"&gt;Padding=&lt;/span&gt;&lt;span class="s"&gt;"16"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{ProductName}"&lt;/span&gt;
          &lt;span class="na"&gt;FontAttributes=&lt;/span&gt;&lt;span class="s"&gt;"Bold"&lt;/span&gt;
          &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;"18"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{$'{Price:C2}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{$'{Quantity} × {ProductName}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{$'Total: {Price * Quantity:C2}'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Active"&lt;/span&gt;
          &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"{IsActive}"&lt;/span&gt;
          &lt;span class="na"&gt;TextColor=&lt;/span&gt;&lt;span class="s"&gt;"Green"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Inactive"&lt;/span&gt;
          &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"{!IsActive}"&lt;/span&gt;
          &lt;span class="na"&gt;TextColor=&lt;/span&gt;&lt;span class="s"&gt;"Gray"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;/VerticalStackLayout&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ContentPage&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For more details, refer to the example for XAML C# expressions in .NET MAUI (.NET 11) &lt;a href="https://github.com/SyncfusionExamples/Csharp-Expressions-in-XAML--A-Beginner-Friendly-Leap-for-.NET-MAUI-in-.NET-11" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this fits into MVVM
&lt;/h2&gt;

&lt;p&gt;It is important to emphasize that C# expressions in XAML are a presentation convenience, not a replacement for MVVM or &lt;strong&gt;ViewModels&lt;/strong&gt;. Use expressions for short, UI-focused transformations. Keep business logic, calculations that affect behavior, and shared rules in the &lt;strong&gt;ViewModel&lt;/strong&gt; or domain layer where they can be tested and reused.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it production-ready?
&lt;/h2&gt;

&lt;p&gt;At this stage, the feature is not production ready. It is experimental and tied to the &lt;strong&gt;.NET 11 preview&lt;/strong&gt; and &lt;strong&gt;XamlSourceGen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This makes it excellent for learning, prototyping, and internal demos. However, for customer-facing releases, it is better to wait for stable support unless you control the full deployment environment and are comfortable with preview dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to try it (Beginner-friendly setup)
&lt;/h2&gt;

&lt;p&gt;If you want to experiment safely, start small and follow these steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Enable preview features
&lt;/h3&gt;

&lt;p&gt;Use the .NET 11 preview and enable the preview tag.&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;EnablePreviewFeatures&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/EnablePreviewFeatures&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Turn on XAML source generation
&lt;/h3&gt;

&lt;p&gt;Next, make sure XAML source generation is enabled. This feature works only with active &lt;strong&gt;XamlSourceGen.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;XAML&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;MauiXamlInflator&amp;gt;&lt;/span&gt;SourceGen&lt;span class="nt"&gt;&amp;lt;/MauiXamlInflator&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Use x:DataType for your page
&lt;/h3&gt;

&lt;p&gt;Prefer compiled bindings with &lt;strong&gt;x:DataType&lt;/strong&gt; so expressions are strongly typed and tool support is better.&lt;/p&gt;

&lt;p&gt;C#&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;DataType&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"local:MainViewModel"&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Start with simple expressions
&lt;/h3&gt;

&lt;p&gt;Finally, add one expression at a time. Formatting values (like prices or labels) are usually the easiest and safest place to begin.&lt;/p&gt;

&lt;h2&gt;
  
  
  The future of .NET MAUI
&lt;/h2&gt;

&lt;p&gt;C# expression in XAML nudges MAUI toward more natural, C#-centric markup workflows. By reducing boilerplate and enabling compile-time checks via source generation, the developer experience becomes clearer and less error-prone.&lt;/p&gt;

&lt;p&gt;As .NET 11 progresses, you can expect this feature to evolve and stabilize, potentially becoming a standard part of how developers write XAML in .NET MAUI.&lt;/p&gt;

&lt;p&gt;Refer to the following image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/blogs/wp-content/uploads/2026/02/NET-11-preview-update-Using-C-expression-in-XAML-for-.NET-MAUI-framework-1.gif" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqq9tdvw842nzjrbh74c.gif" alt=".NET 11 preview update: Using C# expression in XAML for .NET MAUI framework" width="720" height="367"&gt;&lt;/a&gt;&lt;/p&gt;
.NET 11 preview update: Using C# expression in XAML for .NET MAUI framework



&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Can I use C# expressions in XAML without enabling XamlSourceGen?
&lt;/h4&gt;

&lt;p&gt;No. This feature works only when XamlSourceGen is enabled because the expressions are processed and compiled through a source generator. Without it, the XAML tooling/parser won’t understand or translate the expressions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Is this feature stable enough for production apps?
&lt;/h4&gt;

&lt;p&gt;Not yet. C# expressions in XAML are currently experimental and tied to .NET 11 preview builds. It’s great for learning, demos, and prototypes, but for customer-facing production apps it’s safer to wait until it becomes officially supported and stable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Do C# expressions replace converters or MVVM patterns?
&lt;/h4&gt;

&lt;p&gt;No. They’re meant for small UI transformations like formatting, string interpolation, or basic calculations. Converters and MVVM are still important for reusable transformations, complex logic, and business rules that should be tested and shared across screens.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can I call methods inside a C# expression in XAML?
&lt;/h4&gt;

&lt;p&gt;Only simple and safe expressions are intended to work well. We should avoid async calls and multi-step operations. The purpose is to keep UI logic lightweight and readable, not to move app logic into XAML.&lt;/p&gt;

&lt;h4&gt;
  
  
  Will these expressions slow down my app?
&lt;/h4&gt;

&lt;p&gt;Typically, no. Because expressions are compiled via the source generator. They’re strongly typed and avoid some reflection-heavy behavior common in classic bindings. In most cases, performance should be equal or better, depending on the page and scenario.&lt;/p&gt;

&lt;h4&gt;
  
  
  Does this work with x:DataType (compiled bindings)?
&lt;/h4&gt;

&lt;p&gt;Yes. Using &lt;strong&gt;x:DataType&lt;/strong&gt; is recommended because it improves type safety, enables better compile-time checking, and usually provides better IntelliSense while authoring XAML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking ahead
&lt;/h2&gt;

&lt;p&gt;Thanks so much for reading! If you’re diving into .NET MAUI, this is truly one of the most thrilling improvements ahead. C# expressions in XAML bring excitement, clarity, and an incredibly intuitive way to shape UI logic. As .NET 11 evolves, this tool will only become more powerful and transformative!&lt;/p&gt;

&lt;p&gt;Whether it’s your first MAUI project or you’re perfecting your UI architecture, this addition is set to supercharge your workflow, making development fast, clean, and genuinely rewarding!&lt;/p&gt;

&lt;p&gt;If you’re using Syncfusion &lt;a href="https://www.syncfusion.com/maui-controls" rel="noopener noreferrer"&gt;.NET MAUI controls&lt;/a&gt;, the latest version of Essential Studio is available from your &lt;a href="https://www.syncfusion.com/account/downloads" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. New to Syncfusion? You can try the full suite with a &lt;a href="https://www.syncfusion.com/downloads" rel="noopener noreferrer"&gt;30‑day free trial&lt;/a&gt; and experience a production‑ready collection of high‑performance MAUI controls that pair perfectly with the .NET 11 workflow.&lt;/p&gt;

&lt;p&gt;If you have questions or need help, feel free to reach out through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forum&lt;/a&gt;, &lt;a href="https://www.syncfusion.com/feedback" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;, or &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;. Our team is always happy to assist you!&lt;/p&gt;

</description>
      <category>netmaui</category>
      <category>net</category>
      <category>csharp</category>
      <category>maui</category>
    </item>
    <item>
      <title>How to Build a Blazor HeatMap Chart to Visualize Global Temperature Anomalies</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Tue, 12 Aug 2025 15:26:51 +0000</pubDate>
      <link>https://dev.to/syncfusion/how-to-build-a-blazor-heatmap-chart-to-visualize-global-temperature-anomalies-3189</link>
      <guid>https://dev.to/syncfusion/how-to-build-a-blazor-heatmap-chart-to-visualize-global-temperature-anomalies-3189</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Curious how to turn climate data into compelling visuals? This tutorial guides developers through building a Blazor HeatMap chart to showcase global temperature anomalies. You’ll learn how to enhance interactivity with custom tooltips, gradient color mapping, and legend configuration, making your charts both informative and visually impactful.&lt;/p&gt;

&lt;p&gt;Welcome to our &lt;strong&gt;Weekly Data Visualization&lt;/strong&gt; blog series!&lt;/p&gt;

&lt;p&gt;Visualizing complex climate data can be challenging, but with the right tools, it becomes a powerful way to uncover trends and tell compelling stories.  Whether building dashboards for environmental analytics or experimenting with Blazor’s charting capabilities, this hands-on guide offers a practical, code-driven solution to a real-world data challenge.&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll learn how to build a &lt;a href="https://www.syncfusion.com/blazor-components/blazor-heatmap-chart" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor HeatMap&lt;/a&gt; that tracks  &lt;strong&gt;global temperature anomalies&lt;/strong&gt; from 2004 to 2024. Using interactive features like  &lt;strong&gt;custom tooltips&lt;/strong&gt;, &lt;strong&gt;gradient-based color mapping&lt;/strong&gt;, and  &lt;strong&gt;legend configuration&lt;/strong&gt;, you’ll transform raw data into a dynamic, developer-friendly visualization.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly is a temperature anomaly?
&lt;/h2&gt;

&lt;p&gt;A temperature anomaly is the difference between the observed temperature and a reference or average temperature for a specific location and time period. Instead of showing the absolute temperature (like 30°C), it shows how much warmer or cooler it was compared to a baseline. This approach helps highlight deviations and trends more effectively, making it easier to compare climate patterns across different regions and decades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor HeatMap?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor HeatMap&lt;/strong&gt; is a versatile data visualization component designed to represent values across a two-dimensional grid using color gradients. It’s ideal for highlighting patterns, trends, and deviations in large datasets, making it a valuable tool for dashboards, analytics platforms, and scientific applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Seamless integration with Blazor:&lt;/strong&gt; Explicitly built for Blazor, the HeatMap component integrates effortlessly into your application with minimal configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich customization options:&lt;/strong&gt; You can customize everything from color palettes and labels to cell formatting and legends to suit your data and design needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive features:&lt;/strong&gt; Enhance user interaction with dynamic tooltips, zooming, and responsive updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility and responsiveness:&lt;/strong&gt; Fully responsive and compliant with accessibility standards for a consistent experience across devices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; To implement the Blazor HeatMap component, refer to the official &lt;a href="https://blazor.syncfusion.com/documentation/heatmap-chart/getting-started-with-web-app" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizing the Blazor HeatMap to visualize temperature anomalies
&lt;/h2&gt;

&lt;p&gt;Follow the steps below to visualize global temperature anomalies from 2004 to 2024 using the &lt;strong&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor HeatMap&lt;/strong&gt; component and learn how to customize it for a more insightful user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Gathering the data
&lt;/h2&gt;

&lt;p&gt;Before visualizing data in a Blazor HeatMap, it’s important to gather accurate and meaningful statistics. This example uses global land and ocean temperature anomaly (in °C) records from 2004 to 2024, sourced from &lt;a href="https://www.ncei.noaa.gov/access/monitoring/climate-at-a-glance/global/time-series/globe/tavg/land_ocean/ytd/0/2004-2024" rel="noopener noreferrer"&gt;NCEI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Creating the data model
&lt;/h2&gt;

&lt;p&gt;To effectively visualize temperature anomalies in the HeatMap, a &lt;strong&gt;HeatMapCell&lt;/strong&gt; class must be defined to represent monthly temperature data. This class includes three essential properties: &lt;strong&gt;Month&lt;/strong&gt;, &lt;strong&gt;Year&lt;/strong&gt;, and &lt;strong&gt;Anomaly&lt;/strong&gt;, which together capture the temporal and statistical dimensions of the dataset.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HeatMapCell&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Month&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Year&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;Anomaly&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The data will be stored in a list named &lt;strong&gt;HeatMapData&lt;/strong&gt;. Two string arrays should also be created to represent the axis labels: &lt;strong&gt;XAxisLabels&lt;/strong&gt; for the months and &lt;strong&gt;YAxisLabels&lt;/strong&gt; for the years. The &lt;strong&gt;HeatMapData&lt;/strong&gt; list should be initialized using the &lt;strong&gt;OnInitialized&lt;/strong&gt; lifecycle method of the Blazor component to ensure it is ready for data binding when the component is rendered.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;XAxisLabels&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="s"&gt;"January"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"February"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"March"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"April"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"May"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"June"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="s"&gt;"July"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"August"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"September"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"October"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"November"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"December"&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;YAxisLabels&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="s"&gt;"2004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2005"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2006"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2007"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2008"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2009"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2010"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="s"&gt;"2011"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2012"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2013"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2014"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2015"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2016"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2017"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="s"&gt;"2018"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2019"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2020"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2021"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2022"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2023"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"2024"&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;HeatMapCell&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;HeatMapData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnInitialized&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;HeatMapData&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;HeatMapCell&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HeatMapCell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Month&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"January"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Anomaly&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.62&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HeatMapCell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Month&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"February"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Anomaly&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.66&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HeatMapCell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Month&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"March"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Anomaly&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.66&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HeatMapCell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Month&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"April"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Anomaly&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.65&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HeatMapCell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Month&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"May"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Year&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2004"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Anomaly&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.6&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
       &lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;..,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Initializing the Syncfusion&lt;sup&gt;® &lt;/sup&gt;Heat Map Chart
&lt;/h2&gt;

&lt;p&gt;With the data and labels prepared, the next step is to render the HeatMap component in your Blazor application. Syncfusion’s &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.SfHeatMap-1.html#Syncfusion_Blazor_HeatMap_SfHeatMap_1_DataSource" rel="noopener noreferrer"&gt;SfHeatMap&lt;/a&gt; component makes this process straightforward by binding your data source and axis labels directly in the component.&lt;/p&gt;

&lt;p&gt;In the example below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The dataset containing temperature anomalies is assigned to the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.SfHeatMap-1.html#Syncfusion_Blazor_HeatMap_SfHeatMap_1_DataSource" rel="noopener noreferrer"&gt;DataSource&lt;/a&gt; property of the &lt;strong&gt;HeatMap&lt;/strong&gt; component.&lt;/li&gt;
&lt;li&gt;The arrays created for axis labels are bound to the &lt;strong&gt;Labels&lt;/strong&gt; properties of the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.SfHeatMap-1.html#Syncfusion_Blazor_HeatMap_SfHeatMap_1_DataSource" rel="noopener noreferrer"&gt;HeatMapXAxis&lt;/a&gt; and &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.SfHeatMap-1.html#Syncfusion_Blazor_HeatMap_SfHeatMap_1_DataSource" rel="noopener noreferrer"&gt;HeatMapYAxis&lt;/a&gt; components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup ensures that each cell in the HeatMap corresponds to a specific month and year, with its color intensity reflecting the temperature anomaly value. The result is a clear, color-coded visualization of climate trends over two decades.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;SfHeatMap&lt;/span&gt; &lt;span class="na"&gt;DataSource=&lt;/span&gt;&lt;span class="s"&gt;"@HeatMapData"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;HeatMapXAxis&lt;/span&gt; &lt;span class="na"&gt;Labels=&lt;/span&gt;&lt;span class="s"&gt;"@XAxisLabels"&lt;/span&gt; &lt;span class="na"&gt;OpposedPosition=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/HeatMapXAxis&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;HeatMapYAxis&lt;/span&gt; &lt;span class="na"&gt;Labels=&lt;/span&gt;&lt;span class="s"&gt;"@YAxisLabels"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/HeatMapYAxis&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;SfHeatMap&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Customizing HeatMap Chart appearance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Customizing the Chart title
&lt;/h3&gt;

&lt;p&gt;It’s important to include a clear and descriptive &lt;a href="https://blazor.syncfusion.com/documentation/heatmap-chart/appearance#title" rel="noopener noreferrer"&gt;title&lt;/a&gt; for the HeatMap to provide context and enhance readability. The &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.HeatMapTitleSettings.html" rel="noopener noreferrer"&gt;HeatMapTitleSettings&lt;/a&gt; component in Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor makes it easy to add and style the chart title.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;HeatMapTitleSettings&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Global Land and Ocean Temperature Anomalies (2004–2024)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;HeatMapTitleTextStyle&lt;/span&gt; &lt;span class="na"&gt;Size=&lt;/span&gt;&lt;span class="s"&gt;"18"&lt;/span&gt; &lt;span class="na"&gt;FontWeight=&lt;/span&gt;&lt;span class="s"&gt;"Bold"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"Black"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/HeatMapTitleTextStyle&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/HeatMapTitleSettings&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Color mapping
&lt;/h3&gt;

&lt;p&gt;To make the HeatMap visually intuitive and informative, a gradient &lt;a href="https://blazor.syncfusion.com/documentation/heatmap-chart/palette#gradient" rel="noopener noreferrer"&gt;color palette&lt;/a&gt; is applied using the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.HeatMapPaletteSettings.html" rel="noopener noreferrer"&gt;HeatMapPaletteSettings&lt;/a&gt; component. This palette maps temperature anomaly values to a continuous range of colors, allowing users to easily distinguish between cooler and warmer periods.&lt;/p&gt;

&lt;p&gt;In the example below, &lt;strong&gt;lower anomaly values are represented by shades of blue&lt;/strong&gt;, while &lt;strong&gt;higher values transition through yellow and orange to warmer shades of red&lt;/strong&gt;. This natural color progression mirrors common visual associations with temperature, making the visualization more accessible and meaningful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;HeatMapPaletteSettings&lt;/span&gt; &lt;span class="na"&gt;Type=&lt;/span&gt;&lt;span class="s"&gt;"PaletteType.Gradient"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;HeatMapPalettes&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"0.0"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#313695"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"0.3"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#4575b4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"0.5"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#91bfdb"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"0.7"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#e0f3f8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"1.0"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#fee090"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"1.3"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#fdae61"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"1.5"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#d73027"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;HeatMapPalette&lt;/span&gt; &lt;span class="na"&gt;Value=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#d73027"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/HeatMapPalette&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/HeatMapPalettes&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/HeatMapPaletteSettings&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Customizing the tooltip
&lt;/h3&gt;

&lt;p&gt;To provide users with detailed insights at a glance, you can customize the &lt;a href="https://blazor.syncfusion.com/documentation/heatmap-chart/tooltip" rel="noopener noreferrer"&gt;tooltip&lt;/a&gt; in the Blazor HeatMap using the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.HeatMapTooltipSettings.html" rel="noopener noreferrer"&gt;HeatMapTooltipSettings&lt;/a&gt; component. This allows you to display contextual information, such as the month, year, and temperature anomaly, when hovering over a specific cell.&lt;/p&gt;

&lt;p&gt;In the example below, the tooltip is styled with a dark background and white text for better contrast and readability. The content is dynamically populated using the &lt;strong&gt;HeatMapCell&lt;/strong&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;HeatMapTooltipSettings&lt;/span&gt; &lt;span class="na"&gt;Fill=&lt;/span&gt;&lt;span class="s"&gt;"#000000"&lt;/span&gt; &lt;span class="na"&gt;Enable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Template&amp;gt;&lt;/span&gt;
        @{
            var TooltipTemplate = context as HeatMapCell;
        }
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background-color:black; color:white; font-size:12px; padding:8px; border-radius:4px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"text-align:center; font-weight:bold;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                @TooltipTemplate.Month
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display:flex; justify-content:center; gap:4px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;@TooltipTemplate.Year&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;:&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;@($"{TooltipTemplate.Anomaly} °C")&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Template&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/HeatMapTooltipSettings&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuring a legend
&lt;/h3&gt;

&lt;p&gt;To help users interpret the color gradient used in the HeatMap, you can enable and customize the &lt;a href="https://blazor.syncfusion.com/documentation/heatmap-chart/legend" rel="noopener noreferrer"&gt;legend&lt;/a&gt; using the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.HeatMap.HeatMapLegendSettings.html" rel="noopener noreferrer"&gt;HeatMapLegendSettings&lt;/a&gt; component. The legend provides a visual reference for the range of temperature anomaly values and their corresponding colors.&lt;/p&gt;

&lt;p&gt;In the example below, the legend is positioned at the bottom of the chart and assigned a specific width to maintain a consistent and balanced layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;HeatMapLegendSettings&lt;/span&gt; &lt;span class="na"&gt;Position=&lt;/span&gt;&lt;span class="s"&gt;"Syncfusion.Blazor.HeatMap.LegendPosition.Bottom"&lt;/span&gt; &lt;span class="na"&gt;Visible=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"80%"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/HeatMapLegendSettings&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After executing these code examples, you will see the chart displayed as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/blogs/wp-content/uploads/2025/08/Blazor-HeatMap-Chart-displaying-global-land-and-ocean-temperature-anomalies.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ewd9de88kmhwzc1ww96.png" alt="Blazor HeatMap Chart displaying global land and ocean temperature anomalies" width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Blazor HeatMap Chart displaying global land and ocean temperature anomalies&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample reference
&lt;/h2&gt;

&lt;p&gt;For more details, refer to the complete sample on the &lt;a href="https://blazorplayground.syncfusion.com/BNVoZvXqmupIkwPn" rel="noopener noreferrer"&gt;Blazor Playground demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thank you for reading! By building a &lt;a href="https://www.syncfusion.com/blazor-components/blazor-heatmap-chart" rel="noopener noreferrer"&gt;Blazor HeatMap Chart&lt;/a&gt;, you’ve unlocked a powerful way to visualize complex climate data and uncover meaningful patterns in global temperature anomalies from 2004 to 2024. With features like custom tooltips, gradient color mapping, and legend configuration, you now have the tools to create interactive, data-rich visualizations that go beyond static charts.&lt;/p&gt;

&lt;p&gt;With just a few lines of code, you can transform raw data into compelling visual stories.&lt;/p&gt;

&lt;p&gt;The flexibility of &lt;strong&gt;Syncfusion’s HeatMap&lt;/strong&gt; component makes it ideal for scientific and business applications. Start building your own interactive HeatMap today, unlock deeper insights from your data, and share your comments!&lt;/p&gt;

&lt;p&gt;If you’re an existing Syncfusion&lt;sup&gt;®&lt;/sup&gt; customer, you can download the latest version of &lt;strong&gt;Essential Studio&lt;sup&gt;®&lt;/sup&gt;&lt;/strong&gt; from the &lt;a href="https://www.syncfusion.com/account" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. If you are not a Syncfusion&lt;sup&gt;®&lt;/sup&gt; customer, try our 30-day &lt;a href="https://www.syncfusion.com/downloads" rel="noopener noreferrer"&gt;free trial&lt;/a&gt; to check it out.&lt;/p&gt;

&lt;p&gt;You can also contact us through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forums&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;. We are always happy to assist you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/wpf-heatmap-visualize-temp-anomalies" rel="noopener noreferrer"&gt;Visualize Global Temperature Anomalies with a Dynamic WPF HeatMap Chart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/role-of-fonts-in-data-visualization" rel="noopener noreferrer"&gt;Best Practices for Fonts in Blazor Charts for Better Data Visualization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/blazor-synchronized-charts" rel="noopener noreferrer"&gt;Blazor Synchronized Charts: The Perfect Tool for Trade Analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/view-sp500-return-in-flutter-heatmap" rel="noopener noreferrer"&gt;S&amp;amp;P 500 Returns After Rate Cuts: Visualized Using a Flutter Heatmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>blazorcharts</category>
      <category>chart</category>
      <category>datavisualization</category>
      <category>heatmapchart</category>
    </item>
    <item>
      <title>Create Visually Rich Content Easily with Blazor Rich Text Editor! No HTML </title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Tue, 03 Jun 2025 17:14:35 +0000</pubDate>
      <link>https://dev.to/syncfusion/create-visually-rich-content-easily-with-blazor-rich-text-editor-no-html-1a0p</link>
      <guid>https://dev.to/syncfusion/create-visually-rich-content-easily-with-blazor-rich-text-editor-no-html-1a0p</guid>
      <description>&lt;p&gt;Are you looking to offer your users an intuitive way to create and manage content in your Blazor app without writing a single line of HTML?&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/blazor-components/blazor-rich-text-editor" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Rich Text Editor&lt;/a&gt; for Blazor transforms &lt;a href="https://en.wikipedia.org/wiki/Content_creation" rel="noopener noreferrer"&gt;content creation&lt;/a&gt; with a seamless, WYSIWYG editing experience. Whether you’re building CMS tools, knowledge bases, or collaborative apps, this editor empowers users and saves development time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a WYSIWYG HTML editor?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/List_of_HTML_editors#WYSIWYG_editors" rel="noopener noreferrer"&gt;WYSIWYG HTML&lt;/a&gt; editor&lt;/strong&gt; allows users to create and edit content through a visual interface. This approach provides a live preview of how the content will appear when published, eliminating the need for manual HTML coding and making content creation more intuitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core features of WYSIWYG HTML editor
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual editing interface:&lt;/strong&gt; It offers a real-time preview of content changes, facilitating intuitive formatting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rich formatting tools:&lt;/strong&gt; It includes various options for font styles, text alignment, colors, and more through a user-friendly toolbar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media integration:&lt;/strong&gt; It allows the insertion of images, videos, and audio elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linking and anchoring:&lt;/strong&gt; It simplifies the addition of hyperlinks and anchors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates and styles:&lt;/strong&gt; It provides pre-designed templates and style options for professional document creation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is an Advanced WYSIWYG HTML editor?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Advanced WYSIWYG HTML editor&lt;/strong&gt; extends their basic functionalities to offer more comprehensive features tailored for complex web development needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features of Advanced WYSIWYG HTML editor
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extended formatting options:&lt;/strong&gt; Incorporates advanced styling features like custom CSS and interactive elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizable toolbar:&lt;/strong&gt; Allows extensive customization of toolbars to suit specific workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced media handling:&lt;/strong&gt; Offers sophisticated media management, including image editing and video embedding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paste cleanup:&lt;/strong&gt; Ensures that pasted content conforms to the document’s style and structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;List features:&lt;/strong&gt; Supports various list types with customization options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Table support:&lt;/strong&gt; Provides tools for creating and formatting tables, including row, column, and cell adjustments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slash menu:&lt;/strong&gt; Offers quick access to commands and content insertion through a slash (“/”) menu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@Mention functionality:&lt;/strong&gt; It enables tagging or mentioning of users within the content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party integration:&lt;/strong&gt; It extends functionality with tools like &lt;strong&gt;CodeMirror&lt;/strong&gt; for advanced code editing and &lt;strong&gt;WebSpellChecker&lt;/strong&gt; for spell checking and grammar correction. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form validation:&lt;/strong&gt; Includes features for forms embedded within the editor, ensuring user inputs are correctly validated before submission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Localization:&lt;/strong&gt; It supports multiple languages and regional settings, allowing the editor to adapt to different locales and improve usability for a global audience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; Ensures screen reader compatibility, utilizes semantic HTML for enhanced content structure, and allows customization of accessibility features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard support:&lt;/strong&gt; It provides a comprehensive set of keyboard shortcuts for common actions and ensures effective focus management for users navigating with the keyboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile support:&lt;/strong&gt; Optimizes the editor for mobile devices, providing a responsive design that ensures a seamless editing experience on smartphones and tablets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use cases where the editor shines
&lt;/h2&gt;

&lt;p&gt;Real-world scenarios where the Syncfusion&lt;sup&gt;®&lt;/sup&gt; WYSIWYG editor adds instant value.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal CMS platforms for managing website content.&lt;/li&gt;
&lt;li&gt;Dynamic email template builders.&lt;/li&gt;
&lt;li&gt;Knowledge base and documentation tools.&lt;/li&gt;
&lt;li&gt;Online learning and publishing platforms.&lt;/li&gt;
&lt;li&gt;Customer support portals with editable responses or FAQs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Differences between Advanced WYSIWYG HTML Editor and Rich Text Editor
&lt;/h2&gt;

&lt;p&gt;While both Advanced WYSIWYG HTML editors and Rich Text editors provide visual content editing, they differ in several ways.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scope of features&lt;/strong&gt;: Advanced WYSIWYG editors offer a broader range of functionalities, including advanced formatting and extensive customization options. In contrast, Rich Text Editors generally focus on basic text formatting and simple media insertion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization and extensibility&lt;/strong&gt;: Advanced editors offer more options for customization and integration with other tools, while Rich Text Editors are typically less extensible and provide fewer customization options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use cases&lt;/strong&gt;: Advanced WYSIWYG editors are ideal for complex scenarios that require detailed control, whereas Rich Text Editors are often sufficient for simpler content creation tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integrating the Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor Rich Text Editor
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/blazor-components/blazor-wysiwyg-rich-text-editor" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor Rich Text Editor&lt;/a&gt; makes it incredibly easy to add visual editing capabilities to your app.&lt;/p&gt;

&lt;p&gt;Here’s a quick example to get you started.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@page&lt;/span&gt; &lt;span class="s"&gt;"/rich-text-editor"&lt;/span&gt;
&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;Syncfusion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Blazor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RichTextEditor&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SfRichTextEditor&lt;/span&gt; &lt;span class="n"&gt;@bind&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"richTextContent"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;SfRichTextEditor&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;richTextContent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;p&amp;gt;Welcome to Syncfusion Blazor Rich Text Editor!&amp;lt;/p&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With just a few lines of code, you get a fully functional WYSIWYG editor ready for rich content creation, mentions, toolbar customization, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation and resources
&lt;/h2&gt;

&lt;p&gt;For more details on integrating and configuring the Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor Rich Text Editor, refer to the &lt;a href="https://blazor.syncfusion.com/documentation/rich-text-editor/getting-started" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! Modern content creation demands intuitive, powerful tools, and the &lt;a href="https://www.syncfusion.com/blazor-components/blazor-rich-text-editor" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor Rich Text Editor&lt;/a&gt; delivers just that. With features like accessibility, keyboard support, responsive design, and deep customization, it’s the ideal solution for developers building user-friendly, scalable web content editors.&lt;/p&gt;

&lt;p&gt;Existing customers can download the new version of Essential Studio&lt;sup&gt;® &lt;/sup&gt;on the &lt;a href="https://www.syncfusion.com/account" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. If you are not a Syncfusion&lt;sup&gt;®&lt;/sup&gt; customer, try our 30-day &lt;a href="https://www.syncfusion.com/downloads" rel="noopener noreferrer"&gt;free trial&lt;/a&gt; to experience our incredible features.&lt;/p&gt;

&lt;p&gt;You can also contact us through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forum&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;. We are always happy to assist you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/best-blazor-rich-text-editor" rel="noopener noreferrer"&gt;Discover the Best Blazor Rich Text Editor for Effortless Content Creation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/mail-merge-in-blazor-rich-text-editor" rel="noopener noreferrer"&gt;Step-by-Step Guide: Adding Mail Merge to Blazor Rich Text Editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/import-export-blazor-rich-text-editor" rel="noopener noreferrer"&gt;Seamlessly Import and Export in Blazor Rich Text Editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/inline-editing-blazor-rich-text-editor" rel="noopener noreferrer"&gt;Inline Editing in Blazor Rich Text Editor: An Overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article was originally published at &lt;a href="https://www.syncfusion.com/blogs/post/blazor-rich-text-editor-no-html" rel="noopener noreferrer"&gt;Syncfusion.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>blazor</category>
      <category>dotnetmaui</category>
      <category>html</category>
      <category>richtexteditor</category>
    </item>
    <item>
      <title>Visualize Financial Insights Instantly with Blazor Waterfall Charts</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Tue, 03 Jun 2025 14:07:29 +0000</pubDate>
      <link>https://dev.to/syncfusion/visualize-financial-insights-instantly-with-blazor-waterfall-charts-4i3o</link>
      <guid>https://dev.to/syncfusion/visualize-financial-insights-instantly-with-blazor-waterfall-charts-4i3o</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Discover how to create a Waterfall Chart in Blazor to visualize financial data effectively. This guide explains the chart’s use in analyzing revenue, expenses, and profit, and offers a step-by-step approach covering data gathering, chart configuration, and interactive features for insightful visualizations.&lt;/p&gt;

&lt;p&gt;Welcome to our &lt;strong&gt;Weekly Data Visualization&lt;/strong&gt; blog series.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Waterfall Chart?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Waterfall Charts&lt;/strong&gt; are powerful tools for visualizing step-by-step variations in financial or business data. They are widely used to illustrate how sequential values contribute to a final total in revenue breakdowns, expense tracking, and profit analysis. &lt;/p&gt;

&lt;p&gt;In this blog post, we’ll explore how to create a &lt;a href="https://blazor.syncfusion.com/documentation/chart/chart-types/waterfall" rel="noopener noreferrer"&gt;Waterfall Chart&lt;/a&gt; using &lt;a href="https://www.syncfusion.com/blazor-components/blazor-charts" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor Charts&lt;/a&gt; to represent financial data effectively. We’ll dive into key features, data binding, and customization options to enhance your visualizations’ clarity and insight.&lt;/p&gt;

&lt;p&gt;This guide will provide a structured approach to integrating &lt;strong&gt;Waterfall Charts&lt;/strong&gt; into your Blazor applications, ensuring accurate and insightful financial analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common use cases for Waterfall Charts include:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Financial statements&lt;/strong&gt;: Analyzing revenue breakdowns, profit margins, and expense tracking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business performance metrics&lt;/strong&gt;: Visualizing how different factors contribute to overall growth or decline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget variance analysis&lt;/strong&gt;: Tracking increases and decreases in expenses or revenues over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project cost analysis&lt;/strong&gt;: Evaluating cost distributions and identifying key expense drivers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales and market analysis&lt;/strong&gt;: Understanding the impact of promotions, discounts, and returns on net sales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Waterfall Charts&lt;/strong&gt; are invaluable for highlighting intermediate values while emphasizing the overall trend, making them ideal for decision-making and reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing Waterfall Charts in Blazor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Waterfall Charts&lt;/strong&gt; offer a clear and concise way to visualize financial movements such as profits, losses, and net performance. This section will walk you through implementing one in a &lt;strong&gt;Blazor application&lt;/strong&gt; using Syncfusion&lt;sup&gt;®&lt;/sup&gt; components.&lt;/p&gt;

&lt;p&gt;Let’s dive in!&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Gathering the financial data
&lt;/h4&gt;

&lt;p&gt;Before you visualize any data, the first step is to gather the data. For this example, we collected annual financial data from the &lt;a href="https://www.livemint.com/dlf/profit-loss-annual/companyid-s0003034" rel="noopener noreferrer"&gt;Profit and Loss Report for DLF&lt;/a&gt;. This report provides a detailed view of the company’s revenue, costs, profits, and other key financial indicators.&lt;/p&gt;

&lt;p&gt;We selected a few critical values to keep our example simple and focused:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revenue&lt;/li&gt;
&lt;li&gt;Cost of Revenue&lt;/li&gt;
&lt;li&gt;SG&amp;amp;A Expenses &lt;strong&gt;(&lt;/strong&gt;&lt;strong&gt;Selling, General, and Administrative Expenses)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Depreciation&lt;/li&gt;
&lt;li&gt;Interest Income&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These categories illustrate how individual components contribute to the overall net profit. This makes them ideal for a &lt;strong&gt;Waterfall Chart&lt;/strong&gt;, which visually breaks down the contributions to a final value.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Define the data model
&lt;/h4&gt;

&lt;p&gt;With the financial data sourced, we will structure it in a format compatible with your Blazor chart.&lt;/p&gt;

&lt;p&gt;We’ll define a class called &lt;strong&gt;WaterfallChartData&lt;/strong&gt; with the following properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;X&lt;/strong&gt;: The financial category (e.g., “Revenue” or “Depreciation”).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Y&lt;/strong&gt;: The corresponding value. Positive values represent gains; negative values indicate expenses or losses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Refer to the following code example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WaterfallChartData&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WaterfallChartData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ChartPoints&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WaterfallChartData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Revenue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;6254.58&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Cost of Revenue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;2536.31&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Gross Profit"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// Intermediate Sum&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"SG&amp;amp;A Expenses"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1722.80&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Depreciation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;105.75&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Interest Income"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;130.22&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WaterfallChartData&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Net Profit"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Final Sum&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how Gross Profit and Net Profit are defined without a Y value. They represent &lt;strong&gt;Sum&lt;/strong&gt; points, which the chart calculates automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;IntermediateSumIndexes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;SumIndexes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Double&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To achieve this, we use index arrays to specify which categories should be treated as calculated sums.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IntermediateSumIndexes:&lt;/strong&gt; Marks the third item, &lt;strong&gt;Gross Profit&lt;/strong&gt;, as an intermediate sum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SumIndexes:&lt;/strong&gt; Marks the seventh item, &lt;strong&gt;Net Profit,&lt;/strong&gt; as the final total.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach provides a clear, intuitive way to break down your financial performance step by step, making it significantly easier for users to follow the flow of gains and losses in business data.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Configure the Waterfall Charts
&lt;/h4&gt;

&lt;p&gt;With your data model prepared, you can now visualize your data effectively. A &lt;strong&gt;Waterfall Chart&lt;/strong&gt; in Blazor is ideal for showing how values progress across financial categories, from revenue to net profit. It highlights both gains and losses along the way.&lt;/p&gt;

&lt;p&gt;If you’re new to &lt;a href="https://www.syncfusion.com/blazor-components/blazor-charts" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Blazor Charts&lt;/a&gt;, follow the official &lt;a href="https://blazor.syncfusion.com/documentation/chart/getting-started-with-web-app" rel="noopener noreferrer"&gt;user guide&lt;/a&gt; to set up your project. This guide will walk you through installing the required NuGet packages, registering Syncfusion services, and configuring your project to use Blazor Charts components.&lt;/p&gt;

&lt;p&gt;After completing the setup, you can define the &lt;strong&gt;Waterfall Charts&lt;/strong&gt; using the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.SfChart.html" rel="noopener noreferrer"&gt;SfChart&lt;/a&gt; component&lt;/p&gt;

&lt;p&gt;Refer to the code example below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;SfChart&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;ChartSeries&lt;/span&gt; &lt;span class="na"&gt;DataSource=&lt;/span&gt;&lt;span class="s"&gt;"@ChartPoints"&lt;/span&gt;
             &lt;span class="na"&gt;Name=&lt;/span&gt;&lt;span class="s"&gt;"DLF FY2024"&lt;/span&gt;
             &lt;span class="na"&gt;XName=&lt;/span&gt;&lt;span class="s"&gt;"X"&lt;/span&gt;
             &lt;span class="na"&gt;YName=&lt;/span&gt;&lt;span class="s"&gt;"Y"&lt;/span&gt;
             &lt;span class="na"&gt;Type=&lt;/span&gt;&lt;span class="s"&gt;"ChartSeriesType.Waterfall"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="nt"&gt;&amp;lt;/SfChart&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breakdown of the Chart configuration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html" rel="noopener noreferrer"&gt;ChartSeries&lt;/a&gt; section connects the chart to the data. The &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html#Syncfusion_Blazor_Charts_ChartSeries_DataSource" rel="noopener noreferrer"&gt;DataSource&lt;/a&gt; property binds the chart to the &lt;strong&gt;ChartPoints&lt;/strong&gt; list you defined earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The properties &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html#Syncfusion_Blazor_Charts_ChartSeries_XName" rel="noopener noreferrer"&gt;XName&lt;/a&gt; and &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html#Syncfusion_Blazor_Charts_ChartSeries_YName" rel="noopener noreferrer"&gt;YName&lt;/a&gt; map the fields in your &lt;strong&gt;WaterfallChartData&lt;/strong&gt; model to the chart’s X and Y axes, respectively.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 4: Define the Series with subtotals and totals
&lt;/h4&gt;

&lt;p&gt;This step focuses on binding the financial data and configuring the logic required for the &lt;strong&gt;Waterfall Chart&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Refer to the following code snippet for implementation details.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ChartSeriesCollection&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ChartSeries&lt;/span&gt; &lt;span class="na"&gt;ColumnWidth=&lt;/span&gt;&lt;span class="s"&gt;"0.5"&lt;/span&gt;
                 &lt;span class="na"&gt;NegativeFillColor=&lt;/span&gt;&lt;span class="s"&gt;"#e56590"&lt;/span&gt;
                 &lt;span class="na"&gt;DataSource=&lt;/span&gt;&lt;span class="s"&gt;"@ChartPoints"&lt;/span&gt;
                 &lt;span class="na"&gt;Name=&lt;/span&gt;&lt;span class="s"&gt;"DLF FY2024"&lt;/span&gt;
                 &lt;span class="na"&gt;XName=&lt;/span&gt;&lt;span class="s"&gt;"X"&lt;/span&gt;
                 &lt;span class="na"&gt;YName=&lt;/span&gt;&lt;span class="s"&gt;"Y"&lt;/span&gt;
                 &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;
                 &lt;span class="na"&gt;IntermediateSumIndexes=&lt;/span&gt;&lt;span class="s"&gt;"@IntermediateSumIndexes"&lt;/span&gt;
                 &lt;span class="na"&gt;SumIndexes=&lt;/span&gt;&lt;span class="s"&gt;"@SumIndexes"&lt;/span&gt;
                 &lt;span class="na"&gt;Type=&lt;/span&gt;&lt;span class="s"&gt;"ChartSeriesType.Waterfall"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        ….

    &lt;span class="nt"&gt;&amp;lt;/ChartSeries&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ChartSeriesCollection&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following configurations make the &lt;strong&gt;Waterfall chart&lt;/strong&gt; function as expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html#Syncfusion_Blazor_Charts_ChartSeries_NegativeFillColor" rel="noopener noreferrer"&gt;NegativeFillColor&lt;/a&gt; property highlights losses using a distinct pink shade.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html#Syncfusion_Blazor_Charts_ChartSeries_IntermediateSumIndexes" rel="noopener noreferrer"&gt;IntermediateSumIndexes&lt;/a&gt; (e.g., for “Gross Profit”) and &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeries.html#Syncfusion_Blazor_Charts_ChartSeries_SumIndexes" rel="noopener noreferrer"&gt;SumIndexes&lt;/a&gt; (e.g., for “Net Profit”) properties indicate where the chart should calculate running and final totals, respectively.&lt;/li&gt;
&lt;li&gt;Data is retrieved from the &lt;strong&gt;ChartPoints&lt;/strong&gt; collection, and each point is rendered dynamically based on its configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 5: Add styling, tooltips, and markers
&lt;/h4&gt;

&lt;p&gt;To make the chart more interactive and visually appealing, enable animations, labels, and tooltips.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;SfChart&lt;/span&gt; &lt;span class="na"&gt;ID=&lt;/span&gt;&lt;span class="s"&gt;"waterfall"&lt;/span&gt; &lt;span class="na"&gt;Title=&lt;/span&gt;&lt;span class="s"&gt;"DLF Ltd. Financial Overview (FY 2024)"&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"@Width"&lt;/span&gt; &lt;span class="na"&gt;Theme=&lt;/span&gt;&lt;span class="s"&gt;"Theme.Bootstrap4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ChartTitleStyle&lt;/span&gt; &lt;span class="na"&gt;TextOverflow=&lt;/span&gt;&lt;span class="s"&gt;"TextOverflow.Wrap"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;ChartTooltipSettings&lt;/span&gt; &lt;span class="na"&gt;Enable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;Header=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; 
        &lt;span class="na"&gt;Format=&lt;/span&gt;&lt;span class="s"&gt;"&amp;lt;b&amp;gt;${point.x}&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;Value: &amp;lt;b&amp;gt;${point.y} Cr&amp;lt;/b&amp;gt;"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;ChartSeries&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- Series configuration (data source, x/y mapping) should go here --&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;ChartSeriesAnimation&lt;/span&gt; &lt;span class="na"&gt;Enable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;ChartMarker&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ChartDataLabel&lt;/span&gt; &lt;span class="na"&gt;Visible=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;Position=&lt;/span&gt;&lt;span class="s"&gt;"LabelPosition.Outer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;ChartDataLabelFont&lt;/span&gt; &lt;span class="na"&gt;Size=&lt;/span&gt;&lt;span class="s"&gt;"@Size"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/ChartDataLabel&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/ChartMarker&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;ChartSeriesConnector&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"#5F6A6A"&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.8"&lt;/span&gt; &lt;span class="na"&gt;DashArray=&lt;/span&gt;&lt;span class="s"&gt;"1,2"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ChartSeriesBorder&lt;/span&gt; &lt;span class="na"&gt;Width=&lt;/span&gt;&lt;span class="s"&gt;"0.2"&lt;/span&gt; &lt;span class="na"&gt;Color=&lt;/span&gt;&lt;span class="s"&gt;"black"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ChartSeries&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Other chart settings --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/SfChart&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.SfChart.html#Syncfusion_Blazor_Charts_SfChart_Title" rel="noopener noreferrer"&gt;Title&lt;/a&gt; property of the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.SfChart.html" rel="noopener noreferrer"&gt;SfChart&lt;/a&gt; to set a clear and informative chart title that communicates the financial context of the data.&lt;/li&gt;
&lt;li&gt;Set the chart’s width using the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.SfChart.html#Syncfusion_Blazor_Charts_SfChart_Width" rel="noopener noreferrer"&gt;Width&lt;/a&gt; property of the &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.SfChart.html" rel="noopener noreferrer"&gt;SfChart&lt;/a&gt; to ensure responsiveness across devices.&lt;/li&gt;
&lt;li&gt;Configure &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartTooltipSettings.html" rel="noopener noreferrer"&gt;ChartTooltipSettings&lt;/a&gt; to display values dynamically when hovering over each bar, improving user interaction.&lt;/li&gt;
&lt;li&gt;Add &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartDataLabel.html" rel="noopener noreferrer"&gt;ChartDataLabel&lt;/a&gt; to display values directly on the bars, enhancing readability at a glance.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeriesConnector.html" rel="noopener noreferrer"&gt;ChartSeriesConnector&lt;/a&gt;, which visually connects each bar to the next, to guide the viewer’s eye through the data.&lt;/li&gt;
&lt;li&gt;Apply &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeriesBorder.html" rel="noopener noreferrer"&gt;ChartSeriesBorder&lt;/a&gt; to define the edges of each bar for a cleaner look, and enable &lt;a href="https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Charts.ChartSeriesAnimation.html" rel="noopener noreferrer"&gt;ChartSeriesAnimation&lt;/a&gt; to add smooth transitions and visual flair.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Final output&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/blogs/wp-content/uploads/2025/05/Displayed-Waterfall-Charts-in-Blazor-for-Financial-and-Business-Analysis.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3mtc7uv4jq3508rydtyj.png" alt="Displayed Waterfall Charts in Blazor for Financial and Business Analysis" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub reference
&lt;/h2&gt;

&lt;p&gt;For more details, refer to the &lt;a href="https://github.com/SyncfusionExamples/Creating-Waterfall-Charts-in-Blazor-for-Financial-and-Business-Analysis" rel="noopener noreferrer"&gt;GitHub demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! In this blog post, we’ve explored how to build insightful Blazor &lt;strong&gt;Waterfall Charts&lt;/strong&gt; for Financial and Business Analysis using Syncfusion Charts. Try them out and share your feedback in the comments section below!&lt;/p&gt;

&lt;p&gt;You can explore our ⁠&lt;a href="https://blazor.syncfusion.com/demos/chart/overview?theme=fluent2" rel="noopener noreferrer"&gt;Blazor Chart Example&lt;/a&gt; to learn more about the supported chart types and how easy it is to configure them for stunning visual effects.&lt;/p&gt;

&lt;p&gt;The latest version of the Blazor Chart component is available for current customers from the &lt;a href="https://www.syncfusion.com/account/downloads" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. If you are not a Syncfusion&lt;sup&gt;®&lt;/sup&gt; customer, try our &lt;a href="https://www.syncfusion.com/downloads" rel="noopener noreferrer"&gt;30-day free trial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also contact us through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forums&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or&lt;a href="https://www.syncfusion.com/feedback" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;. We’re always happy to assist you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/handle-missing-data-blazor-charts" rel="noopener noreferrer"&gt;Fix Broken Charts Instantly: Handle Missing Data Like a Pro in Blazor!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/drill-down-charts-in-blazor" rel="noopener noreferrer"&gt;Explore Interactive Drill-Down Charts in Blazor for Deeper Data Insights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/ai-powered-blazor-candle-chart" rel="noopener noreferrer"&gt;Forecast Stock Market Trends with AI-Powered Blazor Candle Charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/blazor-stacked-vs-grouped-bar-charts" rel="noopener noreferrer"&gt;Stacked vs. Grouped Bar Charts in Blazor: Which is Better for Data Visualization?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article was originally published at &lt;a href="https://www.syncfusion.com/blogs/post/blazor-waterfall-charts-financial-insights" rel="noopener noreferrer"&gt;Syncfusion.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>blazor</category>
      <category>businessintelligence</category>
      <category>chart</category>
      <category>datavisualization</category>
    </item>
    <item>
      <title>Introducing Syncfusion Cody: AI Code Editor for Enterprise App Development</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Mon, 19 May 2025 14:52:32 +0000</pubDate>
      <link>https://dev.to/syncfusion/introducing-syncfusion-cody-ai-code-editor-for-enterprise-app-development-44o</link>
      <guid>https://dev.to/syncfusion/introducing-syncfusion-cody-ai-code-editor-for-enterprise-app-development-44o</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody is a blazing-fast, AI-powered code editor built for enterprise developers. With four intelligent modes, Chat, Edit, Agent, and Autocomplete, it helps teams write, refactor, and generate UI code in seconds. Cody works out of the box, supports any LLM, lets you bring your docs as context, and extends seamlessly with your MCP. No Syncfusion license required.&lt;/p&gt;

&lt;p&gt;Tired of AI coding tools with fragile integrations, vague licensing terms, or poor scalability across large codebases? We’re excited to introduce &lt;a href="https://syncfusioncody.com/" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody&lt;/a&gt;, a purpose-built AI code editor designed to bring safe, efficient, and scalable AI development to the enterprise world. Cody is our answer to the real challenges teams face, built for reliability, clarity, and growth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs1.ezgif.com%2Ftmp%2Fezgif-1f7984b52acc1f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs1.ezgif.com%2Ftmp%2Fezgif-1f7984b52acc1f.gif" alt="Syncfusion Cody agent mode" width="221" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody agent mode&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Built Cody
&lt;/h2&gt;

&lt;p&gt;Over the past year, our internal development teams have adopted AI-assisted development across projects large and small. In doing so, we’ve encountered many real-world challenges that come with using generic AI assistants, ranging from accidental regressions to IP and privacy concerns.&lt;/p&gt;

&lt;p&gt;That experience helped us shape Cody into a truly &lt;strong&gt;enterprise-grade AI coding assistant&lt;/strong&gt;. It now helps us generate over &lt;strong&gt;30% of our new code&lt;/strong&gt;, and we’re ready to share it with the world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://syncfusioncody.com/" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody&lt;/a&gt; is more than just another AI coding assistant. It’s designed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;productivity companion&lt;/strong&gt; for everyday development tasks.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;safe, scalable platform&lt;/strong&gt; for enterprise adoption of AI.&lt;/li&gt;
&lt;li&gt;A tool that works with your &lt;strong&gt;existing workflows and models&lt;/strong&gt;, without locking you in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No special IDEs or tools are required. Just install Cody, configure your preferred model, and &lt;a href="https://syncfusioncody.com/" rel="noopener noreferrer"&gt;download&lt;/a&gt; it here to get started&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/blogs/wp-content/uploads/2025/05/Syncfusion-Cody-AI-code-Editor-landing-page.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1l2pxyinlbj16cy8j12h.png" alt="Syncfusion Cody AI code Editor landing page" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cody offers four modes tailored to your workflow:
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Chat Mode
&lt;/h2&gt;

&lt;p&gt;Ask questions, generate snippets, or plan logic using natural language without editing your files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Chat-Mode.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Chat-Mode.png" alt="Syncfusion Cody chat mode" width="800" height="801"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody chat mode&lt;/p&gt;

&lt;h2&gt;
  
  
  Edit Mode
&lt;/h2&gt;

&lt;p&gt;Select any code, press a shortcut, and rewrite or optimize it instantly using AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Edit-Mode.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Edit-Mode.png" alt="Syncfusion Cody edit mode" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody edit mode&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Mode
&lt;/h2&gt;

&lt;p&gt;Describe a fix or feature in plain English. Cody applies the change across your codebase autonomously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs2.ezgif.com%2Ftmp%2Fezgif-27f0f05dd6eae2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs2.ezgif.com%2Ftmp%2Fezgif-27f0f05dd6eae2.gif" alt="Syncfusion Cody agent mode" width="221" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody agent mode&lt;/p&gt;

&lt;h2&gt;
  
  
  Autocomplete Mode
&lt;/h2&gt;

&lt;p&gt;Get smart inline suggestions while typing. Just press &lt;strong&gt;Tab&lt;/strong&gt; to complete your thought instantly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Autocomplete-Mode.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Autocomplete-Mode.jpg" alt="Syncfusion Cody autocomplete mode" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody autocomplete mode&lt;/p&gt;

&lt;h2&gt;
  
  
  Core features
&lt;/h2&gt;

&lt;p&gt;Beyond its four powerful modes, Cody includes several built-in tools that enhance your development workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smart Apply&lt;/strong&gt;: Applies AI-generated code in the right context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual shortcuts&lt;/strong&gt;: Right-click options like &lt;em&gt;Fix this issue&lt;/em&gt; or &lt;em&gt;Write documentation&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Enhancer&lt;/strong&gt;: Clarifies user inputs for better model results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codebase Search&lt;/strong&gt;: AI-assisted search across files, functions, and logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test &amp;amp; Doc Generation&lt;/strong&gt;: Instantly generate unit tests or documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Input&lt;/strong&gt;: Share screenshots to describe bugs or UI requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in Agent Tools&lt;/strong&gt;: Read/write files, run terminal commands, perform web searches, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Prompts &amp;amp; Workflows&lt;/strong&gt;: Define reusable instructions and coding rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Engineered for Scalable Enterprise Needs
&lt;/h2&gt;

&lt;p&gt;Cody is engineered to meet enterprise needs at scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean IP&lt;/strong&gt;: Leverages Syncfusion’s 1,800+ pre-tested components instead of risky OSS packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large Codebase Support&lt;/strong&gt;: Understands and operates across your full project context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Privacy&lt;/strong&gt;: Bring your API keys or use local models for full control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security &amp;amp; Compliance (coming soon)&lt;/strong&gt;: SSO, admin console, usage analytics, and audit controls included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized Knowledge (coming soon)&lt;/strong&gt;: Consolidate org-wide dev knowledge directly into Cody’s context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  UI Builder Powered by Syncfusion Components
&lt;/h2&gt;

&lt;p&gt;Frontend work shouldn’t take up most of your sprint. Cody can generate full UIs by simply describing what you need. It uses our 1,800+ enterprise-grade components to output production-ready UI code with minimal input.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-with-Built-in-UI-Builder.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-with-Built-in-UI-Builder.png" alt="Syncfusion Cody with built-in UI builder" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody with built-in UI builder&lt;/p&gt;

&lt;h2&gt;
  
  
  Freedom to Choose Your Model
&lt;/h2&gt;

&lt;p&gt;Cody supports all major LLM providers, OpenAI, Azure, Anthropic, Mistral, and even lets you connect to local models using &lt;strong&gt;Ollama&lt;/strong&gt; or &lt;strong&gt;LM Studio&lt;/strong&gt;. You’re in control of cost, performance, and compliance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Chat-Model-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F05%2FSyncfusion-Cody-Chat-Model-list.png" alt="Syncfusion Cody chat model list" width="373" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Syncfusion Cody chat model list&lt;/p&gt;

&lt;h2&gt;
  
  
  Cody Is Open to All. No Syncfusion License Needed.
&lt;/h2&gt;

&lt;p&gt;You can use Cody without a Syncfusion UI license. You’ll still get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat, Edit, Agent, and Autocomplete Modes&lt;/li&gt;
&lt;li&gt;Code generation, refactoring, test creation, and debugging support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only thing you’re missing is UI generation powered by our components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Cody free today
&lt;/h2&gt;

&lt;p&gt;Ready to code smarter, faster, and at scale? &lt;a href="https://syncfusioncody.com/" rel="noopener noreferrer"&gt;Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody&lt;/a&gt; isn’t just another AI tool, it’s your development partner built for real-world enterprise challenges. Whether you’re refactoring legacy code, building modern UIs, or streamlining workflows, Cody helps you do it better and with confidence.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://syncfusioncody.com/" rel="noopener noreferrer"&gt;Download Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syncfusioncody.com/features/" rel="noopener noreferrer"&gt;Explore the Feature Tour&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try Syncfusion&lt;sup&gt;®&lt;/sup&gt; Cody today and let us know what you think. We’re just getting started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/azure-openai-blazor-maps" rel="noopener noreferrer"&gt;Integrate Azure OpenAI with Blazor Maps for Smarter, AI-Powered Mapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/smart-pdf-form-filling-in-flutter-app" rel="noopener noreferrer"&gt;Flutter Developers, Meet AI: Smart, Fast PDF Form Filling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/build-smart-chat-in-wpf-ai-assistview" rel="noopener noreferrer"&gt;Easily Build an AI-Powered Chat App Using WPF AI AssistView and OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/ai-powered-smart-net-maui-data-forms" rel="noopener noreferrer"&gt;Create AI-Powered Smart .NET MAUI Data Forms for Effortless Data Collection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This Blog was originally published on the &lt;a href="https://www.syncfusion.com/blogs/post/syncfusion-cody-ai-code-editor" rel="noopener noreferrer"&gt;Syncfusion site&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aitools</category>
      <category>codeeditor</category>
      <category>developerproductivit</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>How to Generate ZUGFeRD-Compliant Invoices from Word or HTML in .NET</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Wed, 07 May 2025 16:21:07 +0000</pubDate>
      <link>https://dev.to/syncfusion/how-to-generate-zugferd-compliant-invoices-from-word-or-html-in-net-5b29</link>
      <guid>https://dev.to/syncfusion/how-to-generate-zugferd-compliant-invoices-from-word-or-html-in-net-5b29</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; This blog post walks you through generating ZUGFeRD-compliant e-invoices in a .NET application using the Syncfusion&lt;sup&gt;®&lt;/sup&gt; PDF Library. It begins by explaining the purpose of hybrid standards, which merge PDF/A-3 with embedded XML for readability and automation. You’ll learn how to convert Word or HTML templates into compliant PDFs, embed machine-readable XML, and validate invoices to meet international standards like EN 16931.&lt;/p&gt;

&lt;p&gt;In today’s rapidly evolving business environment, efficiency and compliance are paramount. Electronic invoicing has become an essential component, transitioning from luxury to necessity for seamless global trade.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.mustangproject.org/zugferd/" rel="noopener noreferrer"&gt;ZUGFeRD&lt;/a&gt; standard, short for &lt;strong&gt;Zentraler User Guide des Forums elektronische Rechnung Deutschland&lt;/strong&gt;, which integrates a PDF/A-3 document with embedded XML data, has revolutionized the industry. By adopting ZUGFeRD invoices, businesses can streamline processes, minimize errors, and adhere to international standards such as &lt;strong&gt;EN 16931&lt;/strong&gt;, the European e-invoicing standard set to take effect on January 1&lt;sup&gt;st&lt;/sup&gt;, 2025. These standards ensure that business invoices meet the highest levels of accuracy and legal acceptability, allowing them to operate confidently.&lt;/p&gt;

&lt;p&gt;The blog post will delve into how developers can use the Syncfusion&lt;sup&gt;®&lt;/sup&gt; &lt;a href="https://www.syncfusion.com/document-processing-libraries" rel="noopener noreferrer"&gt;.NET PDF Library&lt;/a&gt; to generate ZUGFeRD invoices from Word and HTML. Whether you’re unfamiliar with ZUGFeRD or seeking a reliable .NET PDF library, this guide will lead you through each step and show how seamlessly these tools can be integrated into your current workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The history of ZUGFeRD and Factur-X&lt;/li&gt;
&lt;li&gt;How ZUGFeRD and Factur-X Hybrid Invoices work&lt;/li&gt;
&lt;li&gt;Creating ZUGFeRD invoices with the Syncfusion&lt;sup&gt;®&lt;/sup&gt; PDF Library&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;The history of ZUGFeRD and Factur-X&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;ZUGFeRD, an acronym for “&lt;strong&gt;Zentraler User Guide Forum elektronische Rechnung Deutschland&lt;/strong&gt;,” or “&lt;strong&gt;Central User Guide of the German Electronic Invoice Forum&lt;/strong&gt;” in English. Factur-X is derived from the French word “ &lt;strong&gt;facture&lt;/strong&gt;,” meaning invoice. The &lt;strong&gt;“X”&lt;/strong&gt; symbolizes the standard’s cross-border applicability, indicating its functionality across various countries and systems.&lt;/p&gt;

&lt;p&gt;Since version 2.1, the ZUGFeRD and Factur-X standards have been fully compatible. Both countries have collaborated to advance the standard further, and although it is officially unified under the Factur-X name, it is still commonly referred to as ZUGFeRD.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Release Date&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Profiles&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;1.0&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;June 2014&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Hybrid invoice format (PDF/A-3 + XML). Not EN 16931 compliant.&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;BASIC, COMFORT, EXTENDED&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;2.0&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;March 2019&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;UN/CEFACT CII schema. Enhanced interoperability. EN 16931 compliant.&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;MINIMUM, BASIC WL&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;2.1&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;March 2020&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Compatible with Factur-X 1.0.05. Supports German CIUS "XRechnung."&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;EXTENDED&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;2.2&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;February 2022&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Aligned with Factur-X 1.0.06. Added profiles for France and Germany, including EXTENDED_B2B_FR.&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;EXTENDED, EXTENDED_B2B_FR&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;2.3&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;September 2024&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Uses CII D22B schema. Improved compliance with French B2B requirements. Updated EXTENDED profile.&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;EXTENDED&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;How ZUGFeRD and Factur-X hybrid invoices work&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;ZUGFeRD and Factur-X hybrid invoices uniquely integrate visual and machine-readable data, making them suitable for human users and automated systems. Here’s how they function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PDF/A-3 format&lt;/strong&gt;: These invoices are built on the PDF/A-3 standard, a variant of the PDF format designed for long-term archiving. The PDF contains the human-readable version of the invoice, which can be easily printed or viewed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded XML data&lt;/strong&gt;: Within the PDF, an XML file is embedded. This XML follows specific schemas like UN/CEFACT CII to include all invoice data in a structured, machine-readable format. This enables seamless integration with accounting and ERP systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attachments and the /AF key&lt;/strong&gt;: The embedding of XML is facilitated using the /AF (Associated Files) key in the PDF document catalog. This feature, introduced in PDF/A-2 and extended in PDF/A-3, allows any file type, including XML, to be attached to the PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixed XML file names by version&lt;/strong&gt;: Each ZUGFeRD and Factur-X version specifies a standard file name for the XML attachment:

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ZUGFeRD 1.0&lt;/strong&gt;: ZUGFeRD-invoice.xml&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZUGFeRD 2.0&lt;/strong&gt;: zugferd-invoice.xml&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZUGFeRD 2.1+ and Factur-X&lt;/strong&gt;: factur-x.xml&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid nature&lt;/strong&gt;: The dual format ensures compliance with legal requirements for human-readable documents while supporting automation. This hybrid approach eliminates the need for separate systems to handle paper and electronic invoices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profiles&lt;/strong&gt;: The standards offer profiles like BASIC, COMFORT, and EXTENDED to cater to business needs, from simple to complex invoicing scenarios. Profiles define the level of information included in the invoice, allowing businesses to choose the one that best suits their requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation and interoperability&lt;/strong&gt;: Hybrid invoices streamline workflows by enabling automation. They also ensure interoperability across systems, making them ideal for cross-border transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By utilizing the &lt;a href="https://www.syncfusion.com/document-processing/pdf-framework/net" rel="noopener noreferrer"&gt;.NET PDF Library&lt;/a&gt;, developers can effortlessly generate these hybrid invoices by embedding XML into a PDF during its generation. This ensures that businesses adhere to international standards and fully capitalize on the benefits of ZUGFeRD and Factur-X.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;Creating ZUGFeRD invoices with the .NET PDF Library&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/document-processing/pdf-framework/net/pdf-library" rel="noopener noreferrer"&gt;.NET PDF library&lt;/a&gt; offers robust features for working with PDFs, including creating ZUGFeRD-compliant invoices. Let’s break down the process into two parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating an invoice from a Word document&lt;/li&gt;
&lt;li&gt;Generating an invoice from an HTML template. With these methods, you can quickly create and embed data-rich invoices that are both user-friendly and legally compliant.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Generate a ZUGFeRD invoice from Word documents
&lt;/h3&gt;

&lt;p&gt;If your invoices are designed in Word, the Syncfusion&lt;sup&gt;®&lt;/sup&gt; library simplifies the conversion to ZUGFeRD invoices, making it easy to incorporate existing templates into your workflow.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1. Create a new console application and install the following NuGet packages
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Convert Word to PDF in .NET applications.
Install-Package Syncfusion.DocIORenderer.Net.Core

# Supports handling ZUGFeRD e-invoice format in .NET.
Install-Package ZUGFeRD-csharp

# Library for parsing and serializing JSON in .NET.
Install-Package Newtonsoft.Json

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 2. Prepare your Word template
&lt;/h4&gt;

&lt;p&gt;Design an invoice template in Word with merge fields for dynamic data. These fields allow you to automate the inclusion of details like customer name, invoice number, and itemized lists.&lt;/p&gt;

&lt;p&gt;We have used the mail merge fields to design the Word template. For more details about mail merge, refer to our &lt;a href="https://help.syncfusion.com/document-processing/word/word-library/net/working-with-mail-merge" rel="noopener noreferrer"&gt;documentation.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refer to the following image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4l0nibw8bcf6f9oivauq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4l0nibw8bcf6f9oivauq.png" alt="ZUGFeRD invoice template in Word" width="800" height="704"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3. Deserialize the invoice data into the invoice class object
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Invoice&lt;/span&gt; &lt;span class="n"&gt;invoice&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonConvert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DeserializeObject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Invoice&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"../../../Data/InvoiceData.json"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;//Create zugferd xml file&lt;/span&gt;
&lt;span class="n"&gt;MemoryStream&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;invoice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateXml&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 4. Bind the data to the mail merge fields in the Word template
&lt;/h4&gt;

&lt;p&gt;Using the mail merge feature of the Syncfusion Word library, bind the data to the Word template as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WordDocument&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;WordDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FormatType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Automatic&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Gets the invoice details as an “IEnumerable” collection.&lt;/span&gt;
    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Invoice&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;invoiceCollection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Invoice&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="n"&gt;invoiceCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;invoice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//Creates an instance of “MailMergeDataTable” by specifying the mail merge group name and “IEnumerable” collection.&lt;/span&gt;
    &lt;span class="n"&gt;MailMergeDataTable&lt;/span&gt; &lt;span class="n"&gt;dataTable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;MailMergeDataTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Invoice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;invoiceCollection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//Enables the flag to start each record on a new page.&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MailMerge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StartAtNewPage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//Performs Mail merge.&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MailMerge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExecuteNestedGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataTable&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 5. Convert Word to PDF and attach the ZUGFeRD XML
&lt;/h4&gt;

&lt;p&gt;Use Syncfusion’s Word-to-PDF converter to create a PDF representation of your Word invoice and attach ZUGFeRD XML. The XML file ensures that your PDF includes machine-readable invoice data.&lt;/p&gt;

&lt;p&gt;Refer to the following example code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DocIORenderer&lt;/span&gt; &lt;span class="n"&gt;renderer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;DocIORenderer&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;   
    &lt;span class="c1"&gt;//Set conformance level to Pdf_A3B&lt;/span&gt;
    &lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Settings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PdfConformanceLevel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfConformanceLevel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pdf_A3B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//Embed all fonts&lt;/span&gt;
    &lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Settings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EmbedFonts&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;//Converts Word document into a PDF document.&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;pdfDocument&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ConvertToPDF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="c1"&gt;//Set Zugferd conformance level to Extended&lt;/span&gt;
        &lt;span class="n"&gt;pdfDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ZugferdConformanceLevel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ZugferdConformanceLevel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Extended&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;//Attach the zugferd xml file to PDF document&lt;/span&gt;
        &lt;span class="n"&gt;PdfAttachment&lt;/span&gt; &lt;span class="n"&gt;attachment&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PdfAttachment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"factur-x.xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Relationship&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PdfAttachmentRelationship&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Alternative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModificationDate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"factur-x"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MimeType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"application/xml"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;//Add attachment to PDF document&lt;/span&gt;
        &lt;span class="n"&gt;pdfDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Attachments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attachment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;//Saves the PDF file to the file system.    &lt;/span&gt;
        &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;outputStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Zugferd.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ReadWrite&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;pdfDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outputStream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these steps, you can transform your Word invoices into fully compliant ZUGFeRD documents, enabling your business to align with modern e-invoicing practices.&lt;/p&gt;

&lt;p&gt;Refer to the following image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hxeot6f1it3mbtfhs00.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hxeot6f1it3mbtfhs00.jpg" alt="ZUGFeRD compliant documents" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Generating a ZUGFeRD invoice from HTML
&lt;/h3&gt;

&lt;p&gt;HTML is a versatile format for designing templates, and the PDF library makes it easy to convert HTML content into ZUGFeRD-compliant invoices. Follow these steps:&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1. Install the following NuGet package
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Converts&lt;/span&gt; &lt;span class="n"&gt;HTML&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;PDF&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NET&lt;/span&gt; &lt;span class="n"&gt;applications&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Windows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;Syncfusion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HtmlToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Windows&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Provides&lt;/span&gt; &lt;span class="n"&gt;imaging&lt;/span&gt; &lt;span class="n"&gt;functionalities&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;Syncfusion&lt;/span&gt; &lt;span class="n"&gt;PDF&lt;/span&gt; &lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;Syncfusion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Imaging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Core&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Supports&lt;/span&gt; &lt;span class="n"&gt;handling&lt;/span&gt; &lt;span class="n"&gt;ZUGFeRD&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;invoice&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NET&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;ZUGFeRD&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;csharp&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;High&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;performance&lt;/span&gt; &lt;span class="n"&gt;template&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;generating&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt; &lt;span class="n"&gt;outputs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;Scriban&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Library&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;parsing&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="n"&gt;serializing&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NET&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;Newtonsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Json&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 2. Create an HTML template
&lt;/h4&gt;

&lt;p&gt;An HTML template contains placeholders with {{mustache}} syntax. It is used to bind the actual data to the HTML template. For this example, we’ll use the &lt;a href="https://github.com/scriban/scriban" rel="noopener noreferrer"&gt;Scriban scripting language&lt;/a&gt; to create the placeholders. It’s a lightweight scripting language and engine for .NET.&lt;/p&gt;

&lt;p&gt;The following code example shows the data model for the invoice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Invoice&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;InvoiceDate&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;CurrencyCodes&lt;/span&gt; &lt;span class="n"&gt;CurrencyCode&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CurrencyCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;USD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;InvoiceType&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;TradeParty&lt;/span&gt; &lt;span class="n"&gt;Buyer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;TradeParty&lt;/span&gt; &lt;span class="n"&gt;Seller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Profile&lt;/span&gt; &lt;span class="n"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Extended&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;LineItem&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;LineItems&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;LineItem&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;DueDate&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;ApplicableTax&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Invoice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;invoiceNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;invoiceDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CurrencyCodes&lt;/span&gt; &lt;span class="n"&gt;currencyCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;invoiceNumber&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;InvoiceDate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;invoiceDate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;CurrencyCode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;currencyCode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;LineTotalAmount&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;LineItems&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Quantity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;TaxTotalAmount&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;LineTotalAmount&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ApplicableTax&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;GrandTotalAmount&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;LineTotalAmount&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;TaxTotalAmount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Based on this model, we design the template as follows. By default, the properties and methods of .NET objects are automatically exposed with lowercase and &lt;strong&gt;_names&lt;/strong&gt;. This means that a property like  &lt;strong&gt;Invoice.Seller.Name&lt;/strong&gt; will be exposed as  &lt;strong&gt;invoice.seller.name&lt;/strong&gt;. This is the default convention.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Invoice&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"style.css"&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"all"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"clearfix"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"logo"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"logo.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"company"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{invoice.seller.name}}&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;{{invoice.seller.street}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;{{invoice.seller.city}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;{{invoice.seller.post_code}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;{{invoice.seller.country}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;main&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"details"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"clearfix"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"client"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"to"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;INVOICE TO:&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{invoice.buyer.name}}&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"address"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{invoice.buyer.street}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{invoice.buyer.city}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{invoice.buyer.post_code}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{invoice.buyer.country}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"invoice"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{invoice.invoice_number}}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"date"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Date of Invoice: {{invoice.invoice_date}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"date"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Due Date: {{invoice.due_date}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;border=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;cellspacing=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;cellpadding=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;thead&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"desc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DESCRIPTION&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"unit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;UNIT PRICE&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"qty"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;QUANTITY&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"total"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;TOTAL&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/thead&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;tbody&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"invoiceItems"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          {{- index = 1 -}}
          {{ for item in invoice.line_items }}
          &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"no"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{index}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"desc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;h3&amp;gt;&lt;/span&gt;{{item.name}}&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;{{item.description}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"unit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;${{item.price}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"qty"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{item.quantity}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"total"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;${{item.total_price}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
          {{index = index + 1}}
          {{end}}
        &lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;tfoot&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;SUBTOTAL&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;${{invoice.line_total_amount}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;TAX 25%&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;${{invoice.tax_total_amount}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;GRAND TOTAL&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;${{invoice.grand_total_amount}}&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/tfoot&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"thanks"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Thank you!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"notices"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;NOTICE:&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"notice"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;A finance charge of 1.5% will be made on unpaid balances after 30 days.&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 3. Access the data and bind it with the HTML template
&lt;/h4&gt;

&lt;p&gt;To simplify this article, we have used a custom JSON file to store and retrieve the data. The following code snippet is used to create the invoice model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Bind data to invoice model.&lt;/span&gt;
&lt;span class="n"&gt;Invoice&lt;/span&gt; &lt;span class="n"&gt;invoice&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonConvert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DeserializeObject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Invoice&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"../../../Data/InvoiceData.json"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;//Create zugferd xml file.&lt;/span&gt;
&lt;span class="n"&gt;MemoryStream&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;invoice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateXml&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we use Scriban to bind the data from the model to the HTML template, as explained in the following code example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;invoiceTemplate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAllText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"../../../Template/index.html"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;template&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;invoiceTemplate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;templateData&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;invoice&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;//Fill out the template with real invoice data.&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;pageContent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;templateData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 4. Convert HTML string to PDF and create a ZUGFeRD invoice PDF
&lt;/h4&gt;

&lt;p&gt;Generate invoice PDF from the bound HTML created in the previous section, convert the generated PDF document to &lt;strong&gt;PDF/A-3,&lt;/strong&gt; and attach the &lt;strong&gt;factur-x.xml&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Initialize HTML to PDF converter with Blink rendering engine.&lt;/span&gt;
&lt;span class="n"&gt;HtmlToPdfConverter&lt;/span&gt; &lt;span class="n"&gt;htmlConverter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HtmlToPdfConverter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HtmlRenderingEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Blink&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;BlinkConverterSettings&lt;/span&gt; &lt;span class="n"&gt;blinkConverterSettings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;BlinkConverterSettings&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;blinkConverterSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ViewPortSize&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;768&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;//Convert HTML string to PDF. &lt;/span&gt;
&lt;span class="n"&gt;PdfDocument&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;htmlConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pageContent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetFullPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Template"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ZugferdConformanceLevel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ZugferdConformanceLevel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Extended&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MemoryStream&lt;/span&gt; &lt;span class="n"&gt;fs&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;MemoryStream&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Save and close the PDF document.&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;//Convert a normal PDF document to a Zugferd PDF document.&lt;/span&gt;
    &lt;span class="n"&gt;ZugferdPDFConverter&lt;/span&gt; &lt;span class="n"&gt;converter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ZugferdPDFConverter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;pdfStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;converter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ConvetToZugFerdPDF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;pdfStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Position&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//Save the Zugferd PDF document.&lt;/span&gt;
    &lt;span class="n"&gt;FileStream&lt;/span&gt; &lt;span class="n"&gt;fileStream&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;FileStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Invoice.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileAccess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;pdfStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CopyTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;fileStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the conversion, you will get a PDF document like the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzenuep7p7hmz9yu1g5qy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzenuep7p7hmz9yu1g5qy.png" alt="ZUGFeRD invoice in .NET PDF Library" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Validating ZUGFeRD and Factur-X invoices
&lt;/h2&gt;

&lt;p&gt;You can validate the ZUGFeRD invoice using the &lt;a href="https://www.mustangproject.org/commandline/" rel="noopener noreferrer"&gt;Mustang command line tool&lt;/a&gt;, an officially approved validator that ensures the data complies with EN 16931 standards.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;java&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;jar&lt;/span&gt; &lt;span class="nx"&gt;Mustang&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;CLI&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;jar&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="nx"&gt;validate&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="nx"&gt;invoice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pdf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thank you for reading! In this blog, we explored how to create ZUGFeRD invoices from a Word document and HTML with the &lt;a href="https://www.syncfusion.com/document-processing/pdf-framework/net" rel="noopener noreferrer"&gt;.NET PDF Library&lt;/a&gt;. By integrating these steps into your workflow, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ensure compliance&lt;/strong&gt;: Meet global e-invoicing standards like EN 16931 and stay ahead of regulatory requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boost efficiency&lt;/strong&gt;: Reduce manual tasks and streamline processes, enabling faster invoice generation and payment cycles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhance accuracy&lt;/strong&gt;: Minimize errors with automated invoice generation and embedded machine-readable data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://www.syncfusion.com/document-processing/pdf-framework/net" rel="noopener noreferrer"&gt;.NET PDF library’s&lt;/a&gt; robust features, such as HTML-to-PDF conversion, make it a reliable choice for developers. Whether you are using .NET or seeking an HTML-to-PDF solution, Syncfusion offers the necessary tools to streamline ZUGFeRD invoice creation. These tools enable businesses to update their invoicing processes, enhance efficiency in cross-border trade, and maintain full legal compliance.&lt;/p&gt;

&lt;p&gt;Are you ready to integrate ZUGFeRD invoices into your system? Begin today with the &lt;a href="https://www.syncfusion.com/document-processing/pdf-framework/net" rel="noopener noreferrer"&gt;.NET PDF library&lt;/a&gt; and enjoy the benefits of seamless e-invoicing. &lt;a href="https://www.syncfusion.com/downloads/fileformats" rel="noopener noreferrer"&gt;Download our free trial&lt;/a&gt;or explore the library’s &lt;a href="https://www.syncfusion.com/document-processing-libraries" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; today. If you have any questions or need assistance with these features, please feel free to comment below or contact us through our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forum&lt;/a&gt;, &lt;a href="https://support.syncfusion.com/" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback/pdf" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;. We are always here to assist you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/easily-export-xml-to-excel-in-csharp" rel="noopener noreferrer"&gt;How to Export XML to Excel in 3 Easy Steps using C#?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/document-processing-library-2025-vol1" rel="noopener noreferrer"&gt;What’s New in Document Processing Libraries: 2025 Volume 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/protect-word-documents-in-c-sharp" rel="noopener noreferrer"&gt;How to Protect Word Documents in C#: Step-by-Step Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/add-update-hyperlinks-in-pdf-csharp" rel="noopener noreferrer"&gt;How to Add, Edit, or Remove Hyperlinks in PDFs Using C#?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article was originally published at &lt;a href="https://www.syncfusion.com/blogs/post/zugferd-invoice-dotnet-pdf-library" rel="noopener noreferrer"&gt;Syncfusion.com.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>fileformats</category>
      <category>dotnet</category>
      <category>csharp</category>
      <category>documentprocessing</category>
    </item>
    <item>
      <title>Bar Chart vs. Pie Chart: The Ultimate Guide to Choosing the Right Chart for Your Data</title>
      <dc:creator>Jollen Moyani</dc:creator>
      <pubDate>Wed, 07 May 2025 14:18:17 +0000</pubDate>
      <link>https://dev.to/syncfusion/bar-chart-vs-pie-chart-the-ultimate-guide-to-choosing-the-right-chart-for-your-data-2i5</link>
      <guid>https://dev.to/syncfusion/bar-chart-vs-pie-chart-the-ultimate-guide-to-choosing-the-right-chart-for-your-data-2i5</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Bar charts and pie charts serve different purposes. Bar charts are best for comparisons, while pie charts are ideal for visualizing proportions. This blog post walks you through the decision-making process, complete with .NET MAUI code samples, tips for interactivity, and design enhancements using Syncfusion&lt;sup&gt;®&lt;/sup&gt; Toolkit.&lt;/p&gt;

&lt;p&gt;Welcome to our &lt;strong&gt;Chart of the Week&lt;/strong&gt; blog series!&lt;/p&gt;

&lt;p&gt;Choosing the right chart can make or break how your audience understands your data. In this blog, we’ll break down the key differences between bar charts and pie charts—and show you how to build them using the powerful &lt;a href="https://help.syncfusion.com/maui-toolkit/circular-charts/getting-started" rel="noopener noreferrer"&gt;Syncfusion .NET MAUI Toolkit.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Data visualization transforms complex numbers into clear, impactful insights. But selecting the wrong chart type can blur your message. Bar charts and pie charts are both popular yet serve different roles. We’ll explore when to use each, highlight their strengths and limitations, and walk you through practical examples to help you visualize smarter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqmwhyv2vfs0dv60hs1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqmwhyv2vfs0dv60hs1k.png" alt="Bar Chart and Pie Chart" width="800" height="395"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Basics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bar chart
&lt;/h3&gt;

&lt;p&gt;A bar chart represents data using rectangular bars, where the length of each bar corresponds to its value. It is ideal for comparing different categories or tracking changes over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pie chart
&lt;/h3&gt;

&lt;p&gt;A pie chart divides a circular area into proportional slices, each representing a percentage of the total. It is best suited for displaying data distributions and proportions.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use a Bar Chart?
&lt;/h2&gt;

&lt;p&gt;Bar charts are highly effective when dealing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Comparing multiple categories&lt;/strong&gt; (e.g., revenue across different regions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracking trends over time&lt;/strong&gt; (using grouped or stacked bars)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handling large datasets&lt;/strong&gt; with multiple values&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualizing negative and positive values&lt;/strong&gt; side by side&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example use case
&lt;/h3&gt;

&lt;p&gt;A company wants to compare its monthly sales across different regions. A bar chart clearly shows how each region performs, making it easy to analyze trends and disparities.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use a Pie Chart?
&lt;/h2&gt;

&lt;p&gt;Pie charts work best when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Showing the percentage distribution&lt;/strong&gt; of a single dataset&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualizing a simple dataset&lt;/strong&gt; with a limited number of categories (ideal for 3–6 segments)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emphasizing proportions&lt;/strong&gt; rather than absolute values&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example use case
&lt;/h3&gt;

&lt;p&gt;A household wants to analyze its monthly expenses. A pie chart effectively visualizes how much of the budget goes toward rent, groceries, entertainment, and savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bar Chart vs. Pie Chart: Pros &amp;amp; Cons
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Bar Chart&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Pie Chart&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Comparisons&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Proportions&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Handles large datasets&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;No&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Shows trends&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;No&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Easy to interpret&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Works with negative values&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;No&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;strong&gt;Visually appealing&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Yes (If limited segments)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here’s a step-by-step guide to implementing the &lt;a href="https://help.syncfusion.com/maui-toolkit/cartesian-charts/barchart" rel="noopener noreferrer"&gt;&lt;strong&gt;Bar Chart&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://help.syncfusion.com/maui-toolkit/circular-charts/piechart" rel="noopener noreferrer"&gt;&lt;strong&gt;Pie Chart&lt;/strong&gt;&lt;/a&gt; in the Syncfusion&lt;sup&gt;®&lt;/sup&gt; .NET MAUI Toolkit using the &lt;a href="https://help.syncfusion.com/maui-toolkit/cartesian-charts/getting-started" rel="noopener noreferrer"&gt;&lt;strong&gt;SfCartesianChart&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://help.syncfusion.com/maui-toolkit/circular-charts/getting-started" rel="noopener noreferrer"&gt;&lt;strong&gt;SfCircularChart&lt;/strong&gt;&lt;/a&gt; controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create the Model
&lt;/h2&gt;

&lt;p&gt;Define a model class to represent the data for both charts, as shown in the code example below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChartModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;TrafficImage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;Visitors&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;DailyActiveUsers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;AgeGroup&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;Percentage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Create the ViewModel
&lt;/h2&gt;

&lt;p&gt;In the ViewModel, we will create sample data for the &lt;strong&gt;Bar Chart (Visualize traffic stats)&lt;/strong&gt; and the &lt;strong&gt;Pie Chart (Age group distribution of users).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Refer to the following code example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ViewModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ObservableCollection&lt;/span&gt; &lt;span class="n"&gt;TrafficStats&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ObservableCollection&lt;/span&gt; &lt;span class="n"&gt;ActiveUsers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ViewModel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;TrafficStats&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ObservableCollection&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Google"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Visitors&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1200&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Facebook"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Visitors&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;950&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Twitter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Visitors&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"LinkedIn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Visitors&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;450&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;

        &lt;span class="n"&gt;ActiveUsers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ObservableCollection&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Rent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Percentage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Groceries"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Percentage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Transport"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Percentage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Entertainment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Percentage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChartModel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Savings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Percentage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Bind data to the Bar Chart (Traffic stats)
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://help.syncfusion.com/maui-toolkit/cartesian-charts/getting-started" rel="noopener noreferrer"&gt;&lt;strong&gt;SfCartesianChart&lt;/strong&gt;&lt;/a&gt; to visualize traffic stats as a &lt;strong&gt;Bar Chart&lt;/strong&gt;, as shown in the code example below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;chart:SfCartesianChart&lt;/span&gt; &lt;span class="na"&gt;IsTransposed=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;chart:SfCartesianChart.XAxes&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;chart:CategoryAxis&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;chart:CategoryAxis.Title&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;chart:ChartAxisTitle&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Social Media"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/chart:CategoryAxis.Title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/chart:CategoryAxis&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/chart:SfCartesianChart.XAxes&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;chart:SfCartesianChart.YAxes&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;chart:NumericalAxis&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/chart:SfCartesianChart.YAxes&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;chart:ColumnSeries&lt;/span&gt; 
        &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding TrafficStats}"&lt;/span&gt;
        &lt;span class="na"&gt;XBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"Source"&lt;/span&gt;
        &lt;span class="na"&gt;YBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"Visitors"&lt;/span&gt;
        &lt;span class="na"&gt;ShowDataLabels=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;chart:ColumnSeries&lt;/span&gt; 
        &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding TrafficStats}"&lt;/span&gt;
        &lt;span class="na"&gt;XBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"Source"&lt;/span&gt;
        &lt;span class="na"&gt;YBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"DailyActiveUsers"&lt;/span&gt;
        &lt;span class="na"&gt;ShowDataLabels=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/chart:SfCartesianChart&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Bind Data to the Pie Chart
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://help.syncfusion.com/maui-toolkit/circular-charts/getting-started" rel="noopener noreferrer"&gt;&lt;strong&gt;SfCircularChart&lt;/strong&gt;&lt;/a&gt; to visualize the &lt;strong&gt;age group distribution of users&lt;/strong&gt; as a &lt;strong&gt;pie chart&lt;/strong&gt;, as shown in the code example below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;chart:SfCircularChart.Legend&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;chart:ChartLegend&lt;/span&gt; &lt;span class="na"&gt;Placement=&lt;/span&gt;&lt;span class="s"&gt;"Right"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/chart:SfCircularChart.Legend&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;chart:PieSeries&lt;/span&gt; 
    &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding ActiveUsers}"&lt;/span&gt;
    &lt;span class="na"&gt;XBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"AgeGroup"&lt;/span&gt;
    &lt;span class="na"&gt;YBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"Percentage"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/chart:PieSeries&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Enhance the appearance and effectiveness of the chart.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Customizing the tooltip for better readability
&lt;/h3&gt;

&lt;p&gt;Instead of default tooltips, you can create a &lt;strong&gt;custom&lt;/strong&gt; &lt;a href="https://help.syncfusion.com/cr/maui-toolkit/Syncfusion.Maui.Toolkit.Charts.ChartSeries.html#Syncfusion_Maui_Toolkit_Charts_ChartSeries_TooltipTemplate" rel="noopener noreferrer"&gt;&lt;strong&gt;tooltip template&lt;/strong&gt;&lt;/a&gt; to show icons and values clearly. The tooltip will show the &lt;strong&gt;platform logo, name, and visitor count&lt;/strong&gt; when hovering over a bar.&lt;/p&gt;

&lt;p&gt;Refer to the following code example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;chart:ColumnSeries.TooltipTemplate&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;DataTemplate&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;StackLayout&lt;/span&gt; &lt;span class="na"&gt;BackgroundColor=&lt;/span&gt;&lt;span class="s"&gt;"Black"&lt;/span&gt; &lt;span class="na"&gt;Padding=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt; &lt;span class="na"&gt;Orientation=&lt;/span&gt;&lt;span class="s"&gt;"Horizontal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt; &lt;span class="na"&gt;Source=&lt;/span&gt;&lt;span class="s"&gt;"{Binding TrafficImage}"&lt;/span&gt; &lt;span class="na"&gt;WidthRequest=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt; &lt;span class="na"&gt;HeightRequest=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"{Binding Source}"&lt;/span&gt; &lt;span class="na"&gt;TextColor=&lt;/span&gt;&lt;span class="s"&gt;"White"&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;"14"&lt;/span&gt; &lt;span class="na"&gt;Margin=&lt;/span&gt;&lt;span class="s"&gt;"5,0,0,0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;Text=&lt;/span&gt;&lt;span class="s"&gt;"Visitors: {Binding Visitors}"&lt;/span&gt; &lt;span class="na"&gt;TextColor=&lt;/span&gt;&lt;span class="s"&gt;"White"&lt;/span&gt; &lt;span class="na"&gt;FontSize=&lt;/span&gt;&lt;span class="s"&gt;"14"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/StackLayout&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/chart:ColumnSeries.TooltipTemplate&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding legends to improve clarity
&lt;/h3&gt;

&lt;p&gt;Use a &lt;a href="https://help.syncfusion.com/cr/maui-toolkit/Syncfusion.Maui.Toolkit.Charts.ChartLegend.html" rel="noopener noreferrer"&gt;legend&lt;/a&gt; to differentiate visitors and daily active users. A legend at the bottom makes it easy to distinguish between the two datasets.&lt;/p&gt;

&lt;p&gt;Refer to the following code example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;chart:SfCartesianChart.Legend&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;chart:ChartLegend&lt;/span&gt; &lt;span class="na"&gt;Placement=&lt;/span&gt;&lt;span class="s"&gt;"Bottom"&lt;/span&gt; &lt;span class="na"&gt;IsVisible=&lt;/span&gt;&lt;span class="s"&gt;"{OnPlatform Android='False',iOS='False',Default='True'}"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/chart:SfCartesianChart.Legend&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enhancing the Pie Chart with the Explode feature
&lt;/h3&gt;

&lt;p&gt;The largest age group slice is pulled out, drawing focus to the most significant segment. To make certain slices more prominent, use the &lt;a href="https://help.syncfusion.com/cr/maui-toolkit/Syncfusion.Maui.Toolkit.Charts.PieSeries.html#Syncfusion_Maui_Toolkit_Charts_PieSeries_ExplodeIndex" rel="noopener noreferrer"&gt;ExplodeIndex&lt;/a&gt; property, as shown in the code example below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;chart:PieSeries&lt;/span&gt; 
    &lt;span class="na"&gt;ItemsSource=&lt;/span&gt;&lt;span class="s"&gt;"{Binding ActiveUsers}"&lt;/span&gt;
    &lt;span class="na"&gt;XBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"AgeGroup"&lt;/span&gt;
    &lt;span class="na"&gt;YBindingPath=&lt;/span&gt;&lt;span class="s"&gt;"Percentage"&lt;/span&gt;
    &lt;span class="na"&gt;ExplodeOnTouch=&lt;/span&gt;&lt;span class="s"&gt;"True"&lt;/span&gt;
    &lt;span class="na"&gt;ExplodeIndex=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/chart:PieSeries&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Choosing the right chart: A quick guide
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If you need comparisons&lt;/strong&gt; → Use a Bar Chart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you need proportions&lt;/strong&gt; → Use a Pie Chart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you have many categories&lt;/strong&gt; → Avoid Pie Charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choosing the right chart type ensures your data is easily interpretable and visually appealing. Use bar charts when comparing values and pie charts when showing percentage distributions.&lt;/p&gt;

&lt;p&gt;By leveraging Syncfusion’s .NET MAUI Toolkit &lt;a href="https://www.syncfusion.com/maui-controls/maui-cartesian-charts" rel="noopener noreferrer"&gt;SfCartesianChart&lt;/a&gt; and &lt;a href="https://www.syncfusion.com/maui-controls/maui-circular-charts" rel="noopener noreferrer"&gt;SfCircularChart&lt;/a&gt;, you can build interactive and insightful visualizations for your applications.&lt;/p&gt;

&lt;p&gt;After executing the previously outlined steps, the output will look like the following image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F04%2FBarAndPie_Chart.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.syncfusion.com%2Fblogs%2Fwp-content%2Fuploads%2F2025%2F04%2FBarAndPie_Chart.png" alt="Selecting Effective Data Visualization between Bar Chart and Pie Chart" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecting Effective Data Visualization between Bar Chart and Pie Chart&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub reference
&lt;/h2&gt;

&lt;p&gt;For more details, refer to the project on the &lt;a href="https://github.com/SyncfusionExamples/Bar-Chart-vs.-Pie-Chart--Choosing-the-Right-Chart-for-Your-Data-Visualization-Needs" rel="noopener noreferrer"&gt;GitHub demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We hope this guide helped you decide when to use a bar chart versus a pie chart. Using the Syncfusion&lt;sup&gt;®&lt;/sup&gt; .NET MAUI Toolkit, you can easily bring your data to life with clean models, smooth data binding, interactive legends, custom tooltips, and stunning explode effects.&lt;/p&gt;

&lt;p&gt;Ready to take your charts to the next level? Start implementing our shared examples and share your experience in the comments. &lt;/p&gt;

&lt;p&gt;Existing customers can access the new version of Essential Studio&lt;sup&gt;®&lt;/sup&gt; on the &lt;a href="https://www.syncfusion.com/account/downloads" rel="noopener noreferrer"&gt;license and downloads&lt;/a&gt; page. If you aren’t a Syncfusion&lt;sup&gt;®&lt;/sup&gt; customer, try our 30-day &lt;a href="https://www.syncfusion.com/downloads" rel="noopener noreferrer"&gt;free trial&lt;/a&gt; to explore these new features along with over 1,900 other UI components.&lt;/p&gt;

&lt;p&gt;For further help, reach out to us via our &lt;a href="https://www.syncfusion.com/forums" rel="noopener noreferrer"&gt;support forum&lt;/a&gt;, &lt;a href="https://mauitoolkit.syncfusion.com/create" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;, or &lt;a href="https://www.syncfusion.com/feedback" rel="noopener noreferrer"&gt;feedback portal&lt;/a&gt;—we’re here to help you build beautiful, data-driven apps with ease.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related blogs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/essential-ui-kit-for-dotnet-maui-2" rel="noopener noreferrer"&gt;Essential® UI Kit for .NET MAUI 2.0.0: 8 Customizable Pages to Boost App Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/portfolio-charts-maui-toolkit" rel="noopener noreferrer"&gt;Analyze and Track Investment Portfolios with .NET MAUI Toolkit Charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/build-a-todo-app-dotnet-maui-listview" rel="noopener noreferrer"&gt;Build a To-Do List App with .NET MAUI – Step-by-Step Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/whats-new-net-maui-in-net-10-preview" rel="noopener noreferrer"&gt;.NET MAUI in .NET 10 Preview: A Focus on Quality and the Developer Experience&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article was originally published at &lt;a href="https://www.syncfusion.com/blogs/post/bar-chart-vs-pie-chart" rel="noopener noreferrer"&gt;Syncfusion.com.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnetmaui</category>
      <category>chart</category>
      <category>chartoftheweek</category>
      <category>datavisualization</category>
    </item>
  </channel>
</rss>
