We’re pleased to announce the release of Spire.PDF for Python 12.7.0. This version introduces the AutoFontSize property, which enables automatic resizing of text content to fit within a signature field. Additionally, it fixes a font issue that occurred when replacing text. Further details are provided below.

Here is a list of changes made in this release

Category ID Description
New Feature SPIREPDF-7319 Added the AutoFontSize property to support auto-fitting text content to the size of a signature field.
# Initialize a PDF document object
doc = PdfDocument()

# Load the PDF file that needs to be signed
doc.LoadFromFile(inputFile)

# Specify the password for the PFX certificate file
pfxPassword = "e-iceblue"

# Get the first page of the document
page = doc.Pages.get_Item(0)

# Create an ordinary signature maker using the certificate file
signatureMaker = PdfOrdinarySignatureMaker(doc, inputFile_pfx, pfxPassword)

# Set the signature validation layer (False indicates displaying the validity symbol)
signatureMaker.SetAcro6Layers(False)

# Get the signature object and configure the basic information of the signer
signature = signatureMaker.Signature
signature.Name = "Gary"              # Signer's name
signature.ContactInfo = "028-81705109" # Contact information
signature.Location = "Chengdu"       # Signature location
signature.Reason = "The certificate of this document" # Reason for signing

# Create a custom signature appearance object
appearance = PdfSignatureAppearance(signature)
appearance.NameLabel = "Signer: "          # Name label
appearance.ContactInfoLabel = "ContactInfo: " # Contact information label
appearance.LocationLabel = "Location: "    # Location label
appearance.ReasonLabel = "Reaseon: "       # Reason label
appearance.SignatureImage = PdfImage.FromFile(inputFile_image) # Load the signature image
appearance.GraphicMode = GraphicMode.SignImageAndSignDetail # Set to display both the signature image and detailed information
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges # Set document permissions to forbid changes
appearance.SignImageLayout = SignImageLayout.Stretch # Set the layout mode of the signature image to stretch
appearance.AutoFontSize = True  # Enable auto font size adjustment for text

# Generate and apply the signature at the specified position on the page (Parameters in order: signature field name, page, X coordinate, Y coordinate, width, height, appearance object)
signatureMaker.MakeSignature("signName", page, 54.0, page.Size.Height - 300.0, 40.0, 40.0, appearance)

# Save the signed PDF document
doc.SaveToFile(outputFile)

# Close the document and release resources
doc.Close()
Bug Fix SPIREPDF-8056 Fixed the issue where the font was incorrect after text replacement.
Click the link to download Spire.PDF for Python 12.7.0:

We're pleased to announce the release of Spire.Presentation for C++ 11.7.0. This version fixes several issues related to PowerPoint document splitting, PDF conversion, and document loading, improving the overall stability of PowerPoint processing. More details are listed below.

Here is a list of changes made in this release

Category ID Description
Bug Fix - Fixed an issue where the output file size increased after splitting a PowerPoint document.
Bug Fix - Fixed a text shape position shift when converting PowerPoint documents to PDF.
Bug Fix - Fixed an Arg_NullReferenceException thrown when loading a PowerPoint document.
Click the link below to download Spire.Presentation for C++ 11.7.0:

We're pleased to announce the release of Spire.OfficeJS 11.6.5. This release upgrades the product's underlying architecture and adjusts the release package structure. Details are listed below

Here is a list of changes made in this release

Category ID Description
Optimization - Upgraded the product's underlying architecture to improve document loading and display speed.
Optimization - Adjusted the release package structure.
Click the link to download Spire.OfficeJS 11.6.5:

