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文档的方法,有需要也可以查阅该文档。

    感谢阅读。

    (本文完)

  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/Yesi/p/9549092.html
Copyright © 2011-2022 走看看