彩票走势图

年末更新!PDF开发API-Spire.PDF for .NET新版发布!支持通过外部服务进行数字签名

原创|产品更新|编辑:李显亮|2020-12-28 09:59:27.057|阅读 169 次

概述:Spire.PDF for .NET更新至v6.12.20,该版本支持通过外部服务进行数字签名并且支持设置PDF包中文件的字段并对文件进行排序。此外还增强了PDF转换到PDF/A 和PDF/A -3b的功能,以及修复了在查找文本中出现的问题,欢迎下载体验。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

Spire.PDF for .NET是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。操作简单,易上手,国产厂商提供优质便捷的技术支持。

近日,Spire.PDF for .NET也迎来了2020年12月更新发布!该版本支持通过外部服务进行数字签名并且支持设置PDF包中文件的字段并对文件进行排序。此外还增强了PDF转换到PDF/A 和PDF/A -3b的功能,以及修复了在查找文本中出现的问题,具体更新内容如下:

最新版Spire.PDF for .NET下载

这么优秀的国产工具怎能错过呢!慧都17周年庆!全线产品均享85折起,查看优惠价格!想要获取更多福利的朋友哦~

新功能

  • 支持通过外部服务进行数字签名。
    void Sign()
            {
                PdfDocument doc = new PdfDocument();
                doc.LoadFromFile(inputPath);
                //Load the certificate
                X509Certificate2 cert = new X509Certificate2(certPath, passwd);
                CustomPKCS7SignatureFormatter customPKCS7SignatureFormatter = new CustomPKCS7SignatureFormatter(cert);
                PdfSignature signature = new PdfSignature(doc, doc.Pages[0], customPKCS7SignatureFormatter, "signature0");
                signature.Bounds = new RectangleF(new PointF(90, 550), new SizeF(270, 90));
                //Set the dispay mode of graphics, if not set any, the default one will be applied
                signature.GraphicsMode = GraphicMode.SignDetail;
                signature.NameLabel = "Signer:";
                signature.Name = "gary";
                signature.ContactInfoLabel = "ContactInfo:";
                signature.DateLabel = "Date:";
                signature.Date = DateTime.Now;
                signature.LocationInfoLabel = "Location:";
                signature.LocationInfo = "Chengdu";
                signature.ReasonLabel = "Reason: ";
                signature.Reason = "The certificate of this document";
                signature.DistinguishedNameLabel = "DN: ";
                signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill | PdfCertificationFlags.ForbidChanges;
                signature.SignDetailsFont = new PdfFont(PdfFontFamily.TimesRoman, 10f);
                signature.SignNameFont = new PdfFont(PdfFontFamily.Courier, 15);
                signature.SignImageLayout = SignImageLayout.None;
                //Save pdf file.
                doc.SaveToFile(outputPath, Spire.Pdf.FileFormat.PDF);
            }
    
            class CustomPKCS7SignatureFormatter : IPdfSignatureFormatter
            {
                ////// If encapsulate is true, a copy of the message will be included in the signature.
                ///private bool m_encapsulate = true;
    
                ////// The signing certificate.
                ///private X509Certificate2 m_certificate = null;
    
                public Dictionary m_parameters = new Dictionary();
                ////// Parameters for the encoding of the signature.
                /// 1.Key:Filter,String
                /// Required
                /// The name of the preferred signature handler to use when validating this signature.
                /// 2.SubFilter,String
                /// Required
                /// A name that describes the encoding of the signature value.
                /// PDF 1.6 defines the following values for public-key cryptographic signatures: adbe.x509.rsa_sha1, adbe.pkcs7.detached, and adbe.pkcs7.sha1
                /// 3.Cert,X509Certificate2
                /// Required when SubFilter is adbe.x509.rsa_sha1
                ///public Dictionary Parameters
                {
                    get
    
                    { return m_parameters; }
                }
    
                ////// Construct a new instance.
                //////The signing certificate.////// If encapsulate is true, a copy of the message will be included in the signature.
                ///public CustomPKCS7SignatureFormatter(X509Certificate2 certificate)
                {
                    if (null == certificate)
    
                    { throw new ArgumentNullException("certificate"); }
                    m_certificate = certificate;
                    Parameters.Add("Filter", "Adobe.PPKMS");
                    Parameters.Add("SubFilter", m_encapsulate ? "adbe.pkcs7.sha1" : "adbe.pkcs7.detached");
                }
    
                ////// Sign.
                //////The data that contains signature content.///The signaturepublic byte[] Sign(byte[] content)
                {
                    CmsSigner cmsSigner = new CmsSigner(m_certificate);
                    SHA1 sha1 = SHA1.Create();
                    SignedCms signedCms = new SignedCms(new ContentInfo(m_encapsulate ? sha1.ComputeHash(content) : content), !m_encapsulate);
                    signedCms.ComputeSignature(cmsSigner, true);
                    byte[] result = signedCms.Encode();
                    return result;
                }
            }
  • 支持设置PDF包中文件的字段并对文件进行排序。
    string[] files = Directory.GetFiles(@"files");
    string inputFile = @"input.pdf";
    string outputFile = @"result.pdf";
    using (PdfDocument doc = new PdfDocument(inputFile))
    {
        //添加字段
        doc.Collection.AddCustomField("No", "序号", Spire.Pdf.Collections.CustomFieldType.NumberField);
        doc.Collection.AddFileRelatedField("FileName", "文件名称", Spire.Pdf.Collections.FileRelatedFieldType.FileName);
        doc.Collection.AddFileRelatedField("Desc", "文件描述", Spire.Pdf.Collections.FileRelatedFieldType.Desc);
        doc.Collection.AddFileRelatedField("CreateDate", "创建时间", Spire.Pdf.Collections.FileRelatedFieldType.CreationDate);
        doc.Collection.AddFileRelatedField("ModDate", "修改时间", Spire.Pdf.Collections.FileRelatedFieldType.ModDate);
        doc.Collection.AddFileRelatedField("FileSize", "文件大小", Spire.Pdf.Collections.FileRelatedFieldType.Size);
        doc.Collection.AddCustomField("FileType", "文件类型", Spire.Pdf.Collections.CustomFieldType.TextField);
        doc.Collection.AddCustomField("FileDate", "自定义时间", Spire.Pdf.Collections.CustomFieldType.DateField);
    
        //根据字段对附件排序
        doc.Collection.Sort(new string[] { "No", "fileName", "Desc", "CreateDate", "ModDate", "FileSize", "FileType", "FileDate" }, new bool[] { false, true, true, true, true, true, true, true });
        for (int i = 0; i < files.Length; i++) { PdfAttachment attachment = new PdfAttachment(files[i]); doc.Collection.AddAttachment(attachment); } int n = 1; //设置字段值 foreach (PdfAttachment att in doc.Collection.AssociatedFiles) { att.SetFieldValue("No", n); att.Description = n + "文件描述"; att.SetFieldValue("FileDate", DateTime.Today); att.SetFieldValue("FileType", n + "文件"); n++; } doc.SaveToFile(outputFile, FileFormat.PDF); doc.Dispose(); }
  • 支持添加附件时,指定文档关系。
    PdfDocument doc = new PdfDocument();
    doc.LoadFromFile(inputPath);
    PdfAttachment attachment = new PdfAttachment(attachmentPath);
    doc.Attachments.Add(attachment,doc,Spire.Pdf.General.PdfAttachmentRelationship.Alternative);
    doc.SaveToFile(outputPath);
  • 支持在指定区域内查找文本。
    PdfDocument pdf = new PdfDocument();
    pdf.LoadFromFile(inputFile, FileFormat.PDF);
    RectangleF rctg = new RectangleF(0, 0, 200, 100);
    PdfTextFindCollection findCollection = pdf.Pages[0].FindText(rctg, "DEPOSIT", TextFindParameter.WholeWord);
    PdfTextFindCollection findCollectionOut = pdf.Pages[0].FindText(rctg, "agreement", TextFindParameter.WholeWord);
    foreach (PdfTextFind find in findCollection.Finds)
    { find.ApplyHighLight(Color.Green); }
    foreach (PdfTextFind findOut in findCollectionOut.Finds)
    { findOut.ApplyHighLight(Color.Yellow); }
    pdf.SaveToFile(outputFile, FileFormat.PDF);

Bug修复


慧都是E-iceblue官方友好合作伙伴,如果您对spire.PDF感兴趣,可以了解具体授权价格和使用机制。

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP