We’re pleased to announce the release of Spire.Barcode for Python 7.3.0. This version adds support for macOS on ARM architecture, enabling developers to run barcode generation and recognition workflows more efficiently on Apple Silicon devices. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New feature - Added support for macOS on ARM architecture.
Click the link below to download Spire.Barcode for Python 7.3.0

We’re excited to announce the release of Spire.PDF for Java 12.2.1. This update primarily addresses PDF-to-Word conversion issues. More details are as follows.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREPDF-5896 Fixed the issue where image content appeared blurry when converting PDF to Word.
Bug Fix SPIREPDF-7700 SPIREPDF-7914 Fixed the issue where incorrect conversion results occurred in PDF to Word.
Bug Fix SPIREPDF-7933 Fixed the issue where loading PDF documents resulted in a "file structure is not valid" error.
Bug Fix SPIREPDF-7895 SPIREPDF-7905 Optimized the overload method (setBackgroundImage(PdfImage image)) for setting background images.
Click the link below to download Spire.PDF for Java 12.2.1:

We're glad to announce the release of Spire. Presentation 11.2.1. This version mainly fixes three issues that arose when converting PowerPoint to PDF and SVG. Check below for the details.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREPPT-2841 Fixed the issue where rendering effects were inconsistent when converting PowerPoint to SVG.
Bug Fix SPIREPPT-3073 Fixed the issue that extraneous log information was generated when converting PowerPoint to PDF.
Bug Fix SPIREPPT-3073 Fixed the issue that charts were missing when converting PowerPoint to PDF.
Click the link to download Spire.Presentation 11.2.1:
More information of Spire.Presentation new release or hotfix:

We're pleased to announce the release of Spire.XLS for Python 16.2.0. This version supports macOS on ARM architecture. Meanwhile, some issues that occurred when copying OLE objects, deleting macros, converting text-formatted values to numbers, and saving Excel documents to EMF have also been successfully fixed. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New feature SPIREXLS-5183 Added support for macOS on ARM architecture.
Bug Fix SPIREXLS-5970 Fixes the issue where copied OLE objects displayed incorrectly in WPS.
Bug Fix SPIREXLS-6011 Fixes the issue where deleting macros did not work correctly.
Bug Fix SPIREXLS-6012 Fixes the issue where no error message was shown for the incorrect setting workbook.ConverterSetting.Xdpi (should be XDpi).
Bug Fix SPIREXLS-6026 Fixes the issue where converting text-formatted values to number format failed.
Bug Fix SPIREXLS-6032 Fixes the issue where saving an Excel document to EMF threw an exception.
Click the link to download Spire.XLS for Python 16.2.0:

We’re pleased to announce the release of Spire.Presentation for Python 11.2.0. This version adds support for macOS on ARM architecture. Additionally, an issue involving content loss when converting PPT files to images has been fixed. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New feature SPIREPPT-3037 Added support for macOS on ARM architecture.
Bug Fix SPIREPPT-3037 Fixed the issue of content loss when converting PPT to images.
Click the link below to download Spire.Presentation for Python 11.2.0:
Friday, 30 January 2026 10:08

Spire.Office 11.1.0 is released

We’re excited to announce the release of Spire.Office 11.1.0. In this version, Spire.Doc supports creating and manipulating VAB macros in Word files; Spire.XLS supports converting a specified cell range to HTML; Spire.Presentationm supports highlighting text based on regular expression matches; Spire.PDF supports saving files in PDF 2.0 version. Moreover, a large number of bugs have been successfully fixed in this update.

In this version, the most recent versions of Spire.Doc, Spire.PDF, Spire.XLS, Spire.Presentation, Spire.Barcode, Spire.DocViewer, Spire.PDFViewer, and Spire.Email are included.

DLL Versions:

  • Spire.Doc.dll v14.1.12
  • Spire.PDF.dll v12.1.6
  • Spire.XLS.dll v16.1.4
  • Spire.Presentation.dll v11.1.1
  • Spire.Barcode.dll v7.5.0
  • Spire.Email.dll v6.8.0
  • Spire.DocViewer.Forms.dll v8.9.5
  • Spire.PdfViewer.Asp.dll v8.2.9
  • Spire.PdfViewer.Forms.dll v8.2.9
  • Spire.Spreadsheet.dll v7.5.3
  • Spire.OfficeViewer.Forms.dll v8.8.1
Click the link to get the version Spire.Office 11.1.0:
More information of Spire.Office new release or hotfix:

Here is a list of changes made in this release

Spre.doc

Category ID Description
New Feature SPIREDOC-3929 Added support for configuring formula conversion to MathML when converting Word to HTML.
HtmlExportOptions options = doc.HtmlExportOptions;
options.OfficeMathOutputMode = HtmlOfficeMathOutputMode.MathML;
New Feature SPIREDOC-9868 Added support for deleting specified pages and blank pages.
doc.RemoveBlankPages(); // Delete blank pages
doc.RemovePages(new List {0,1,3}); // Delete specified pages
New Feature SPIREDOC-11489 Added support for creating and manipulating VBA macros.
Document doc = new Document();
doc.AddSection().AddParagraph().AppendText("wertyuiop[]fghjk");