We're pleased to announce the release of Spire.Office for JavaScript 11.7.0. This version supports converting Word documents directly to XLSX format and operating on format revision information. Meanwhile, it also supports setting the data label position for charts and adding, modifying, or deleting SmartArt graphics. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New Feature - Supports converting Word directly to XLSX format.
 let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.XLSX});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Supports operating on format revision information.
 let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        let revisionInfoCollection = doc.GetRevisionInfos();
        for (let i = 0; i < revisionInfoCollection.Count; i++) {
            let revisionInfo = revisionInfoCollection.get_Item(i);
            if (revisionInfo.RevisionType === spiredoc.RevisionType.FormatChange)
             {
                revisionInfo.Reject();  // or Accept()
                i--;
            }
        }
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Supports setting "Automatically adjust right indent when document grid is defined".
 let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        let section = doc.Sections.get_Item(0);
        let para1 = section.Paragraphs.get_Item(2);
        para1.Format.AdjustRightIndent = true;
        section.AddParagraph();
        let para3 = section.Paragraphs.get_Item(7);
        para3.AppendText("News Line Sample");
        para3.Format.AdjustRightIndent = true;
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Paragraph class adds the AppendSmartArt method, supporting appending SmartArt graphics in paragraphs.
 let document = new spiredoc.Document();
        let section = document.AddSection();
        let paragraph = section.AddParagraph();
        paragraph.Format.HorizontalAlignment = spiredoc.HorizontalAlignment.Center;
        let textRange = paragraph.AppendText("RepeatingBendingProcess");
        textRange.CharacterFormat.FontSize = 28;
        textRange.CharacterFormat.FontName = "Times New Roman";
        paragraph = section.AddParagraph();
        paragraph = section.AddParagraph();
        paragraph.Format.HorizontalAlignment = spiredoc.HorizontalAlignment.Center;
        let shape = paragraph.AppendSmartArt(spiredoc.SmartArtType.RepeatingBendingProcess, 432, 252);
        let repeatingBendingSmartArt = shape.SmartArt;
        let process1 = repeatingBendingSmartArt.Nodes.get_Item(0);
        process1.Text = "1";
        if (process1.Paragraphs.get_Item(0).ChildObjects.get_Item(0) instanceof spiredoc.TextRange) {
            process1.Paragraphs.get_Item(0).ChildObjects.get_Item(0).CharacterFormat.FontName = "Calibri";
            process1.Paragraphs.get_Item(0).ChildObjects.get_Item(0).CharacterFormat.FontSize = 20;
            process1.Paragraphs.get_Item(0).ChildObjects.get_Item(0).CharacterFormat.TextColor = spiredoc.Color.FromArgb(220, 20, 60);
        }
        repeatingBendingSmartArt.UpdateSmartArt();
        document.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        document.Close();
New Feature - Supports hiding table rows.
 let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        let table = doc.FirstSection.Body.Tables.get_Item(0);
        let firstRow = table.FirstRow;
        firstRow.Hidden = true;
        // Verify CharacterFormat.Hidden of all elements in the row
        for (let c = 0; c < row.Cells.Count; c++) {
            let cell = row.Cells.get_Item(c);
            for (let p = 0; p < cell.Paragraphs.Count; p++) {
                let para = cell.Paragraphs.get_Item(p);
                for (let r = 0; r < para.ChildObjects.Count; r++) {
                    let run = para.ChildObjects.get_Item(r);
                    if (run instanceof spiredoc.TextRange) { ... }
                }
            }
        }
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Supports drawing underlines on trailing spaces.
 let doc = new spiredoc.Document();
        doc.CompatibilityOptions.UlTrailSpace = true;  // or false
        let sec = doc.AddSection();
        let para = sec.AddParagraph();
        let blanks = "(6)   ";
        let tr = para.AppendText(blanks);
        tr.CharacterFormat.UnderlineStyle = spiredoc.UnderlineStyle.Single;
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx2013});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
New Feature - Supports reading chart data (XValues / YValues).
let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        for (let s = 0; s < doc.Sections.Count; s++) {
            let sec = doc.Sections.get_Item(s);
            for (let p = 0; p < sec.Paragraphs.Count; p++) {
                let paragraph = sec.Paragraphs.get_Item(p);
                for (let i = 0; i < paragraph.ChildObjects.Count; i++) {
                    let obj = paragraph.ChildObjects.get_Item(i);
                    if (obj instanceof spiredoc.ShapeObject) {
                        let shape = obj;
                        let chart = shape.Chart;
                        // Read X-axis data
                        for (let x = 0; x < chart.XValues.Count; x++) {
                            let xVal = chart.XValues.get_Item(x);
                        }
                        // Read Y-axis data
                        let series = chart.Series.get_Item(0);
                        for (let y = 0; y < series.YValues.Count; y++) {
                            let yVal = series.YValues.get_Item(y);
                        }
                    }
                }
            }
New Feature - Supports obtaining document revision information.
 let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        let revisionInfoCollection = doc.GetRevisionInfos();
        for (let i = 0; i < revisionInfoCollection.Count; i++) {
            let revisionInfo = revisionInfoCollection.get_Item(i);
            // Get revision information
            let author = revisionInfo.Author;
            let revisionType = revisionInfo.RevisionType;
            let dateTime = revisionInfo.DateTime;
            let ownerObjType = revisionInfo.OwnerObject.DocumentObjectType;
            // Determine the target object type
            if (revisionInfo.OwnerObject instanceof spiredoc.TextRange) {
                let range = revisionInfo.OwnerObject;
            }
        }
        doc.Dispose();
New Feature - Supports document compatibility option settings.
let doc = new spiredoc.Document();
        // Set individual compatibility options
        doc.CompatibilityOptions.UlTrailSpace = false;
        doc.CompatibilityOptions.AdjustLineHeightInTable = true;
        doc.CompatibilityOptions.SpaceForUL = true;
        doc.CompatibilityOptions.ApplyBreakingRules = true;
        doc.CompatibilityOptions.DoNotExpandShiftReturn = false;
        doc.CompatibilityOptions.OverrideTableStyleFontSizeAndJustification = false;
        doc.CompatibilityOptions.DoNotAutofitConstrainedTables = true;
        // Optimize for a specific Word version
        doc.CompatibilityOptions.OptimizeForWordVersion(spiredoc.WordVersion.Word2016);
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx2016});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Supports setting "Kerning for fonts".
  let doc = new spiredoc.Document();
        let sec = doc.AddSection();
        for (let item of testData) {
            let pa = sec.AddParagraph();
            let textRange = pa.AppendText(item.text);
            textRange.CharacterFormat.Kerning = item.kerning;
        }
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Supports setting text direction (Horizontal in Vertical).
let doc = new spiredoc.Document();
        let section = doc.AddSection();
        section.TextDirection = spiredoc.TextDirection.RightToLeft;
        let paragraph = section.AddParagraph();
        let range = paragraph.AppendText("text");
        let farEastLayout2 = paragraph.AppendText("34");
        let style = new spiredoc.FarEastLayout();
        style.Vertical = true;
        farEastLayout2.CharacterFormat.FarEastLayout = style;
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Doc});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Close();
New Feature - Supports extracting SmartArt-related information.
 let document = new spiredoc.Document();
        document.LoadFromFile(inputFileName);
        for (let s = 0; s < document.Sections.Count; s++) {
            let section = document.Sections.get_Item(s);
            for (let p = 0; p < section.Paragraphs.Count; p++) {
                let paragraph = section.Paragraphs.get_Item(p);
                for (let c = 0; c < paragraph.ChildObjects.Count; c++) {
                    let childObj = paragraph.ChildObjects.get_Item(c);
                    if (childObj instanceof spiredoc.Shape && childObj.HasSmartArt) {
                        let smartArt = childObj.SmartArt;
                        // Get SmartArt type
                        let type = smartArt.SmartArtType;
                        // Get background fill
                        let bgFillType = smartArt.BackgroundFill.FillType;
                        // Traverse nodes
                        for (let n = 0; n < smartArt.Nodes.Count; n++) {
                            let node = smartArt.Nodes.get_Item(n);
                            // Node text, font, shape properties
                            node.Text;
                            node.ShapeProperties.get(0).Fill.FillType;
                            node.ShapeProperties.get(0).Fill.Color;
                            node.ShapeProperties.get(0).LineFormat.Fill.FillType;
                        }
                    }
                }
            }
        }
        document.Dispose();
