zoukankan      html  css  js  c++  java
  • C# 在PDF中绘制动态图章

    我们知道,动态图章,因图章中的时间、日期可以动态的生成,因而具有较强的时效性。在本篇文章中将介绍通过C#编程在PDF中绘制动态图章的方法,该方法可自动获取当前系统登录用户名、日期及时间信息并生成图章。

    使用工具

    注:下载安装后,注意在程序中添加引用Spire.PDF.dll(dll文件可在安装路径下的Bin文件夹中获取)

     

    C#代码示例(供参考)

    步骤 1 :添加using指令

    using Spire.Pdf;
    using Spire.Pdf.Annotations;
    using Spire.Pdf.Annotations.Appearance;
    using Spire.Pdf.Graphics;
    using System;
    using System.Drawing;

    步骤 2 :创建文档,加载测试文件

    //创建PdfDocument对象
    PdfDocument doc = new PdfDocument();
    
    //加载现有PDF文档
    doc.LoadFromFile("sample.pdf");

    步骤 3 :获取需要添加动态图章的页面

    PdfPageBase page = doc.Pages[1];

    步骤 4 :创建印章模板、字体、画刷等

    //创建模板对象
    PdfTemplate template = new PdfTemplate(120, 60);
    
    //创建字体
    PdfCjkStandardFont font1 = new PdfCjkStandardFont(PdfCjkFontFamily.SinoTypeSongLight, 16f, PdfFontStyle.Bold | PdfFontStyle.Italic);
    PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("宋体", 10f), true);
    
    //创建单色画刷和渐变画刷
    PdfSolidBrush brush = new PdfSolidBrush(Color.Red);
    RectangleF rect = new RectangleF(new PointF(0, 0), template.Size);
    PdfLinearGradientBrush gradientBrush = new PdfLinearGradientBrush(rect, Color.White, Color.White, PdfLinearGradientMode.Horizontal);
    
    //创建圆角矩形路径
    int CornerRadius = 10;
    PdfPath path = new PdfPath();
    path.AddArc(template.GetBounds().X, template.GetBounds().Y, CornerRadius, CornerRadius, 180, 90);
    path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y, CornerRadius, CornerRadius, 270, 90);
    path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 0, 90);
    path.AddArc(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 90, 90);
    path.AddLine(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, template.GetBounds().X, template.GetBounds().Y + CornerRadius / 2);

    步骤 5 :应用模板

    //在模板上画圆角矩形路径,并用渐变色填充
    template.Graphics.DrawPath(gradientBrush, path);
    //在模板上画圆角矩形路径,并用红色填充路径
    template.Graphics.DrawPath(PdfPens.Red, path);

    步骤 6 :绘制印章上的文字、用户名、当前日期时间等

    String s1 = "已审阅
    ";
    String s2 = System.Environment.UserName + "行政处 
    " + DateTime.Now.ToString("F");
    template.Graphics.DrawString(s1, font1, brush, new PointF(5, 5));
    template.Graphics.DrawString(s2, font2, brush, new PointF(2, 28));

    步骤 7 :添加印章到PDF页面指定位置

    //创建PdfRubberStampAnnotation对象,并指定其位置和大小
    PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(new RectangleF(new PointF(page.ActualSize.Width - 300, 380), template.Size));
    
    //创建PdfApperance对象,并将模板应用为一般状态
    PdfAppearance apprearance = new PdfAppearance(stamp);
    apprearance.Normal = template;
    
    //在印章上应用PdfApperance对象(即样式)
    stamp.Appearance = apprearance;
    
    //将印章添加到PdfAnnotation集合
    page.AnnotationsWidget.Add(stamp);

    步骤 8 :保存并打开文档 

    doc.SaveToFile("output.pdf", FileFormat.PDF);
    System.Diagnostics.Process.Start("output.pdf");

    完成以上步骤后,调试运行程序,生成文档。在生成的文档中,文末已添加了动态的图章,如下图所示:

    全部代码:

    using Spire.Pdf;
    using Spire.Pdf.Annotations;
    using Spire.Pdf.Annotations.Appearance;
    using Spire.Pdf.Graphics;
    using System;
    using System.Drawing;
    
    namespace PDF动态图章
    {
        class Program
        {
            static void Main(string[] args)
            {
                //创建PdfDocument对象
                PdfDocument doc = new PdfDocument();
    
                //加载现有PDF文档
                doc.LoadFromFile("sample.pdf");
    
                //获取要添加动态印章的页面
                PdfPageBase page = doc.Pages[1];
    
                //创建模板对象
                PdfTemplate template = new PdfTemplate(120, 60);
    
                //创建字体
                PdfCjkStandardFont font1 = new PdfCjkStandardFont(PdfCjkFontFamily.SinoTypeSongLight, 16f, PdfFontStyle.Bold | PdfFontStyle.Italic);
                PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("宋体", 10f), true);
    
                //创建单色画刷和渐变画刷
                PdfSolidBrush brush = new PdfSolidBrush(Color.Red);
                RectangleF rect = new RectangleF(new PointF(0, 0), template.Size);
                PdfLinearGradientBrush gradientBrush = new PdfLinearGradientBrush(rect, Color.White, Color.White, PdfLinearGradientMode.Horizontal);
    
                //创建圆角矩形路径
                int CornerRadius = 10;
                PdfPath path = new PdfPath();
                path.AddArc(template.GetBounds().X, template.GetBounds().Y, CornerRadius, CornerRadius, 180, 90);
                path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y, CornerRadius, CornerRadius, 270, 90);
                path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 0, 90);
                path.AddArc(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 90, 90);
                path.AddLine(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, template.GetBounds().X, template.GetBounds().Y + CornerRadius / 2);
    
                //在模板上画圆角矩形路径,并用渐变色填充
                template.Graphics.DrawPath(gradientBrush, path);
                //在模板上画圆角矩形路径,并用红色填充路径
                template.Graphics.DrawPath(PdfPens.Red, path);
    
                //在模板上绘制印章文字、系统用户名、日期
                String s1 = "已审阅
    ";
                String s2 = System.Environment.UserName + "行政处 
    " + DateTime.Now.ToString("F");
                template.Graphics.DrawString(s1, font1, brush, new PointF(5, 5));
                template.Graphics.DrawString(s2, font2, brush, new PointF(2, 28));
    
                //创建PdfRubberStampAnnotation对象,并指定其位置和大小
                PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(new RectangleF(new PointF(page.ActualSize.Width - 300, 380), template.Size));
    
                //创建PdfApperance对象,并将模板应用为一般状态
                PdfAppearance apprearance = new PdfAppearance(stamp);
                apprearance.Normal = template;
    
                //在印章上应用PdfApperance对象(即样式)
                stamp.Appearance = apprearance;
    
                //将印章添加到PdfAnnotation集合
                page.AnnotationsWidget.Add(stamp);
    
                //保存文档
                doc.SaveToFile("output.pdf", FileFormat.PDF);
                System.Diagnostics.Process.Start("output.pdf");
            }
        }
    }
    View Code

    以上是本次关于C#在PDF文档中绘制动态图章的方法介绍,在前面的文章中介绍了添加印章的到PDF文档的方法,有需要也可以查阅该文档。

    感谢阅读。

    (本文完)

  • 相关阅读:
    redis 储存对象
    redis key 查看器
    c# 控制台程序编写RabbitMQ 生产者
    C# 使用Topshelf 构建 基于 window 服务的 RabbitMQ消费端
    asp.net webapi 使用定时任务Hangfire
    asp.net webpi 中使用 ClientHelper 发起HTTP请求
    SQL Server 导入和导出向导 未在本地计算机上注册Mircrosoft.ACE.OLEDB.12.0 提供程序
    c# 使用Linq 表达式 对查询结果分组,保留价格最低的一条
    Asp.Net s请求报传输流收到意外的 EOF 或 0 个字节
    asp.net webapi 中使用rdlc 报表
  • 原文地址:https://www.cnblogs.com/Yesi/p/9549092.html
Copyright © 2011-2022 走看看