// Add VBA project to document
VbaProject vbaProject = new VbaProject();
vbaProject.Name = "SampleVBAMacro";
doc.VbaProject = vbaProject;

// Add modules to VBA project
// Module 1
VbaModule vbaModule1 = doc.VbaProject.Modules.Add("SampleModule1", VbaModuleType.StdModule);
vbaModule1.SourceCode = @"
Sub DocumnetInfo()
    MsgBox ""create time: "" &Now()
    MsgBox ""Pages:"" & ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
End Sub

Sub WriteHello()
    Selection.TypeText Text:=""Hello World!""
End Sub";

// Module 2
VbaModule vbaModule2 = doc.VbaProject.Modules.Add("SampleModule2", VbaModuleType.StdModule);
vbaModule2.SourceCode = @"
Sub InsertCurrentDate()
    Selection.TypeText Text:=Format(Now(),""yyyy-mm-dd hh:mm:ss"")
End Sub

Sub IndentParagraph()
    Selection.ParagraphFormat.LeftIndent = InchesToPoints(0.5)
End Sub";

doc.SaveToFile("result.docm", FileFormat.Docm);
doc.Close();
New Feature SPIREDOC-11598 Added GetRevisionInfos() method to retrieve full revision information from the document.
Document doc = new Document();
doc.LoadFromFile("input.docx");
StringBuilder sb = new StringBuilder();
RevisionInfoCollection revisionInfoCollection = doc.GetRevisionInfos();

foreach (RevisionInfo revisionInfo in revisionInfoCollection)
{
    sb.AppendLine("[author]:" + revisionInfo.Author + "\r\n" + "  [RevisionType]:" + revisionInfo.RevisionType + "\r\n" + "  [DateTime]:" + revisionInfo.DateTime.ToString() + "\r\n" + "  [OwnerObject]:" + revisionInfo.OwnerObject + "\r\n" + "  [OwnerObject.Owner]:" + revisionInfo.OwnerObject.Owner + "\r\n");
    if (revisionInfo.OwnerObject is TextRange textRange)
    {
        TextRange range = (TextRange)textRange;
        sb.AppendLine($"TextRange - Content:{range.Text}");
    }
}
File.WriteAllText(outputFile, sb.ToString());
doc.Dispose();
Bug Fix SPIREDOC-11523 Fixed the issue where the program hangs when converting Word to PDF.
Bug Fix SPIREDOC-11632 Fixed the issue where line breaks are incorrect when adding multi-line watermarks.
Bug Fix SPIREDOC-11692 Fixed the issue where table of contents fields fail to update.
Bug Fix SPIREDOC-11703 Fixed the issue where the result is incorrect when converting Markdown to Word.
Bug Fix SPIREDOC-11706 Fixed the issue where document saving takes a long time when adding multi-line text with "\r\n".
Bug Fix SPIREDOC-11727 Fixed the issue where extra blank paragraphs appear when adding HTML to Word.
Bug Fix SPIREDOC-11744 Fixed the issue where images are blurry when converting Word to HTML.
Bug Fix SPIREDOC-11767 Fixed the issue where content is inconsistent when loading and saving RTF files.
Bug Fix SPIREDOC-10843 Fixed the issue where the program hung for a long time when using new FixedLayoutDocument(document).
Bug Fix SPIREDOC-11532 Fixed the issue where the program hung for a long time when converting Word documents to PDF.
Bug Fix SPIREDOC-11758 Fixed the issue where an incorrect numbering format was returned when retrieving lists.
Bug Fix SPIREDOC-11728 SPIREDOC-11730 SPIREDOC-11731 Fixed the issue where incorrect content was generated when converting Word documents to PDF.

Spre.XLS

Category ID Description
New Feature SPIREXLS-5948 Added support for the BYROW and BYCOL functions.
// Use BYROW to calculate the average of each row
sheet.Range["G2"].Formula = "=BYROW(B2:F2, LAMBDA(row, AVERAGE(row)))";
// Use BYCOL to calculate the average of each column
sheet.Range["B8"].Formula = "=BYCOL(B2:B7, LAMBDA(col, AVERAGE(col)))";
New Feature SPIREXLS-5980 Added support for converting a specified cell range to HTML.
Workbook workbook = new Workbook();
workbook.LoadFromFile(inputFile);
Worksheet sheet = workbook.Worksheets[0];
CellRange cell = sheet.Range["A1:B3"];
string html = cell.HtmlString;
File.WriteAllText(outputFile, html);
New Feature SPIREXLS-5983 Added support for transposing rows and columns when copying a cell range.
CopyRangeOptions options = CopyRangeOptions.Transpose | CopyRangeOptions.All;
sheet["A1:C4"].Copy(sheet["D2:G3"], options);
sheet["A1:B5"].Copy(sheet["D5"], options);
workbook.SaveToFile(outputFile);
New Feature SPIREXLS-6018 Added support for converting Excel files to PDF/UA-compliant documents.
Workbook workbook = new Workbook();
workbook.LoadFromFile(inputFile);
workbook.ConverterSetting.PdfConformanceLevel = Spire.Xls.Pdf.PdfConformanceLevel.Pdf_UA1;
workbook.SaveToFile(outputFile, FileFormat.PDF);
workbook.Dispose();
Bug Fix SPIREXLS-6044 Fixed an issue where OLE objects in the document could not be deleted successfully.

