原創|產品更新|編輯:李顯亮|2020-12-31 10:05:23.740|閱讀 473 次
概述:Spire.PDF的.NET和java版均已迎來12月的更新,本文是更新詳情。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Spire.PDF是專業的PDF API,適用于創建,編寫,編輯,處理和讀取PDF文件,且無需安裝Adobe Acrobat。11月常規更新已發布,下面是具體的更新情況。
Spire.PDF for .NET更新至v6.12.20,該版本支持通過外部服務進行數字簽名并且支持設置PDF包中文件的字段并對文件進行排序。此外還增強了PDF轉換到PDF/A 和PDF/A -3b的功能,以及修復了在查找文本中出現的問題。
新功能
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;
            }
        }
	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修復
Spire.PDF for Java更新至v3.12.6,該版本支持了轉換PDF到TIFF,改善了doc.getPages().get(0).isBlank()方法邏輯,實現了提取PDF文本按照段落斷行以及讀取和寫入XMP元數據的功能。此外,該版本還增強了轉換PDF到Image/Excel/Word的功能。
新功能
PdfDocument pdf=new PdfDocument();
pdf.loadFromFile("C:/Test.pdf");
pdf.saveToTiff("C:/1.tiff");
pdf.saveToTiff("C:/2.tiff",1,2,TiffCompressionTypes.DEFAULT);
	PdfDocument doc = new PdfDocument();
// 加載PDF文檔
doc.loadFromFile(InputPath);
doc.getConvertOptions().setKeepParagraph(true);
File file = new File(OutputPath);
file.createNewFile();
FileWriter fw = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(fw);
StringBuilder builder = new StringBuilder();
PdfPageBase pageBase;
for (int i = 0; i < doc.getPages().getCount(); i++) { pageBase = doc.getPages().get(i); builder.append(pageBase.extractText(false) + "\r\n"); } bw.write(builder.toString()); bw.flush(); bw.close(); fw.close(); doc.close();
	PdfDocument pdf=new PdfDocument();
pdf.loadFromFile("C:/test.pdf");
//Get Xmp meta data
String lcXml = pdf.getXmpMetaData().getXmlString();
PdfDocument newDoc=new PdfDocument();
newDoc.getPages().add();
//Write Xmp meta data to PDF
newDoc.getXmpMetaData().load(lcXml);
newDoc.saveToFile("C:/new.pdf");
	Bug修復
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn