福祉座椅斯维驰轮椅锂电池维修 發表於 2026-1-1 11:57:31

使用C#创建PDF文档的完整教程(文本、图片、形状与表格插入)

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>引言</li><li>一、创建 PDF 文档并绘制结构化文本内容</li><li>二、在 PDF 中插入图片并作为页面视觉元素或水印</li><li>三、绘制图形元素用于结构划分和视觉强调</li><li>四、生成支持分页和样式控制的业务数据表格</li><li>关键类、属性与方法总结</li><li>总结</li></ul></div><p class="maodian"></p><h2>引言</h2>
<p>在企业级应用和信息系统中,PDF 一直是最常见、也是最稳定的文档输出格式之一。无论是财务报表、合同文档、业务统计报告,还是系统自动生成的通知文件,PDF 都具备版式固定、跨平台一致、不可随意修改等优势。因此,<strong>在后端代码中动态生成 PDF 文档</strong>,几乎是每一个 .NET 项目都会涉及的需求。</p>
<p>相比于依赖 Office 环境或手工拼接 PDF,使用专业的 PDF 组件可以显著降低开发复杂度。本文将围绕&nbsp;<strong>Free Spire.PDF for .NET</strong>,系统地介绍如何在 C# 中创建 PDF 文档,并逐步实现以下常见功能:</p>
<p>从零创建 PDF 页面、绘制结构化文本内容、插入业务相关图片、绘制图形元素,以及生成支持分页和样式控制的复杂表格。通过完整示例,你可以快速将这些能力应用到实际项目中。</p>
<p class="maodian"></p><h2>一、创建 PDF 文档并绘制结构化文本内容</h2>
<p>在实际业务中,PDF 的第一页通常用于展示标题、说明性文字或报告概览,因此文本排版能力尤为重要。Free Spire.PDF 提供了灵活的文本绘制 API,可以同时控制字体、颜色、对齐方式以及行距等样式。</p>
<p>下面的示例演示了如何创建一个 PDF 文档,并在页面中绘制标题与正文说明。</p>
<div class="jb51code"><pre class="brush:csharp;">using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace PdfGenerationTutorial
{
    class AddText
    {
      static void Main(string[] args)
      {
            PdfDocument doc = new PdfDocument();
            PdfPageBase page = doc.Pages.Add();

            // 报告标题
            PdfTrueTypeFont titleFont = new PdfTrueTypeFont(
                new Font("微软雅黑", 16f, FontStyle.Bold), true);
            PdfBrush titleBrush = PdfBrushes.DarkSlateBlue;

            page.Canvas.DrawString(
                "2025 年度销售数据分析报告",
                titleFont,
                titleBrush,
                60,
                40
            );

            // 报告正文说明
            string description =
                "本报告用于汇总展示公司 2025 年度的核心销售数据," +
                "内容涵盖主要产品的销售数量、单价及总金额统计。" +
                "通过系统自动生成 PDF 文档,可以确保数据的一致性和可追溯性," +
                "同时减少人工整理报表的工作量,适用于内部汇报、管理决策及归档场景。";

            PdfTrueTypeFont bodyFont = new PdfTrueTypeFont(
                new Font("宋体", 11f), true);
            PdfBrush bodyBrush = PdfBrushes.Black;

            RectangleF textArea = new RectangleF(
                60,
                90,
                page.Canvas.ClientSize.Width - 120,
                page.Canvas.ClientSize.Height - 160
            );

            PdfStringFormat textFormat = new PdfStringFormat();
            textFormat.Alignment = PdfTextAlignment.Justify;
            textFormat.LineSpacing = 18f;

            page.Canvas.DrawString(
                description,
                bodyFont,
                bodyBrush,
                textArea,
                textFormat
            );

            doc.SaveToFile("Report_Text.pdf");
            doc.Dispose();
      }
    }
}</pre></div>
<p>运行该代码,将生成如下 PDF 文档:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/202611115814371.jpg" /></p>
<p>在这个示例中,标题与正文使用了不同的字体大小和颜色,并通过&nbsp;<code>RectangleF</code>&nbsp;明确限定了文本绘制区域。这样做的好处是,无论文本内容长度如何变化,布局都能保持稳定,同时自动处理换行问题。</p>
<p class="maodian"></p><h2>二、在 PDF 中插入图片并作为页面视觉元素或水印</h2>
<p>除了文本内容,图片在 PDF 中同样扮演着重要角色。例如企业 Logo、产品示意图、审批章或背景水印,都会频繁出现在正式文档中。</p>
<p>下面的代码展示了三种常见图片使用方式:普通插入、缩放展示以及半透明水印。</p>
<div class="jb51code"><pre class="brush:csharp;">using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace PdfGenerationTutorial
{
    class AddImage
    {
      static void Main(string[] args)
      {
            PdfDocument doc = new PdfDocument();
            PdfPageBase page = doc.Pages.Add();

            Image image = Image.FromFile("company_logo.png");
            PdfImage pdfImage = PdfImage.FromImage(image);

            // 左上角插入公司 Logo
            page.Canvas.DrawImage(pdfImage, 50, 50, 120, 60);

            // 页面中部插入示意图
            RectangleF imageArea = new RectangleF(50, 150, 220, 140);
            page.Canvas.DrawImage(pdfImage, imageArea);

            // 页面居中水印
            float pageWidth = page.Canvas.ClientSize.Width;
            float pageHeight = page.Canvas.ClientSize.Height;

            float wmWidth = pdfImage.Width * 0.4f;
            float wmHeight = pdfImage.Height * 0.4f;
            float x = (pageWidth - wmWidth) / 2;
            float y = (pageHeight - wmHeight) / 2;

            page.Canvas.Save();
            page.Canvas.SetTransparency(0.25f, 0.25f, PdfBlendMode.Multiply);
            page.Canvas.DrawImage(pdfImage, x, y, wmWidth, wmHeight);
            page.Canvas.Restore();

            doc.SaveToFile("Report_Image.pdf");
            doc.Dispose();
      }
    }
}</pre></div>
<p>生成文档示例:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/202611115814372.jpg" /></p>
<p>通过&nbsp;<code>SetTransparency</code>&nbsp;方法,可以轻松实现 PDF 水印效果。这在合同、报价单和内部资料中非常常见,既能体现品牌,又不会影响正文内容的可读性。</p>
<p class="maodian"></p><h2>三、绘制图形元素用于结构划分和视觉强调</h2>
<p>在报表类 PDF 中,线条、矩形或简单图形常用于分隔内容区域,增强页面结构感。Free Spire.PDF 提供了与 GDI+ 类似的绘图接口,使用起来非常直观。</p>
<div class="jb51code"><pre class="brush:csharp;">using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace PdfGenerationTutorial
{
    class Shapes
    {
      static void Main(string[] args)
      {
            PdfDocument doc = new PdfDocument();
            PdfPageBase page = doc.Pages.Add();

            // 分割线
            PdfPen linePen = new PdfPen(Color.DarkGray, 1.5f);
            page.Canvas.DrawLine(linePen, 50, 80, 500, 80);

            // 信息块背景
            PdfPen rectPen = new PdfPen(Color.SteelBlue, 1f);
            PdfBrush rectBrush = new PdfSolidBrush(Color.AliceBlue);
            page.Canvas.DrawRectangle(rectPen, rectBrush, 50, 100, 200, 90);

            // 高亮标识
            PdfPen circlePen = new PdfPen(Color.Orange, 2f);
            PdfBrush circleBrush = new PdfSolidBrush(Color.Moccasin);
            page.Canvas.DrawEllipse(circlePen, circleBrush, 300, 120, 60, 60);

            doc.SaveToFile("Report_Shapes.pdf");
            doc.Close();
      }
    }
}</pre></div>
<p>运行该代码,将生成如下 PDF 文档:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/202611115814373.jpg" /></p>
<p>这些基础图形虽然简单,但在实际报表中可以用于突出重点数据区域或增强整体排版层次。</p>
<p class="maodian"></p><h2>四、生成支持分页和样式控制的业务数据表格</h2>
<p>PDF 表格是业务系统中最常见、也是最复杂的输出形式之一。下面的示例模拟了一个&ldquo;产品销售明细表&rdquo;,并演示如何设置表头样式、隔行背景以及跨页重复表头。</p>
<div class="jb51code"><pre class="brush:csharp;">using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Tables;
using System.Data;
using System.Drawing;