Spire.Presentation

Category ID Description
New Feature - Added support for highlighting text based on regular expression matches.
// Simple word matching
Regex regex = new Regex(@"\bhello\b");
IAutoShape shape = (IAutoShape)ppt.Slides[0].Shapes[0];
TextHighLightingOptions options = new TextHighLightingOptions();
shape.TextFrame.HighLightRegex(regex, Color.Red, options);
New Feature SPIREPPT-3051 Fixed the issue where some content was lost during PPTX-to-PDF conversion.
Bug Fix SPIREPPT-3058 Fixed the issue where the configured default font was not applied during PPTX-to-PDF conversion.

Spire.PDF

Category ID Description
New Feature SPIREPDF-5365 Supports getting and setting the PDF 2.0 version.
// Retrieve
PdfFileInfo info = doc.FileInfo;
PdfVersion version = info.Version;

// Settings
doc.FileInfo.Version = PdfVersion.Version2_0;
Bug Fix SPIREPDF-6905 Fixes the issue where text color was rendered incorrectly when converting PDF to images.
Bug Fix SPIREPDF-7866 Fixes the issue where memory was not properly released during text replacement.
Bug Fix SPIREPDF-7875 Fixes the issue where QR codes were missing after converting PDF to PDF/A or images.
Bug Fix SPIREPDF-7884 Fixes the issue where an ArgumentOutOfRangeException was thrown when loading XPS files.
Bug Fix SPIREPDF-7892 Fixes the issue where text extraction failed under certain conditions.
Bug Fix SPIREPDF-7867 Fixes the issue where rendering effects were incorrect when converting PDF to Word.
Bug Fix SPIREPDF-7097 Fixes the issue where content copied from the result document was incorrect after converting PDF to PDF/A-3B.
Bug Fix SPIREPDF-7841 Fixes the page numbering style issue when using ChromeHtmlConverter to convert HTML to PDF for printing.
Bug Fix SPIREPDF-7847 Fixes the issue where obtaining font properties of text box fields threw an "ArgumentOutOfRangeException".
Bug Fix SPIREPDF-7888 Optimizes timestamp requests by reducing calls to timestamp servers and improving validation.
Friday, 30 January 2026 08:44

Spire.Office for Java 11.1.0 is released

We are pleased to announce the release of Spire.Office for Java 11.1.0. In this version, Spire.Doc for Java supports applying custom styles to tables; Spire.PDF for Java supports saving PDF comparison results to file streams; Spire.XLS for Java supports inserting, retrieving, and updating equations; Spire.Presentation for Java supports reading customer data from shapes. This version also addresses a number of known issues and minor fixes across other components. Details are provided below.

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

Below is a summary of the changes included in this release.

Spire.Doc for Java

Category ID Description
Optimization - Deprecated the Document.getListStyles() property, replaced it with Document.getListReferences().
Optimization - Removed the public constructors of ListStyle. Added StyleCollection.add(ListType listType, string name) to create a ListStyle.
ListStyle listStyle = document.getStyles().add(ListType.Numbered, "levelstyle");
listStyle.isCustomStyle(true);
ListLevelCollection levels = listStyle.getListRef().getLevels();
levels.get(0).setPatternType(ListPatternType.Arabic);
levels.get(0).setStartAt(1);
levels.get(0).getCharacterFormat().setFontName("Trebuchet MS");
Optimization - Updated the method for applying a ListStyle to a paragraph.
paragraph.getListFormat().applyStyle(ListStyle listStyle);
paragraph.getListFormat().setListLevelNumber(int leverNumber)

or

paragraph.getListFormat().applyListRef(ListDefinitionReference list, int leverNumber);
Optimization - Removed the ListFormat.getCurrentListStyle() method, replaced it with ListFormat.getCurrentListRef().
New feature - Added the add(ListTemplate template) method to ListCollection to create multi-level lists from built-in templates.
Document document = new Document();
Section sec = document.addSection();
Paragraph paragraph = sec.addParagraph();

// Create default bullet list template
ListTemplate template = ListTemplate.Bullet_Default;
ListDefinitionReference listRef = document.getListReferences().add(template);

// Create default numbered list template
ListTemplate template1 = ListTemplate.Number_Default;
listRef = document.getListReferences().add(template1);
listRef.getLevels().get(2).setStartAt(4);// Set the third level to start at number 4

// Add paragraph and apply numbered list style (level 2)
paragraph = sec.addParagraph();
paragraph.appendText("List Item 1");
// Apply level 2 (index starts at 0; 1 means the second level)
paragraph.getListFormat().applyListRef(listRef, 1);