New Feature - Supports switching the revision view to compare style changes before and after.
 let doc = new spiredoc.Document();
        doc.LoadFromFile(inputFileName);
        let revisionInfoCollection = doc.GetRevisionInfos();
        for (let i = 0; i < revisionInfoCollection.Count; i++) {
            let revisionInfo = revisionInfoCollection.get_Item(i);
            if (revisionInfo.RevisionType === spiredoc.RevisionType.FormatChange) {
                if (revisionInfo.OwnerObject instanceof spiredoc.TextRange) {
                    let range = revisionInfo.OwnerObject;
                    doc.RevisionsView = spiredoc.RevisionsView.Original;
                    // Read Original style
                    let bold = range.CharacterFormat.Bold;
                    doc.RevisionsView = spiredoc.RevisionsView.Final;
                    // Read Final style
                    let color = range.CharacterFormat.TextColor;
                }
            }
        }
        doc.Close();
New Feature - Supports chart datalabel position settings.
 let doc = new spiredoc.Document();
        for (let pos of positions) {
            let section = doc.AddSection();
            let newPara = section.AddParagraph();
            let shape = newPara.AppendChart(spiredoc.ChartType.Pie, 500, 300);
            let chart = shape.Chart;
            chart.Series.get_Item(0).HasDataLabels = true;
            chart.Series.get_Item(0).DataLabels.ShowCategoryName = true;
            chart.Series.get_Item(0).DataLabels.ShowValue = true;
            chart.Series.get_Item(0).DataLabels.Position = pos;
        }
        doc.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, outputFile);
        doc.Dispose();
New Feature - Supports modifying SmartArt graphics.
 let document = new spiredoc.Document();
        document.LoadFromFile(inputFileName);
        let paragraph = document.LastParagraph;
        let shape1 = paragraph.ChildObjects.get_Item(0);
        let smartArt = shape1.SmartArt;
        // Modify background fill
        smartArt.BackgroundFill.FillType = spiredoc.FillType.Solid;
        smartArt.BackgroundFill.Color = spiredoc.Color.FromArgb(255, 242, 169, 132);
        // Modify node text
        let node = smartArt.Nodes.get_Item(0);
        node.Text = "Goals";
        // Modify node fill
        let shape = node.ShapeProperties.get(0);
        shape.Fill.FillType = spiredoc.FillType.Solid;
        shape.Fill.Color = spiredoc.Color.FromArgb(255, 160, 43, 147);
        shape.LineFormat.Fill.FillType = spiredoc.FillType.Solid;
        shape.LineFormat.Fill.Color = spiredoc.Color.FromArgb(255, 160, 43, 147);
        // Add new node
        let newNode = smartArt.Nodes.Add();
        newNode.Text = "Map";
        smartArt.UpdateSmartArt();
        document.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, fullOutputPath);
        document.Close();