namespace PdfGenerationTutorial
{
    class DataTableExample
    {
      static void Main(string[] args)
      {
            PdfDocument doc = new PdfDocument();
            PdfPageBase page = doc.Pages.Add();

            DataTable tableData = new DataTable();
            tableData.Columns.Add("编号");
            tableData.Columns.Add("产品名称");
            tableData.Columns.Add("单价(元)");
            tableData.Columns.Add("销量");
            tableData.Columns.Add("销售额(元)");

            for (int i = 0; i &lt; 25; i++)
            {
                decimal price = 49.9m + i;
                int qty = i + 2;
                tableData.Rows.Add(
                  i + 1,
                  $"智能设备型号-{i + 1}",
                  price,
                  qty,
                  price * qty
                );
            }

            PdfTable table = new PdfTable();
            table.DataSource = tableData;

            table.Style.BorderPen = new PdfPen(Color.Gray, 0.5f);
            table.Style.DefaultStyle.Font =
                new PdfTrueTypeFont(new Font("微软雅黑", 10f), true);
            table.Style.DefaultStyle.StringFormat =
                new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);

            table.Style.HeaderSource = PdfHeaderSource.Rows;
            table.Style.HeaderRowCount = 1;
            table.Style.ShowHeader = true;
            table.Style.HeaderStyle.BackgroundBrush =
                new PdfSolidBrush(Color.LightSkyBlue);
            table.Style.HeaderStyle.Font =
                new PdfTrueTypeFont(new Font("微软雅黑", 11f, FontStyle.Bold), true);
            table.Style.RepeatHeader = true;