paragraph = sec.addParagraph();
paragraph.appendText("List Item 2");
// Apply level 3
paragraph.getListFormat().applyListRef(listRef, 2);

paragraph = sec.addParagraph();
paragraph.appendText("List Item 3");
// Apply level 2
paragraph.getListFormat().applyListRef(listRef, 1);

paragraph = sec.addParagraph();
paragraph.appendText("List Item 4");
// Apply level 3
paragraph.getListFormat().applyListRef(listRef, 2);

document.saveToFile(outputFile, FileFormat.Docx);
document.close();
New feature - Added the addSingleLevelList(ListTemplate listTemplate) method to ListCollection for quickly creating single-level lists.
Document document = new Document();
Section sec = document.addSection();
Paragraph paragraph = sec.addParagraph();
// Create Arabic numeral numbered list template (e.g., "1.", "2.", ...)
ListTemplate template = ListTemplate.Number_Arabic_Dot;
// Use addSingleLevelList to create a single-level list reference
ListDefinitionReference listRef = document.getListReferences().addSingleLevelList(template);
int levelcount = listRef.getLevels().getCount();//Check level count
boolean res=listRef.isMultiLevel();
// Add first list item
paragraph = sec.addParagraph();
paragraph.appendText("List Item 1");
paragraph.getListFormat().applyListRef(listRef, 0);
paragraph = sec.addParagraph();
paragraph.appendText("List Item 2");
paragraph.getListFormat().applyListRef(listRef, 0);

document.saveToFile(outputFile, FileFormat.Docx);
document.close();
New feature - Added the ListLevel.equals(ListLevel level) method to compare whether two ListLevel objects are equal.
New feature - Added methods for creating, retrieving, and deleting picture bullets.
Document document = new Document();
Section sec = document.addSection();
Paragraph paragraph = sec.addParagraph();
// Create custom bulleted list style
ListStyle listStyle = document.getStyles().add(ListType.Bulleted, "bulletList");
// Get level configurations of this list style
ListLevelCollection Levels = listStyle.getListRef().getLevels();
// Set picture bullet for level 1
Levels.get(0).createPictureBullet();
Levels.get(0).getPictureBullet().loadImage(imag_Path_1);
// Set picture bullet for level 2
Levels.get(1).createPictureBullet();
Levels.get(1).getPictureBullet().loadImage(imag_Path_2);
// Add first list item
paragraph = sec.addParagraph();
paragraph.appendText("List Item 1");
paragraph.getListFormat().applyStyle(listStyle);
// Add second list item
paragraph = sec.addParagraph();
paragraph.appendText("List Item 1.1");
paragraph.getListFormat().applyStyle(listStyle);
paragraph.getListFormat().setListLevelNumber(1);
// Delete picture bullet for level 1
Levels.get(0).deletePictureBullet();
document.saveToFile(outputFile, FileFormat.Docx);
document.close();
New feature SPIREDOC-11582 Added the removeSelf() method to support removing a style.
document.getStyles().get("style1").removeSelf();
New feature SPIREDOC-11583 Supports applying custom styles to tables.
Document doc = new Document();
Section section = doc.addSection();
TableStyle tableStyle = (TableStyle) doc.getStyles().add(StyleType.Table_Style, "TestTableStyle1");
tableStyle.setHorizontalAlignment(RowAlignment.Center);
tableStyle.getBorders().setColor(Color.BLUE);
tableStyle.getBorders().setBorderType(BorderStyle.Single);
Table table = section.addTable();
table.resetCells(1, 1);
table.getRows().get(0).getCells().get(0).addParagraph().appendText("Aligned to the center of the page");
table.setPreferredWidth(PreferredWidth.fromPoints(300));
table.applyStyle(tableStyle);
// table.getFormat().setStyle(tableStyle);
doc.saveToFile(outputDocxFile, FileFormat.Docx);
New feature SPIREDOC-11748 Supports cloning styles from a template document.
doc.copyStylesFromTemplate(inputFile_2);  // Accepts file path as String
doc.copyStylesFromTemplate(doc2);         // Accepts another Document object
Bug Fix SPIREDOC-10843 Fixed an issue where the application hung when processing a structured document.
Bug Fix SPIREDOC-11439 Fixed an issue where the comparison of the table of contents failed.
Bug Fix SPIREDOC-11532 Fixed an issue where the application hung when converting Word to PDF.
Bug Fix SPIREDOC-11605 SPIREDOC-11712 Fixed an issue where the table layout was incorrect when converting Word to PDF.
Bug Fix SPIREDOC-11629 Fixed an issue where text positioning was incorrect when converting Word to PDF.
Bug Fix SPIREDOC-11699 Fixed an issue where text line wrapping was incorrect when converting Word to PDF while following WPS rules.
Bug Fix SPIREDOC-11709 Fixed an issue where the application hung when converting MHT to PDF.
Bug Fix SPIREDOC-11741 Fixed an issue that Avira Free Security Suite falsely detected a virus in spire.doc.jar.
Bug Fix SPIREDOC-10278 Fixes the issue where paragraph indentation was incorrect when converting Word to PDF.
Bug Fix SPIREDOC-11142 Fixes the issue where image layout inside tables was rendered incorrectly during Word-to-PDF conversion.
Bug Fix SPIREDOC-11688 Fixes the issue where Word-to-PDF conversion did not correctly apply formatting rules specific to WPS Office.
Bug Fix SPIREDOC-11714 Fixes a NullPointerException that occurred when converting Word to Markdown.
Bug Fix SPIREDOC-11718 Fixes a NullPointerException that occurred during Word-to-PDF conversion.
Bug Fix SPIREDOC-11734 Fixes the issue where the application would hang when updating TOC (Table of Contents) fields.
Bug Fix SPIREDOC-11735 Fixes the issue where page number fields failed to update correctly.
Bug Fix SPIREDOC-11757 Fixes an IllegalStateException ("Unexpected ST_TrueFalse value") during Word-to-PDF conversion.