New Feature - Supports deleting SmartArt graphics.
 let document = new spiredoc.Document();
        document.LoadFromFile(inputFileName);
        for (let j = 0; j < document.Sections.get_Item(0).Paragraphs.Count; j++) {
            let paragraph = document.Sections.get_Item(0).Paragraphs.get_Item(j);
            for (let i = 0; i < paragraph.ChildObjects.Count; i++) {
                let childObj = paragraph.ChildObjects.get_Item(i);
                try {
                    let smartArt = childObj.SmartArt;
                    if (smartArt != null) {
                        paragraph.Items.RemoveAt(i);
                        i--;
                    }
                } catch (e) { }
            }
        }
        document.SaveToFile({fileName: outFileName, fileFormat: spiredoc.FileFormat.Docx});
        spire.copyFileFromFSToLocalStorage(outFileName, fullOutputPath);
        document.Close();
Click the link to download Spire.Office for JavaScript 11.7.0:

E-iceblue today announced the official release of Spire.Agent.Office, an AI Agent-powered document processing component designed for enterprise systems and developers. It enables natural language-driven document intelligence to be embedded into applications and workflows, supporting end-to-end operations across Word, Excel, PowerPoint, and PDF files, including creation, editing, conversion, and review.

Spire.Agent.Office is composed of four specialized modules: Spire.Agent.Doc, Spire.Agent.XLS, Spire.Agent.Presentation, and Spire.Agent.PDF. Each module can be used independently or integrated as a unified suite, helping development teams rapidly build AI-driven document automation capabilities.

Spire.Agent.Doc

Spire.Agent.Doc is an AI Agent for Word document processing that enables document creation, editing, processing, and review through natural language instructions. It supports generating reports, contracts, proposals, and manuals, along with capabilities such as content refinement, format standardization, multi-format conversion, and information extraction.

Spire.Agent.XLS

Spire.Agent.XLS is an AI Agent for Excel spreadsheet processing that enables spreadsheet creation, data processing, analysis, formatting, and conversion via natural language instructions. It supports automated reporting, data cleaning, formula construction, and multi-format export.

Spire.Agent.Presentation

Spire.Agent.Presentation is an AI Agent that integrates natural language processing with the full capabilities of the Spire.Presentation API, enabling automated presentation generation, editing, and management. It allows developers to perform slide operations, content updates, media embedding, data visualization, and file conversion through AI-driven commands while maintaining full programmatic control.

Spire.Agent.PDF

Spire.Agent.PDF is an AI Agent for PDF document processing, providing capabilities for document assembly, security, validation, transformation, extraction, and delivery. It supports operations such as merging, splitting, encryption, format conversion, and data extraction for enterprise document workflows.

Download Spire.Agent.Office now to get started:

Contact Us


We’re pleased to announce the release of Spire.PDF for Java 12.7.0. This version fixes several issues related to digital signatures, PDF processing, and conversion stability. It also optimizes memory usage when replacing document content. More details are listed below.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREPDF-5182 Fixed an issue where signature verification failed after adding a digital signature.
Bug Fix SPIREPDF-7065 Fixed an issue with the signature error “Undefined length encoding”.
Bug Fix SPIREPDF-7547 Optimized memory consumption when replacing document content.
Bug Fix SPIREPDF-8095 Fixed an issue where project packaging failed under Java 21.
Bug Fix SPIREPDF-8096 Fixed a “NullPointerException” when compressing PDF files.
Bug Fix SPIREPDF-8099 Fixed an “ArrayIndexOutOfBoundsException” when converting PDF to images.
Click the link below to download Spire.PDF for Java 12.7.0:
Friday, 03 July 2026 08:52

Spire.Office 11.6.1 is released

 

We’re pleased to announce the release of Spire.Office 11.6.1. In this version, Spire.Doc enhances the conversion from Word to PDF; Spire.PDF optimizes the parsing logic for converting PDF to fixed-layout Word; Spire.XLS adjusts the Worksheet.SaveToPdf method; Spire.Presentation supports exporting formulas as MathML and LaTeX. Moreover, a large number of known bugs have been successfully resolved. More details are as follows.

DLL Versions:

  • Spire.Barocde.dll: 7.5.0
  • Spire.Doc.dll: 14.6.13
  • Spire.DocViewer.dll: 8.9.5
  • Spire.Email.dll: 6.8.0
  • Spire.OfficeViewer.dll: 8.8.1
  • Spire.Pdf.dll: 12.6.9
  • Spire.PdfViewer.dll: 8.3.0
  • Spire.Presentation.dll: 11.6.11
  • Spire.Spreadsheet.dll: 7.5.3
  • Spire.XLS.dll: 16.6.3
Click the link to get the version Spire.Office 11.6.1:
More information of Spire.Office new release or hotfix:

Here is a list of changes made in this release

Spre.doc

Category ID Description
Optimization - Optimized the revision functionality, resulting in improved outcomes when partially accepting revisions.
Bug Fix SPIREDOC-11907 Fixed an issue where the result was incorrect when converting Word to PDF after accepting revisions.

Spre.XLS

Category ID Description
Adjustment - Removed the FileFormat parameter from the Worksheet.SaveToPdf() method.
Bug Fix SPIREXLS-6133 Fixes the issue where an IndexOutOfRangeException was thrown when converting a chart to an image.
Bug Fix SPIREXLS-6142 Fixes the issue where the CalculateAllValue method returned incorrect formula calculation results.
Bug Fix SPIREXLS-6144 Fixes the issue where the CalculateAllValue method took too long to calculate formula values.
Bug Fix SPIREXLS-6146 Fixes the issue where a "Key cannot be null" exception was thrown when loading ODS files.

Spire.Presentation

Category ID Description
New Feature SPIREPPT-3044 Added support for configuring default fonts.
// Set default fonts
Presentation.SetDefaultLatinFontName("Arial");
Presentation.SetDefaultEastAsianFontName("Microsoft YaHei");
// Reset/restore the default font settings
Presentation.ResetDefaultEastAsianFontName();
Presentation.ResetDefaultLatinFontName();
New Feature - Added support for exporting formulas as MathML and LaTeX code.
IAutoShape shapeFormula = slide.Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(40, currentTop, shapeWidth, formulaHeight));

// Insert LaTeX formula
TextParagraph formulaPara = shapeFormula.TextFrame.Paragraphs.AddParagraphFromLatexMathCode(latex);

// Export as MathML
string mathML = formulaPara.ExportMathML();

// Export as LaTeX
string LaTex = formulaPara.ExportLaTex();
Bug Fix SPIREPPT-3117 Fixed an issue where words were split when converting PowerPoint documents to SVG.
Bug Fix SPIREPPT-3125 Fixed an issue where chart data formats were incorrect when converting PowerPoint documents to PDF.
Bug Fix SPIREPPT-3130 Fixed an issue where the shape corresponding to a retrieved image in a PowerPoint document was incorrect.
Bug Fix SPIREPPT-3131 Fixed an issue where text shapes were offset when converting PowerPoint documents to PDF.
Bug Fix SPIREPPT-3139 Fixed an issue where images were missing when converting PowerPoint documents to PDF.

Spire.PDF

Adjustment

Old class namespace New class namespace Old property name New property name
PdfLaunchAction PdfLaunchAction IsNewWindow NewWindow
PdfActionDestination PdfPredefinedAction
PdfEmbeddedGoToAction PdfEmbeddedGoToAction IsNewWindow NewWindow
PdfResetAction PdfResetFormAction
PdfSubmitAction PdfSubmitFormAction
PdfUriAction PdfURIAction Uri URI
PdfFieldActions PdfFormFieldAdditionalActions
PdfAnnotationActions PdfAnnotationAdditionalActions MouseEnter OnEnter
MouseLeave OnExit
MouseDown OnMouseDown
MouseUp OnMouseUp
GotFocus OnReceiveFocus
LostFocus OnLostFocus
Calculate /
Validate /
KeyPressed /
Format /
PdfDocumentActions PdfDocumentAdditionalActions Calculate OnCalculate
Validate OnValidate
KeyPressed OnModifyCharacter
Format OnFormat
MouseEnter OnEnter
MouseLeave OnExit
MouseDown OnMouseDown
MouseUp OnMouseUp
GotFocus OnReceiveFocus
LostFocus OnLostFocus
Old class name
(Spire.Pdf.General namespace)
New class name
(Spire.Pdf.Destinations namespace)
Old property name New property name
PdfDestination PdfDestination,
PdfExplicitDestination
PdfDestination
(Mode=Location)
PdfXYZExplicitDestination Location Left, Top
Rectangle /
Mode Type
PdfDestination
(Mode=FitToPage)
PdfFitExplicitDestination Location /
Rectangle /
Zoom /
Mode Type
PdfDestination
(Mode=FitH)
PdfFitHExplicitDestination Location Top
Rectangle /
Zoom /
Mode Type
PdfDestination
(Mode=FitR)
PdfFitRExplicitDestination Location /
Rectangle Left,Bottom, Right, Top
Zoom /
Mode Type
PdfDestination
(Mode=FitV)
PdfFitVExplicitDestination Location Left
Rectangle /
Zoom /
Mode Type
PdfFitBExplicitDestination
PdfFitBVExplicitDestination / Left
ID Description
- Adjusted the internal parsing logic for converting PDF to fixed-layout Word. Minor differences in conversion results may occur for some documents.

Bug Fix