            table.Style.AlternateStyle = new PdfCellStyle();
            table.Style.AlternateStyle.BackgroundBrush =
                new PdfSolidBrush(Color.WhiteSmoke);
            table.Style.AlternateStyle.StringFormat =
                new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);

            table.Columns.Width = 50;
            table.Columns.Width = 160;
            table.Columns.Width = 90;
            table.Columns.Width = 70;
            table.Columns.Width = 100;

            table.Draw(page, new PointF(40, 50));

            doc.SaveToFile("Sales_Table.pdf");
            doc.Close();
      }
    }
}</pre></div>
<p>生成的 PDF 文档如下:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/202611115814374.jpg" /></p>
<p>在这个场景中,即使数据行数超过一页,表格也会自动分页,并在每一页顶部重复显示表头,非常适合正式业务报表的生成需求。</p>
<p class="maodian"></p><h2>关键类、属性与方法总结</h2>
<table><tbody><tr><th>类 / 属性 / 方法</th><th>说明</th></tr><tr><td><code>PdfDocument</code></td><td>表示一个 PDF 文档对象,所有页面和内容都基于该对象创建</td></tr><tr><td><code>PdfDocument.Pages.Add()</code></td><td>向文档中添加一个新的 PDF 页面</td></tr><tr><td><code>PdfPageBase</code></td><td>表示 PDF 中的单个页面,所有绘制操作都在此进行</td></tr><tr><td><code>page.Canvas</code></td><td>页面画布对象,用于绘制文本、图片、图形等元素</td></tr><tr><td><code>PdfTrueTypeFont</code></td><td>使用系统字体创建 PDF 字体,支持中文显示</td></tr><tr><td><code>PdfBrush</code>&nbsp;/&nbsp;<code>PdfPen</code></td><td>分别用于填充颜色和描边绘制</td></tr><tr><td><code>Canvas.DrawString()</code></td><td>在指定位置或区域绘制文本内容</td></tr><tr><td><code>PdfStringFormat</code></td><td>控制文本对齐方式、行距、段落布局</td></tr><tr><td><code>RectangleF</code></td><td>定义文本或图片的绘制区域,用于布局控制</td></tr><tr><td><code>PdfImage.FromImage()</code></td><td>将&nbsp;<code>System.Drawing.Image</code>&nbsp;转换为 PDF 可用图片</td></tr><tr><td><code>Canvas.DrawImage()</code></td><td>在页面中绘制图片,支持缩放和定位</td></tr><tr><td><code>Canvas.SetTransparency()</code></td><td>设置绘制内容透明度,常用于水印效果</td></tr><tr><td><code>PdfTable</code></td><td>用于创建 PDF 表格并绑定数据源</td></tr><tr><td><code>PdfTable.DataSource</code></td><td>绑定&nbsp;<code>DataTable</code>&nbsp;或其他数据集合</td></tr><tr><td><code>PdfTable.Style</code></td><td>统一控制表格边框、字体、背景等样式</td></tr><tr><td><code>PdfTable.Draw()</code></td><td>将表格绘制到指定页面位置</td></tr><tr><td><code>PdfDocument.SaveToFile()</code></td><td>将 PDF 文档保存为文件</td></tr><tr><td><code>PdfDocument.Dispose()</code>&nbsp;/&nbsp;<code>Close()</code></td><td>释放资源,结束文档操作</td></tr></tbody></table>
<p class="maodian"></p><h2>总结</h2>
<p>通过本文的完整示例,可以看到使用&nbsp;<strong>Free Spire.PDF for .NET</strong>&nbsp;在 C# 中创建 PDF 文档,并不是零散 API 的堆砌,而是一个可系统化设计的文档生成过程。从页面初始化、内容布局,到数据驱动的表格输出,都可以通过清晰、可维护的代码完成。</p>
<p>对于需要长期输出业务报表、系统凭证或归档文档的 .NET 项目而言,这种方式不仅能够提升开发效率,也有助于保持文档风格的一致性和专业性。只要合理规划页面结构和数据来源,就可以将 PDF 生成作为系统中一个稳定、可靠的基础能力来使用。</p>
<p>以上就是使用C#创建PDF文档的完整教程(文本、图片、形状与表格插入)的详细内容,更多关于C#创建PDF文档的资料请关注琼殿技术社区其它相关文章!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>C#/VB.NET实现在PDF文档中创建表格</li><li>C#/VB.NET创建PDF文档的示例代码</li><li>C# 在PDF文档中创建表格的实现方法</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 使用C#创建PDF文档的完整教程(文本、图片、形状与表格插入)