Spire.XLS for Java

Category ID Description
New feature SPIREXLS-5237 Added support for inserting, retrieving, and updating equations.
// Insert an equation
sheet.getEquations().addEquation(11, 0, 100, 100, "x_{1}^{2}");

// Retrieve an equation
String mathML = sheet.getEquations().get(0).exportMathML();
String latex = sheet.getEquations().get(0).exportLaTeX();

// Update an equation
IXlsEquation equation1 = sheet.getEquations().get(0);
equation1.updateByLaTeXText("\\begin{pmatrix} \r\n  1 & 0 \\\\ \r\n  0 & 1 \r\n \\end{pmatrix} \r\n \\left(x-1\\right)\\left(x+3\\right)");
New feature SPIREXLS-6047 Added support for the F.INV function.
worksheet.getCellRange("A2").setFormula("=F.INV(0.99, 100, 200)");
New feature SPIREXLS-6048 Added support for the T.INV.2T function.
worksheet.getCellRange("A2").setFormula("=T.INV.2T(0.05, 10)");
Bug Fix SPIREXLS-6045 Fixed an issue where an “ArrayIndexOutOfBoundsException” was thrown when converting HTML to Excel.
Bug Fix SPIREXLS-6053 Fixed an issue where formula calculation took an excessively long time.
Bug Fix SPIREXLS-6056 Fixed an issue where formulas displayed an unexpected blue background when converting XLSX to XLS.
Bug Fix SPIREXLS-6058 Fixed an issue where extra borders appeared in the output when converting Excel to PDF.
Bug Fix SPIREXLS-6062 Fixed an issue where a “NullPointerException” occurred when saving XLS files to XLSX format.
Bug Fix SPIREXLS-6064 Fixed an issue where copying cell content containing embedded images to another Excel workbook failed.
Bug Fix SPIREXLS-6066 Fixed an issue where a “NullPointerException” was thrown during Excel-to-PDF conversion.
Bug Fix SPIREXLS-6067 Fixed an issue where local image files could not be deleted after inserting pictures into Excel due to unreleased file handles.

Spire.PDF for Java

Category ID Description
New feature SPIREPDF-7880 Added support for saving PDF comparison results to file streams.
// Create a new PdfDocument object 'pdf1' to work with the first PDF file
        PdfDocument pdf1 = new PdfDocument();

        // Load the first PDF file from the specified path
        pdf1.loadFromFile("ComparePdfDocument_1.pdf");

        // Create a new PdfDocument object 'pdf2' to work with the second PDF file
        PdfDocument pdf2 = new PdfDocument();

        // Load the second PDF file from the specified path
        pdf2.loadFromFile("ComparePdfDocument_2.pdf");

        // Create a PdfComparer object 'compare' with 'pdf1' and 'pdf2' as parameters for comparison
        PdfComparer compare = new PdfComparer(pdf1, pdf2);

        // Set the page ranges to be compared using the options of the comparer
        compare.getOptions().setPageRanges(0, pdf1.getPages().getCount() - 1, 0, pdf2.getPages().getCount() - 1);

        String result = "output.pdf";
        File outFile = new File(result);

        // Create an output stream to write the document to the output file
        OutputStream outputStream = new FileOutputStream(outFile);

        // Compare the PDF documents and save 
        compare.compare(outputStream);

        // Dispose of system resources associated with 'pdf1'
        pdf1.dispose();

        // Dispose of system resources associated with 'pdf2'
        pdf2.dispose();