ID Description
SPIREPDF-8034 Fixed the issue where the resulting document reported an error when converting XPS to PDF.
SPIREPDF-8047 Fixed the issue where characters overlapped when converting XPS to PDF.
SPIREPDF-8057 Fixed the issue where image backgrounds turned black when converting PDF to the PdfX1A2001 standard.
SPIREPDF-8074 Fixed the issue where the program threw a "The index can not be less then zero or greater then Count" exception when merging PDF documents.
- Fixed the issue where the generated DOCX document had an incorrect page size when using PdfToWordConverter.
SPIREPDF-8041 Fixed the issue where generated structured PDF documents failed to pass PDF/UA (ISO 14289-1) standard validation.
SPIREPDF-8082 Fixed the issue where the program became unresponsive when parsing individual corrupted documents.
SPIREPDF-8092 Fixed the issue where inconsistent formatting occurred when converting PDF to HTML.
SPIREPDF-8094 Fixed the issue where an "Invalid font metrics" exception was thrown when converting XPS to PDF.

Spire.OCR

Category ID Description
Bug Fix SPIREOCR-137 Fixed an issue where the OCR engine failed to preserve indentation and line spacing when recognizing images.

Spire.PdfViewer

Category ID Description
Bug Fix SPIREPDFVIEWER-625 Fixed issue with previewing PDF file throwing "ArgumentNullException" error.

We're pleased to announce the release of Spire.PDFViewer 8.3.0. This version fixes issue with previewing PDF file throwing "ArgumentNullException" error. More details are listed below.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREPDFVIEWER-625 Fixed issue with previewing PDF file throwing "ArgumentNullException" error.
Click the link below to download Spire.PDFViewer 8.3.0:
More information of Spire.PDFViewer new release or hotfix:

We're pleased to announce the release of Spire.Doc for Java 14.7.0. This version introduces new CompareOptions configuration options and adds support for the "Two Lines in One" feature. Moreover, several issues encountered during the conversion of Word to PDF and HTML have been successfully fixed. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New Feature SPIREDOC-8865 SPIREDOC-11824 SPIREDOC-10144 Added setIgnoreFields and setIgnoreCaseChanges configuration options to the CompareOptions class. Renamed setIgnoreTable(boolean value) to setIgnoreTables(boolean value). Renamed the corresponding getter getIgnoreTable() to getIgnoreTables().
Document doc1 = ConvertUtil.GetNewEngineDocument();
doc1.loadFromFile(inputFile_1);
String[] name1 = new String[]{"DJG_Black_Book", "DJG_Repairs_Expense", "DJG_Sale_Amount", "DJG_Dealer_Payment", "DJG_Auction_Fees"};
String[] value1 = new String[]{"20,000.00", "2,000.00", "13,500.00", "1,000.00", "500.00"};
doc1.getMailMerge().execute(name1, value1);
doc1.isUpdateFields(true);

Document doc2 = ConvertUtil.GetNewEngineDocument();
doc2.loadFromFile(inputFile_2);
String[] name2 = new String[]{"DJG_Black_Book", "DJG_Repairs_Expense", "DJG_Sale_Amount", "DJG_Dealer_Payment", "DJG_Auction_Fees"};
String[] value2 = new String[]{"50,000.00", "5,000.00", "3,500.00", "1,000.00", "200.00"};
doc2.getMailMerge().execute(name2, value2);
doc2.isUpdateFields(true);

CompareOptions options = new CompareOptions();
//set 'Moves'
options.setCompareMoves(true);
//set 'Case Changes'
options.setIgnoreCaseChanges(true);
//set 'Comments'
options.setIgnoreComments(true);
//set 'Fields'
options.setIgnoreFields(true);
//set 'Footnotes'
options.setIgnoreFootnotes(true);
//set 'Tables'
options.setIgnoreTables(true);
//set 'Textboxes'
options.setIgnoreTextboxes(true);
doc1.compare(doc2, "user", new Date(), options);
doc1.saveToFile(outputFile, FileFormat.Docx_2013);
doc1.close();
doc2.close();
New Feature SPIREDOC-11975 Added support for the "Two Lines in One" feature.
Document doc = ConvertUtil.GetNewEngineDocument();
Section section = doc.addSection();
section.setTextDirection(TextDirection.Right_To_Left);
Paragraph titlePara = section.addParagraph();
titlePara.appendText("===== FarEastLayout Two-Lines-in-One Full Scenario Test =====\n\n");

titlePara.appendText("\n\n1. Basic Two-Lines-in-One: ");
// Basic Two-Lines-in-One Combine=true, no brackets, no vertical layout
Paragraph p1 = section.addParagraph();
TextRange farEastLayout = p1.appendText("Basic Two-Lines-in-One: One Two Three Four");
farEastLayout.getCharacterFormat().setFontSize(12);
farEastLayout.getCharacterFormat().setFontNameFarEast("Songti");
FarEastLayout layout1 = new FarEastLayout();
layout1.setCombine(true); // Two-Lines-in-One
farEastLayout.getCharacterFormat().setFarEastLayout(layout1);

// Two-Lines-in-One + various bracket styles
Paragraph p1Title = section.addParagraph();
p1Title.appendText("\n\n2. Two-Lines-in-One + Different Brackets: ");

for (CombineBrackets bracket : CombineBrackets.values()) {
    Paragraph pTmp = section.addParagraph();
    TextRange rt = pTmp.appendText("Bracket Type " + bracket.name() + ": A B C D");
    rt.getCharacterFormat().setFontSize(12);
    rt.getCharacterFormat().setFontNameFarEast("Songti");
    FarEastLayout layoutTmp = new FarEastLayout();
    layoutTmp.setCombine(true);
    layoutTmp.setCombineBrackets(bracket);
    rt.getCharacterFormat().setFarEastLayout(layoutTmp);
}

doc.saveToFile(outputFile, FileFormat.Docx);
doc.close();
Bug Fix SPIREDOC-11155 Fixed the issue where a StringIndexOutOfBoundsException occurred when comparing documents.
Bug Fix SPIREDOC-11816 Fixed the issue where table formatting became disordered after accepting revisions.
Bug Fix SPIREDOC-11918 SPIREDOC-11926 SPIREDOC-11960 SPIREDOC-11964 SPIREDOC-11968 Fixed the issue where content layout was inconsistent when converting Word to PDF.
Bug Fix SPIREDOC-11919 Fixed the issue where the display effect was incorrect when opening merged Word documents in WPS.
Bug Fix SPIREDOC-11956 Fixed the issue where table layout was incorrect when converting Word to HTML.
Bug Fix SPIREDOC-11962 Fixed the issue where images rendered incorrectly when converting Word to PDF in Ubuntu environments.
Bug Fix SPIREDOC-11966 Fixed the issue where font effects were incorrect when converting Word to PDF.
Bug Fix SPIREDOC-11973 Fixed the issue where packaging errors occurred in higher-version Java environments.
Bug Fix SPIREDOC-11975 Added compatibility for "Double-line Combination" effect when converting Word to PDF.
Click the link below to download Spire.Doc for Java 14.7.0:
Tuesday, 30 June 2026 07:56

Spire.Office for Java 11.6.0 is released

We are excited to announce the release of Spire.Office for Java 11.6.0. In this version, Spire.Doc for Java enhances the conversion from Word to PDF; Spire.XLS for Java enhances Excel to PDF and image conversion; Spire.PDF for Java supports setting PDF reading direction and language. Besides, many issues have been successfully fixed in this version. More details are listed below.

Click the link to download Spire.Office for Java 11.6.0:

Here is a list of changes made in this release

Spire.Doc for Java

Category ID Description
Bug Fix SPIREDOC-11785 Fixed an issue where symbols wrapped incorrectly when converting Word to PDF.
Bug Fix SPIREDOC-11908 Fixed an issue where cross-reference fields were updated incorrectly.
Bug Fix SPIREDOC-11920 Fixed an issue where text positions were incorrect when converting Word to PDF.
Bug Fix SPIREDOC-11947 Fixed an issue where bullet styles were incorrect when converting Word to PDF.

Spire.XLS for Java

Category ID Description
Bug Fix SPIREXLS-6137 Fixed the issue of incorrect pagination when converting Excel to PDF.
Bug Fix SPIREXLS-6147 Fixed the issue of the application hanging when converting a worksheet to an image.
Bug Fix SPIREXLS-6156 Fixed the issue of content being cropped when converting Excel to images.

Spire.PDF for Java

Category ID Description
New Feature SPIREPDF-7829 Added support for signing with SHA-256/SHA-512 algorithm certificates.
public static void main(String[] args) throws IOException {
        // Create pdf document
        PdfDocument doc = new PdfDocument();
        // Load file from disk
        doc.loadFromFile("Sample.docx");
        // Load the X509 certificate for signature
        PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(new PdfCertificate("gary.pfx", "e-iceblue"), false);
        // Create an instance of PdfOrdinarySignatureMaker using the loaded document and certificate
        PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(doc, formatter);
        // Create an instance of PdfCustomSignatureAppearance as the appearance for the signature
        IPdfSignatureAppearance signatureAppearance = new PdfCustomSignatureAppearance();
        // Make the signature with a specified name and the custom appearance
        signatureMaker.makeSignature("Signature", signatureAppearance);
        // Iterate through all hash algorithm types
        for (HashAlgorithmType hashAlg : HashAlgorithmType.values()) {
        // Skip SM3 (case-insensitive)
            if ("SM3".equalsIgnoreCase(hashAlg.name())) {
                continue;
            }
            try {
                // Set the current hash algorithm
                formatter.getProperties().setHashAlgorithm(hashAlg);
                String filePath = "AddImageSignature_" + hashAlg.name() + ".pdf";
                doc.saveToFile(filePath, FileFormat.PDF);
                System.out.println("Succeed:" + hashAlg.name());
            } catch (Exception ex) {
                System.out.println("Error HashAlgorithmType:" + hashAlg.name());
                System.out.println("Error Info:" + ex.getMessage());
            }
        }
        // Close the document
        doc.close();
    }
    // Custom signature appearance implementation
    public static class PdfCustomSignatureAppearance implements IPdfSignatureAppearance {
        @Override
        public void generate(PdfCanvas pdfCanvas) {
            // Set font size
            int fontSize = 10;
            // Create Arial font
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.PLAIN, fontSize), true);
            // Set line height
            float lineHeight = fontSize;
            // Draw text string
            pdfCanvas.drawString("AAAAAAAAAAA", font, PdfBrushes.getRed(), new Point.Float(0, 0));
            // Draw image at specified position
            pdfCanvas.drawImage(PdfImage.fromFile("E-iceblue logo.png"), new Point.Float(20, 0));
        }
    }