Bug Fix SPIREPDF-6373 Optimized performance when converting PDF documents to images.
Bug Fix SPIREPDF-6406 Fixed an OutOfMemoryError that occurred during OFD to PDF conversion.
Bug Fix SPIREPDF-7189 Improved the rendering quality of PDF to Word conversion results when opened in WPS.
Bug Fix SPIREPDF-7305 Fixed inconsistent background colors and partial font rendering issues when printing PDFs.
Bug Fix SPIREPDF-7407 Enhanced layout accuracy when converting PDFs to flowable Word documents.
Bug Fix SPIREPDF-7560 Resolved an error related to PdfTrueTypeFont in multi-threaded environments.
Bug Fix SPIREPDF-7666 Fixed incorrect content generation when using the "Yu Mincho" font.
Bug Fix SPIREPDF-7687 Fixed text misalignment issues in PDF to PDF/A-1A conversion.
Bug Fix SPIREPDF-7782 Fixed extra spaces appearing in extracted table content.
Bug Fix SPIREPDF-7820 Resolved missing formulas when converting PDF documents to images.
Bug Fix SPIREPDF-7869 Fixed overlapping text issues in PDF to HTML conversion.
Bug Fix SPIREPDF-7887 Resolved the "structure is not valid" error when loading PDF documents.
Bug Fix SPIREPDF-7890 Fixed an ArrayIndexOutOfBoundsException that occurred when saving PDFs after adding text watermarks.
Bug Fix SPIREPDF-7898 Fixed content inconsistency issues during SVG to PDF conversion.
Bug Fix SPIREPDF-7910 Resolved an error ("For input string: '36.8s'") during OFD to PDF conversion.
Bug Fix SPIREPDF-7911 Fixed incorrect content issues in OFD to PDF conversion.

Spire.Presentation for Java

Category ID Description
New feature - Added support for reading customer data from shapes.
Presentation ppt = new Presentation();
ppt.loadFromFile(inputFile);
List dataList = ppt.getSlides().get(0).getShapes().get(0).getCustomerDataList();
System.out.println(dataList.size());
for(int i = 0; i < dataList.size(); i++)
{
    String name = dataList.get(i).getName();
    String content = dataList.get(i).getXML();
}
New feature - Added support for setting audio fade-in and fade-out durations.
Presentation ppt = new Presentation();
ppt.loadFromFile(inputFile);
Rectangle2D.Double audioRect = new Rectangle2D.Double(220, 240, 80, 80);
IAudio audio=ppt.getSlides().get(0).getShapes().appendAudioMedia(inputFile_1, audioRect);
// Set the duration of the starting fade for 13s
audio.setFadeInDuration(13000f);
// Set the duration of the ending fade for 20s
audio.setFadeOutDuration(20000f);
ppt.saveToFile(outputFile, FileFormat.PPTX_2016);
ppt.dispose();
New feature - Added support for trimming audio playback range.
Presentation ppt = new Presentation();
ppt.loadFromFile(inputFile);
Rectangle2D.Double audioRect = new Rectangle2D.Double(220, 240, 80, 80);
IAudio audio=ppt.getSlides().get(0).getShapes().appendAudioMedia(inputFile_1, audioRect);
// Set the start trimming time 8 seconds
audio.setTrimFromStart(8000f);
// Set the end trimming time 13 seconds
audio.setTrimFromEnd(13000f);
ppt.saveToFile(outputFile, FileFormat.PPTX_2016);
ppt.dispose();
New feature - Added support for setting table transparency.
Presentation presentation = new Presentation();
presentation.loadFromFile("data/test.pptx");
Double[] widths = new Double[]{100d, 100d, 150d, 100d, 100d};
Double[] heights = new Double[]{15d, 15d, 15d, 15d, 15d, 15d, 15d, 15d, 15d, 15d, 15d, 15d, 15d};
// Add a table
ITable table = presentation.getSlides().get(0).getShapes().appendTable(
    (float) presentation.getSlideSize().getSize().getWidth() / 2 - 275, 90, widths, heights);
// Set overall table background transparency to 50% (0.0 = opaque, 1.0 = fully transparent)
table.getFill().setTransparency(0.5f);
// Customize the fill color of the cell at row 0, column 0 to blue
table.get(0, 0).getFillFormat().setFillType(FillFormatType.SOLID);
table.get(0, 0).getFillFormat().getSolidColor().setColor(Color.BLUE);
presentation.saveToFile("result.pptx", FileFormat.PPTX_2016);
New feature SPIREPPT-2349 SPIREPPT-2950 Added support for parsing WEBP format images during conversions.
Bug Fix SPIREPPT-3035 Fixed the issue where adding a LaTeX formula caused the application to throw a "NullPointerException".
Bug Fix SPIREPPT-3056 Fixed the issue where a false positive virus alert was triggered by Avira Security Suite for spire.presentation.jar.
Bug Fix SPIREPPT-3069 Fixed the issue where adding the "\dots" formula caused a "NullPointerException" error.
Bug Fix SPIREPPT-3071 Fixed the issue with inconsistent content when converting PPT to PDF.

We’re pleased to announce the release of Spire.OCR 2.2.2. This version adds support for recognizing Latin script text. In addition, recognition accuracy for Chinese text has been improved. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New feature SPIREOCR-127 Added support for recognizing Latin script text.
Bug SPIREOCR-28 Fixed poor recognition accuracy for Traditional Chinese text.
Bug SPIREOCR-125 Fixed incorrect recognition of certain Chinese characters.
Click the link to download Spire.OCR 2.2.2:
More information of Spire.OCR new release or hotfix:

We’re pleased to announce the release of Spire.Doc for C++ 14.1.4. This version synchronizes several features from the .NET version of Spire.Doc, focusing mainly on table and list-related functionalities. More details are as follows.

Here is a list of changes made in this release

Category ID Description
New feature - Added the add(ListTemplate template) method to ListCollection to create multi-level lists from built-in templates.
int firstColumn = doc->GetBookmarks()->FindByName(L"t_insert")->GetFirstColumn();
int lastColumn = doc->GetBookmarks()->FindByName(L"t_insert")->GetLastColumn();
New feature - Added SetStyle, SetStyleOptions, and SetStyleName properties to the TableFormat class for table style operations.
intrusive_ptr<TableStyle> tableStyle = Object::Dynamic_cast<TableStyle>(
    doc->GetStyles()->Add(StyleType::TableStyle, L"TestTableStyle1")
);
tableStyle->GetBorders()->SetColor(Color::GetBlue());
tableStyle->GetBorders()->SetBorderType(BorderStyle::Single);
tableStyle->SetHorizontalAlignment(RowAlignment::Center);

intrusive_ptr<Table> table = sec->AddTable();
table->ResetCells(1, 1);
table->GetRows()->GetItemInRowCollection(0)
    ->GetCells()->GetItemInCellCollection(0)
    ->AddParagraph()->AppendText(L"Aligned to the center of the page");
table->SetPreferredWidth(PreferredWidth::FromPoints(300));
table->ApplyStyle(tableStyle);

sec->AddParagraph()->AppendText(L"");
tableStyle = Object::Dynamic_cast<TableStyle>(
    doc->GetStyles()->Add(StyleType::TableStyle, L"TestTableStyle2")
);
tableStyle->SetLeftIndent(55);
tableStyle->GetBorders()->SetColor(Color::GetGreen());
tableStyle->GetBorders()->SetBorderType(BorderStyle::Single);

table = sec->AddTable();
table->ResetCells(1, 1);
table->GetRows()->GetItemInRowCollection(0)
    ->GetCells()->GetItemInCellCollection(0)
    ->AddParagraph()->AppendText(L"Aligned according to left indent");
table->SetPreferredWidth(PreferredWidth::FromPoints(300));
table->GetFormat()->SetStyle(tableStyle);


intrusive_ptr<TableStyle> tableStyle = Object::Dynamic_cast<TableStyle>(
    doc->GetStyles()->Add(StyleType::TableStyle, L"TestTableStyle1")
);

tableStyle->GetBorders()->SetColor(Color::GetBlack());
tableStyle->GetBorders()->SetBorderType(BorderStyle::Double);
tableStyle->SetRowStripe(3);
tableStyle->GetConditionalStyles()->GetItem(TableConditionalStyleType::OddRowStripe)
    ->GetShading()->SetBackgroundPatternColor(Color::GetLightBlue());
tableStyle->GetConditionalStyles()->GetItem(TableConditionalStyleType::EvenRowStripe)
    ->GetShading()->SetBackgroundPatternColor(Color::GetLightCyan());
tableStyle->SetColumnStripe(1);
tableStyle->GetConditionalStyles()->GetItem(TableConditionalStyleType::EvenColumnStripe)
    ->GetShading()->SetBackgroundPatternColor(Color::GetLightPink());

table->ApplyStyle(tableStyle);
table->GetFormat()->SetStyleOptions(TableStyleOptions::ColumnStripe);


tableStyle = Object::Dynamic_cast<TableStyle>(
    doc->GetStyles()->Add(StyleType::TableStyle, L"TestTableStyle3")
);
tableStyle->SetLeftIndent(55);
tableStyle->GetBorders()->SetColor(Color::GetGreen());
tableStyle->GetBorders()->SetBorderType(BorderStyle::Single);
tableStyle->SetHorizontalAlignment(RowAlignment::Right);

table = sec->AddTable();
table->ResetCells(1, 1);
table->GetRows()->GetItemInRowCollection(0)
    ->GetCells()->GetItemInCellCollection(0)
    ->AddParagraph()->AppendText(L"Aligned according to left indent");
table->SetPreferredWidth(PreferredWidth::FromPoints(300));
table->GetFormat()->SetStyleName(L"TestTableStyle3");
New feature - Added the RemoveSelf method to the Style class to remove a style.
document->GetStyles()->GetItem(L"Normal")->RemoveSelf();
New feature - Enhanced the Document class with page extraction (ExtractPages), first section access (FirstSection), and hyphenation dictionary registration/unregistration support (RegisterHyphenationDictionary, UnregisterHyphenationDictionary, IsHyphenationDictionaryRegistered).
New feature - Added the DocumentNavigator class, which provides a “virtual cursor”-based API for easily inserting text, paragraphs, lists, tables, images, checkboxes, OLE objects, and more into Word documents with style control.
intrusive_ptr<Document> doc = ConvertUtil::GetNewEngineDocument();
intrusive_ptr<DocumentNavigator> navigator = new DocumentNavigator(doc);
doc->LoadFromFile(inputFile.c_str());
navigator->MoveToDocumentStart();
navigator->Writeln(L"Test insert at DocumentStart");
navigator->Writeln(L"Test insert without move");
navigator->MoveToDocumentEnd();
navigator->Writeln(L"Test insert at DocumentEnd");

doc->SaveToFile(outputFile.c_str(), FileFormat::Docx);
doc->Close();
New feature - Added fine-grained formatting capabilities to core document elements including paragraphs, tables, cells, borders, and styles.
Class New Members Description
Paragraph GetText Gets the text content of a paragraph.
Table SetBorders,
ClearBorders
Sets table border style.
Clears all table border formatting.
CellFormat ClearFormatting Clears all cell formatting.
Borders ClearFormatting IsShadow Clears border formatting. Controls whether the border displays a shadow effect.
RowFormat ClearBackground Height Clears row background color. Sets row height.
StyleCollection Add (overload) Added an overloaded method for adding styles.
PreferredWidth FromPercent FromPoints Width data types.
CharacterFormat LocaleIdBi Supports bidirectional text locale settings.
Frame IsFrame Determines whether the object is a Frame.
OfficeMath ToLaTeXMathCode FromOMMLCode Converts a math object to LaTeX math code. Creates a math object from an OMML string.
New feature - Enhanced revision tracking, content controls, and document comparison features.
Class New Members Description
CompareOptions IgnoreTable, IgnoreHeadersAndFooters Allows ignoring table content or headers/footers during comparison.
DifferRevisions MoveToRevisions, MoveFromRevisions Gets “move-to” and “move-from” type revisions.
StructureDocumentTag* (including Cell/Inline/Row) RemoveSelfOnly Removes only the content control itself while preserving its contents.
New feature - Improved accessibility and export functionality.
Class New Members Description
ToPdfParameterList PdfImageCompression, DigitalSignatureInfo Configures image compression and digital signature info when saving to PDF.
Document MarkdownExportOptions, ListReferences Supports Markdown export options and list references.
New feature - Refactored the list system.
Class Members Description
ListFormat ApplyStyle, ApplyListRef Supports direct style application and list reference usage.
ListLevel Equals, CreatePictureBullet, DeletePictureBullet, PictureBullet Supports picture bullets and equality comparison.
ListStyle ListRef, BaseStyle Supports list references and base styles.
Document ListReferences Gets the collection of list references in the document.
New feature - Optimized and cleaned up APIs by removing redundant or poorly designed properties and methods to improve overall consistency, such as removing outdated export methods like OfficeMath.SaveToImage and SaveImageToStream.
Click the link below to download Spire.Doc for C++ 14.1.4:

We're pleased to announce the release of Spire.XLS for Java 16.1.3. This version supports inserting/ retrieving/ updating equations, and also supports the F.INV and T.INV.2T functions. Furthermore, several issues that occurred when processing and converting Excel files (e.g., HTML to Excel, Excel to PDF) have been successfully fixed. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New feature SPIREXLS-5237 Added support for inserting, retrieving, and updating equations.
// Insert an equation
sheet.getEquations().addEquation(11, 0, 100, 100, "x_{1}^{2}");

// Retrieve an equation
String mathML = sheet.getEquations().get(0).exportMathML();
String latex = sheet.getEquations().get(0).exportLaTeX();

// Update an equation
IXlsEquation equation1 = sheet.getEquations().get(0);
equation1.updateByLaTeXText("\\begin{pmatrix} \r\n  1 & 0 \\\\ \r\n  0 & 1 \r\n \\end{pmatrix} \r\n \\left(x-1\\right)\\left(x+3\\right)");
New feature SPIREXLS-6047 Added support for the F.INV function.
worksheet.getCellRange("A2").setFormula("=F.INV(0.99, 100, 200)");
New feature SPIREXLS-6048 Added support for the T.INV.2T function.
worksheet.getCellRange("A2").setFormula("=T.INV.2T(0.05, 10)");
Bug SPIREXLS-6045 Fixed an issue where an “ArrayIndexOutOfBoundsException” was thrown when converting HTML to Excel.
Bug SPIREXLS-6053 Fixed an issue where formula calculation took an excessively long time.
Bug SPIREXLS-6056 Fixed an issue where formulas displayed an unexpected blue background when converting XLSX to XLS.
Bug SPIREXLS-6058 Fixed an issue where extra borders appeared in the output when converting Excel to PDF.
Bug SPIREXLS-6062 Fixed an issue where a “NullPointerException” occurred when saving XLS files to XLSX format.
Bug SPIREXLS-6064 Fixed an issue where copying cell content containing embedded images to another Excel workbook failed.
Bug SPIREXLS-6066 Fixed an issue where a “NullPointerException” was thrown during Excel-to-PDF conversion.
Bug SPIREXLS-6067 Fixed an issue where local image files could not be deleted after inserting pictures into Excel due to unreleased file handles.
Click the link to download Spire.XLS for Java 16.1.3:
Page 2 of 15