New Feature SPIREPDF-8077 Added support for setting a fallback font when converting OFD to PDF.
OfdConverter converter = new OfdConverter(ofdFile.getAbsolutePath());
converter.getOptions().setDefaultFontName(fontName);
converter.toPdf(PdfPath);
New Feature SPIREPDF-8078 Added a progress callback for OFD to PDF conversion.
CustomProgressNotifier progressNotifier =new CustomProgressNotifier(output_txt);
    ofdConverter ofdconverter=new Ofdconverter(inputPath);
    ofdconverter.registerProgressNotifier(progressNotifier);
    ofdConverter.toPdf(outputPath);

    CustomProgressNotifier progressNotifier2=new CustomProgressNotifier(output_txt2);
    PdfToWordConverter converter=new PdfTowordConverter(inputPath2);
    converter.registerProgressNotifier(progressNotifier2);
    converter.saveToDocx(outputPath2)
New Feature SPIREPDF-7990 Added support for setting PDF reading direction and language.
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile(inputFile);
pdf.getViewerPreferences().setReadingDirection(PdfReadingDirection.LeftToRight);
pdf.setLanguage("zh-CN");
pdf.saveToFile(outputFile , FileFormat.PDF);
New Feature SPIREPDF-8091 Added an overload of IPdfSignatureFormatter to PdfMDPSignatureMaker, providing more flexible formatting support for PDF signature operations.
PdfDocument document = new PdfDocument();
PdfPageBase pdfPageBase = document.getPages().add();
pdfPageBase.getCanvas().drawString("Hello, World!",
new PdfFont(PdfFontFamily.Helvetica, 30f),
PdfBrushes.getBlack(), 10, 10);

PdfCertificate certificate = new PdfCertificate(path+"gary.pfx", "e-iceblue");
PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(certificate, false);
String timeStampUrl = "https://rfc3161.ai.moda/adobe";
formatter.setTimestampService(new TSAHttpService(timeStampUrl));
formatter.setOCSPService(new OCSPHttpService(null));

PdfMDPSignatureMaker signatureMaker = new PdfMDPSignatureMaker (document, formatter, PdfMDPSignatureMaker.Level2Permissions);
signatureMaker.makeSignature("signName");
com.spire.pdf.interactive.digitalsignatures.PdfSignature signature = signatureMaker.getSignature();
signature.setName("Gary");
// signature.setReason("This is the final version.");
signature.setLocation("U.S.");
signature.setContactInfo("112554");

PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);
appearance.setNameLabel("Signer: ");
// appearance.setReasonLabel("Reason: ");
appearance.setLocationLabel("Location: ");
appearance.setContactInfoLabel("Phone: ");

PdfImage image = PdfImage.fromFile(path+"logo.png");
appearance.setSignatureImage(image);

appearance.setGraphicMode(GraphicMode.SignImageAndSignDetail);

Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(new Point2D.Float(90, 550), new Dimension(150, 80));

signatureMaker.makeSignature("Signature", pdfPageBase,
    (float) rect.getMinX(), (float) rect.getMinY(),
    (float) rect.getWidth(), (float) rect.getHeight(),
    appearance);

String output = "signature.pdf";
document.saveToFile(path+output, FileFormat.PDF);
document.close(); 
Bug Fix SPIREPDF-8040 Fixed the issue where loading a PDF without a permission password caused an exception.
Bug Fix SPIREPDF-8060 Fixed the issue where converting an image to PDF caused an exception.
Bug Fix SPIREPDF-8065 Fixed the issue where checkmarks were missing when converting PDF to PDFA.
Bug Fix SPIREPDF-8067 Fixed the issue where extracted PDF text contained garbled characters.
Bug Fix SPIREPDF-8079 Fixed the issue where PDF-to-SVG conversion displayed incorrect content in browsers.
Bug Fix SPIREPDF-5475 Fixed an issue where signature validity verification was inaccurate.
Bug Fix SPIREPDF-8086 Fixed an issue where images were rendered incorrectly.
Page 4 of 26