We are excited to announce the release of Spire.Office for Python 11.5.0. This version introduces several powerful enhancements: Spire.Doc can now convert Word documents to Excel, Spire.PDF allows specifying text color when replacing content, Spire.XLS enables seamless conversion between Markdown and Excel, and Spire.OCR integrates with AI models to improve accuracy and enhance text recognition in images. In addition, all core components (except Spire.OCR) now offer universal support for macOS ARM.
Alongside these new features, numerous known issues related to converting, processing, and saving Word, Excel, PDF, and PowerPoint files have been resolved, delivering a more stable and reliable experience. More details are provided below.

Click the link to download Spire.Office for Python 11.5.0:

Here is a list of changes made in this release

Spire.Doc for Python

Category ID Description
Optimization - Chart namespace updated:
// Old import (deprecated):
from spire.doc.charts import ChartType

// New import (use this):
from spire.doc.charts.ChartType import ChartType
New Feature - The Bookmark class now includes FirstColumn and LastColumn properties to retrieve the starting and ending column indices of a bookmark within a table.
doc = Document()
doc.LoadFromFile(inputFile)
firstColumn = doc.Bookmarks["t_insert"].FirstColumn
lastColumn = doc.Bookmarks["t_insert"].LastColumn
New Feature - The TableFormat class now supports Style, StyleOptions, and StyleName properties for managing table styles.
doc = Document()
tableStyle = doc.Styles.Add(StyleType.TableStyle, "TestTableStyle3")
tableStyle.LeftIndent = 55
tableStyle.Borders.Color = Color.get_Green()
tableStyle.HorizontalAlignment = RowAlignment.Right
tableStyle.Borders.BorderType = BorderStyle.Single

section = doc.AddSection()
table = section.AddTable()
table.ResetCells(3, 3)
table.Rows[0].Cells[0].AddParagraph().AppendText("Aligned according to left indent")
table.PreferredWidth = PreferredWidth.FromPoints(300)
table.Format.StyleName = "TestTableStyle3"

style = doc.Styles.FindByName("TestTableStyle3")
if (style is not None) and isinstance(style, TableStyle):
tableStyle = style
tableStyle.Borders.Color = Color.get_Black()
tableStyle.Borders.BorderType = BorderStyle.Double
tableStyle.RowStripe = 3
    tableStyle.ConditionalStyles[TableConditionalStyleType.OddRowStripe].Shading.BackgroundPatternColor = Color.get_LightBlue()
           tableStyle.ConditionalStyles[TableConditionalStyleType.EvenRowStripe].Shading.BackgroundPatternColor = Color.get_LightCyan()
tableStyle.ColumnStripe = 1
            tableStyle.ConditionalStyles[TableConditionalStyleType.EvenColumnStripe].Shading.BackgroundPatternColor = Color.get_LightPink()
table.ApplyStyle(tableStyle)
table.Format.StyleOptions = table.Format.StyleOptions | TableStyleOptions.ColumnStripe

doc.SaveToFile(outputFile, FileFormat.Docx)
New Feature - The Style class now includes a RemoveSelf method to remove the style from the document.
style = doc.Styles.FindByName("TestTableStyle3")
style.RemoveSelf()
New Feature - Enhanced the Document class with features including page extraction (ExtractPages), first-section access (FirstSection), and support for hyphenation dictionary registration/unregistration (RegisterHyphenationDictionary, UnregisterHyphenationDictionary, IsHyphenationDictionaryRegistered).
New Feature SPIREDOC-10777 Added support for macOS on ARM architecture.
New Feature SPIREDOC-10770 Added support for converting MHTML to PDF.
document = Document()
document.LoadFromFile(“input.mhtml”)
document.SaveToFile(“output.pdf”, FileFormat.PDF)
document.Close()
New Feature SPIREDOC-11793 Added support for exporting Word mathematical formulas as standard MathML to ensure correct rendering in HTML.
HtmlExportOptions options = doc.HtmlExportOptions;
 options.OfficeMathOutputMode = HtmlOfficeMathOutputMode.MathML; 
New Feature SPIREDOC-11872 Added support for converting Word to Excel.
document = Document()
document.LoadFromFile(“input.docx”)
document.SaveToFile(“output.xlsx”, FileFormat.XLSX)
document.Close()
Bug Fix SPIREDOC-11668 Fixed an issue where enabling track changes and replacing text produced incorrect results.
Bug Fix SPIREDOC-11594 Fixed an issue where retrieving document properties in a Python v3.14 environment caused a “NotImplementedError” exception.
Bug Fix SPIREDOC-11602 Fixed an issue where setting CharacterFormat.FontSize on macOS caused a “RuntimeError: ffi_prep_cif_var failed” exception.
Bug Fix SPIREDOC-11701 Fixed an issue where the program threw an exception when adding a series to a chart.
Bug Fix SPIREDOC-11832 Fixed an issue where adding a digital signature failed when converting Word to PDF.

Spire.XLS for Python

Category ID Description
New feature SPIREXLS-5183 Added support for macOS on ARM architecture.
New Feature SPIREXLS-6094 Supports hiding the Pivot Table Field List.
workbook.HidePivotFieldList = true;
New Feature SPIREXLS-6097 Supports converting Excel to Markdown.
workbook = Workbook()
workbook.LoadFromFile(inputFile)
markdownOptions = MarkdownOptions()
markdownOptions.SavePicInRelativePath = False
markdownOptions.SaveHyperlinkAsRef = False
workbook.SaveToMarkdown(outputFile, markdownOptions)
workbook.Dispose()
New Feature SPIREXLS-6098 Supports converting Markdown to Excel.
workbook = Workbook()
workbook.LoadFromFile(inputFile)
wb.SaveToFile("out.xlsx", ExcelVersion.Version2010);
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.
Bug Fix SPIREXLS-5986 Fixed an issue where setting the Value2 property of a cell caused an exception.
Bug Fix SPIREXLS-6089 Fixed an issue where running the package on Python 3.14.2 threw a `NotImplementedError: There is currently no support for "str
Bug Fix SPIREXLS-6091 Fixed an issue where setting the ShowValuesRow property of a Pivot Table to False did not take effect.
Bug Fix SPIREXLS-6116 Fixed an issue where specifying a large data source range when creating a Pivot Table caused an exception.
Bug Fix SPIREXLS-6095 Fixed the issue where wrapping text in a Pivot table cell didn’t work.
Bug Fix SPIREXLS-6127 Corrected the enumeration class name from SortComparsionType to SortComparisonType.

Spire.Presentation for Python

Category ID Description
New feature SPIREPPT-3037 Added support for macOS on ARM architecture.
Bug Fix SPIREPPT-2859
SPIREPPT-3052
Fixed the issue where "ffi_prep_cif_var failed" error was thrown when using Python V12+ on macOS.
Bug Fix SPIREPPT-3028 Fixed the issue where incorrect SVG effects occurred when importing using AddFromSVGAsShapes.
Bug Fix SPIREPPT-3046
SPIREPPT-3053
Fixed the issue where inconsistent chart content was found when converting PPTX to PDF.
Bug Fix SPIREPPT-3054 Fixed the issue where charts were missing when converting PPTX to PDF.
Bug Fix SPIREPPT-3037 Fixed the issue of content loss when converting PPT to images.
Bug Fix SPIREPPT-3080 Fixed an issue where the program would hang when converting PowerPoint documents to images.

Spire.PDF for Python

Category ID Description
New feature SPIREPDF-7000 SPIREPDF-7698 Added support for customizing signature appearance via the PdfCustomAppearance class.
class MyPdfCustomAppearance(IPdfSignatureAppearance):
    def __init__(self):
        pass

    def Generate(self, g: PdfCanvas):
        x = 0.0
        y = 0.0
        fontSize = 10.0
        font = PdfTrueTypeFont("SimSun", fontSize, PdfFontStyle.Regular, True)
        lineHeight = fontSize
        image = PdfImage.FromFile(inputImage)
        g.DrawImage(image, x, y)
        x = float(image.Width)
        g.DrawString("Signer: Gary", font, PdfBrushes.get_Red(), PointF(x, y))
        y += lineHeight + 5
        g.DrawString("Phone: +86 12345678", font, PdfBrushes.get_Black(), PointF(x, y))
        y += lineHeight + 5
        g.DrawString("Address: Sichuan Province, China", font, PdfBrushes.get_Black(), PointF(x, y))

doc = PdfDocument()
doc.LoadFromFile(inputFile)
signatureMaker = PdfOrdinarySignatureMaker(doc, inputFile_pfx, "e-iceblue")
my_appearance = MyPdfCustomAppearance()
customAppearance = PdfCustomAppearance(my_appearance)
signatureMaker.MakeSignature("Signer", doc.Pages.get_Item(0), 90.0, 550.0, 270.0, 640.0, customAppearance)
doc.SaveToFile(outputFile)
New feature SPIREPDF-7053 Added support for retrieving font style information of extracted text.
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(inputFile);
// Define a rectangle
RectangleF rctg = new RectangleF(0, 0, 200, 300);
var page = doc.Pages[0];
PdfTextFinder finder = new PdfTextFinder(page);
finder.Options.Parameter = TextFindParameter.None;
finder.Options.Area = rctg;
// Find text within the rectangle
List<PdfTextFragment> findouts = finder.FindAllText();            
StringBuilder sb = new StringBuilder();
foreach (PdfTextFragment find in findouts)
{
    sb.AppendLine(find.Text);
    sb.AppendLine(find.TextStates[0].FontName);
    sb.AppendLine(find.TextStates[0].FontSize.ToString("F2"));
}
File.WriteAllText(outputFile, sb.ToString());
New Feature SPIREPDF-7558 Completed compatibility support for Mac M-series chips (ARM64 architecture)
New Feature SPIREPDF-7907 Added a color parameter overload to the ReplaceText interface.
textReplacer.ReplaceText("Text", "Replace", Color.get_Blue())
Bug Fix SPIREPDF-6659 Fixed an issue where text replacement produced incorrect results.
Bug Fix SPIREPDF-7483 Fixed an issue that the “ffi_prep_cif_var failed” error occurred when running certain Python features on macOS.
Bug Fix SPIREPDF-7819 SPIREPDF-7821 SPIREPDF-7822 Fixed an issue where content copied from a PDF/A-2B compliant document (converted from PDF) was incorrect.
Bug Fix SPIREPDF-7864 Fixed an issue where setting a color during text replacement did not take effect as expected.

Spire.Barcode for Python

Category ID Description
New feature - Added support for macOS on ARM architecture.

Spire.OCR for Python

Category ID Description
New Feature - Added support for integration of AI models into Spire.OCR. (Note: Users need to obtain an API Key from the AI platform on their own.)
def _run_ai_test(self):
    filename = "1.png"
    output_file = "scan.txt"
    file_path = r"F:\3.3.0AI\AI\ocr.xml"
    model = "AIModel"
    api_key = "ApiKey"
    api_url = "ApiUrl"
    self._update_ocr_config(file_path, model, api_key, api_url)
    self._scan_img(filename, output_file)


def _scan_img(self, filename, output_file):
    scanner = OcrScanner()
    configure_options = ConfigureOptions()
    configure_options.ModelPath = r"F:\3.3.0AI\AI"
    configure_options.Language = "Japanese"
    scanner.ConfigureDependencies(configure_options)
    scanner.Scan(filename)

    text = scanner.Text.ToString()
    with open(output_file, "w", encoding="utf-8") as f:
        f.write(text)


def _update_ocr_config(self, file_path, model, api_key, api_url):
    tree = ET.parse(file_path)
    root = tree.getroot()

    model_node = root.find('./configs/model')
    api_key_node = root.find('./configs/apiKey')
    api_url_node = root.find('./configs/apiUrl')

    if model_node is not None:
        model_node.text = model
    if api_key_node is not None:
        api_key_node.text = api_key
    if api_url_node is not None:
        api_url_node.text = api_url

    tree.write(file_path, encoding='utf-8', xml_declaration=True)
    print("XML updated successfully!")

We're pleased to announce the release of Spire.PDF for Java 12.5.1. This version adds support for progress callback when converting PDF. It also fixes several issues, including content inconsistency when converting SVG to PDF. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New Feature SPIREPDF-8044 Added support for progress callback when converting PDF documents.
class CustomProgressNotifier implements IProgressNotifier {
    StringBuilder str = new StringBuilder();
    private String outputFile;

    public CustomProgressNotifier(String outputFile) {
        this.outputFile = outputFile;
    }

    @Override
    public void notify(float progress) {
        str.append("==============Progress: ").append(progress).append("%==============\n");
        try {
            Files.writeString(Paths.get(outputFile), str.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

//using 
PdfDocument pdf=new PdfDocument();
pdf.loadFromFile("test.pdf");
pdf.registerProgressNotifier(new CustomProgressNotifier("Progress.txt"));
pdf.saveToFile("out.docx", FileFormat.DOCX);
pdf.dispose();
Bug Fix SPIREPDF-7642 Fixed issue with content inconsistency when converting SVG to PDF.
Bug Fix SPIREPDF-7683 Fixed issue with incorrect validation results of digital signatures.
Click the link below to download Spire.PDF for Java 12.5.1:

We're pleased to announce the release of Spire.XLS 16.5.6. This version enhances the conversion from Excel to EMF, and also fixes two issues that occurred when reading and calculating formulas. More details are shown below.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREXLS-6129 Fixed the issue where a "GDI+" exception was thrown when converting Excel files to EMF format.
Bug Fix SPIREXLS-6130 Fixed the issue where read formula values returned incorrect results.
Bug Fix SPIREXLS-6136 Fixed the issue where formula values were calculated incorrectly.
Click the link to download Spire.XLS 16.5.6:
More information of Spire.XLS new release or hotfix:

We're pleased to announce the release of Spire.Presentation 11.5.1. This version optimizes the conversion from PowerPoint to PDF. Meanwhile, some issues that occurred when loading PPT documents, converting shapes to SVG, and retrieving images have also been successfully fixed. More details are listed below.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREPPT-3105 Fixes the issue where loading PPT format documents threw an exception.
Bug Fix SPIREPPT-3106, SPIREPPT-3119, SPIREPPT-3121, SPIREPPT-3123 Fixes the issue where converting PowerPoint to PDF resulted in incorrect rendering.
Bug Fix SPIREPPT-3114 Fixes the issue where shapes became blank when converted to SVG.
Bug Fix SPIREPPT-3116 Fixes the issue where retrieving images from PowerPoint documents threw a "Parameter is not valid" exception.
Bug Fix SPIREPPT-3122 Fixes the issue where images were missing after converting PowerPoint to PDF.
Click the link below to download Spire.Presentation 11.5.1:

We’re pleased to announce the release of Spire.PDF 12.5.1. This version adds support for SHA-2 and SHA-256 hash algorithms in digital signatures. It also fixes several issues, including content loss when printing PDF documents. More details are listed below.

Here is a list of changes made in this release

Category ID Description
New Feature SPIREPDF-4878 Added support for SHA-2 and SHA-256 hash algorithms in digital signatures.
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(inputFile);

X509Certificate2 cert = new X509Certificate2(inputFile_pfx, "e-iceblue");
IPdfSignatureFormatter formatter = new PdfPKCS7Formatter(cert, false);
PdfMDPSignatureMaker pdfMDPSignatureMaker = new PdfMDPSignatureMaker(pdf, formatter);
PdfSignature signature = pdfMDPSignatureMaker.Signature;
signature.Name = "e-iceblue";
signature.ContactInfo = "028-81705109";
signature.Location = "chengdu";
signature.Reason = " this document";

PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);
appearance.NameLabel = "Signer: ";
appearance.ContactInfoLabel = "ContactInfo: ";
appearance.LocationLabel = "Loaction: ";
appearance.ReasonLabel = "Reason: ";
pdfMDPSignatureMaker.MakeSignature("signName", pdf.Pages[0], 100, 100, 250, 200, appearance);
foreach (HashAlgorithmType hashAlgorithmType in Enum.GetValues(typeof(HashAlgorithmType)))
{
    if (string.Equals(hashAlgorithmType.ToString(), "SM3", StringComparison.OrdinalIgnoreCase))
    {
        continue;
    }
    //default value of HashAlgorithm is SHA256
    formatter.Properties.HashAlgorithm = hashAlgorithmType;
    try
    {
        pdf.SaveToFile( "out.pdf", FileFormat.PDF);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"error:{ex.Message}");
    }
}
pdf.Dispose();
Bug Fix SPIREPDF-8016 Fixed an issue with content loss when printing PDF documents.
Bug Fix SPIREPDF-8017 Fixed an issue where an "ArgumentException" was thrown when converting PDF to images.
Bug Fix SPIREPDF-8026 Fixed an issue where "Object reference not set to an instance of an object" was thrown when merging PDF documents.
Bug Fix SPIREPDF-8031 Fixed an issue where the retrieved font was incorrect after filling PdfTextBoxField content with a specified font.
Bug Fix SPIREPDF-8042 Fixed an issue where an "IndexOutOfRangeException" was thrown when saving the result document while overwriting the source file.
Click the link below to download Spire.PDF 12.5.1:
More information of Spire.PDF new release or hotfix:

We’re pleased to announce the release of Spire.XLS for Python 16.5.0. This update focuses primarily on resolving an issue where text wrapping in Pivot table cells did not work. For details, please see the changes below.

Here is a list of changes made in this release

Category ID Description
Bug Fix SPIREXLS-6095 Fixed the issue where wrapping text in a Pivot table cell didn’t work.
Bug Fix SPIREXLS-6127 Corrected the enumeration class name from SortComparsionType to SortComparisonType.
Click the link below to download Spire.XLS for Python 16.5.0:
Thursday, 30 April 2026 10:29

Spire.Office.11.4.0 is released

We’re pleased to announce the release of Spire.Office 11.4.0. In this version, supports saving charts as templates and supports multidimensional document comparison via new CompareOptions. Spire.XLS enhances stability of PDF and SVG conversion. Spire.Presentation adds support for saving PPTX to video. Spire.PDF optimizes memory consumption during PDF merging and enhances the conversions from PDF to PDF/A and images. Moreover, a large number of known bugs has been fixed successfully in this version.

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

DLL Versions:

  • Spire.Doc.dll v14.4.9
  • Spire.Pdf.dll v12.4.5
  • Spire.XLS.dll v16.4.2
  • Spire.Presentation.dll v11.4.5
  • 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.13
  • Spire.PdfViewer.Forms.dll v8.2.13
  • Spire.Spreadsheet.dll v7.5.3
  • Spire.OfficeViewer.Forms.dll v8.8.1
Click the link to get the version Spire.Office 11.4.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
Adjustment - Renamed ToPdfParameterList.IsAtlast to ToPdfParameterList.IsAtLeast.
ToPdfParameterList.IsAtlast-->ToPdfParameterList.IsAtLeast
Adjustment - Renamed CompareOptions.IgnoreTable to CompareOptions.IgnoreTables for naming consistency.
New Feature SPIREDOC-10293 Supports saving charts as templates.
Document doc = new Document();
doc.LoadFromFile(inputFile);
int count = 1;
foreach (Section sec in doc.Sections)
{
    foreach (Spire.Doc.Documents.Paragraph paragraph in sec.Paragraphs)
    {
        foreach (DocumentObject obj in paragraph.ChildObjects)
        {
            if (obj is ShapeObject shape)
            {
                Chart chart = shape.Chart;
                if (chart == null)
                    continue;

                string fileName = Path.Combine(outputPath, $"{count}.crtx");
                chart.SaveAsTemplate(fileName);
                count++;
            }
        }
    }
}
New Feature SPIREDOC-11457 Adds the GeneratorName property to allow configuring the Producer metadata when converting to PDF.
string genName = "Testing For Set Producer";
 Document doc = new Document();
 doc.LoadFromFile(filename);
 ToPdfParameterList toPdf = new ToPdfParameterList();
 toPdf.GeneratorName = genName;
 doc.SaveToFile("result.pdf", toPdf);
New Feature SPIREDOC-10828 Adds XValues and YValues properties to retrieve data values for specified series in charts.
Document doc = new Document();
doc.LoadFromFile(inputFile);
StringBuilder sb = new StringBuilder();
int number = 1;

foreach (Section sec in doc.Sections)
{
    foreach (Paragraph paragraph in sec.Paragraphs)
    {
        for (int i = 0; i < paragraph.ChildObjects.Count; i++)
        {
            DocumentObject obj = paragraph.ChildObjects[i];
            if (obj is ShapeObject)
            {
                ShapeObject shape = obj as ShapeObject;
                Chart chart = shape.Chart;
                sb.Append("\r\n\r\nPage " + number + ":\r\n" + "Get all X-axis data: ");
                for (int x = 0; x < chart.XValues.Count; x++)
                {
                    ChartValue xVal = chart.XValues[x];
                    // Get all X-axis data values
                    sb.Append(xVal.StringValue + " "); 
                }
                // Get the first series
                ChartSeries series = chart.Series[0]; 
                sb.Append("\r\nGet Y-axis data: ");
                foreach (ChartValue yVal in series.YValues)
                {
                    // Get all Y-axis data values of the first series
                    sb.Append(yVal.Value + " ");  
                }
            }
        }
    }
    number++;
}
New Feature SPIREDOC-11457 Supports reading and setting chart data label positions.
Document doc = new Document();
foreach (ChartDataLabelPosition position in Enum.GetValues(typeof(ChartDataLabelPosition)))
{
    Section section = doc.AddSection();
    section.AddParagraph().AppendText(position.ToString());
    Spire.Doc.Documents.Paragraph newPara = section.AddParagraph();
    ShapeObject shape = newPara.AppendChart(ChartType.Pie, 500, 300);
    Chart chart = shape.Chart;
    chart.Series[0].HasDataLabels = true;
    chart.Series[0].DataLabels.ShowCategoryName = true;
    chart.Series[0].DataLabels.ShowValue = true;
    // Set position
    chart.Series[0].DataLabels.Position = position;

    ShapeObject shape2 = newPara.AppendChart(ChartType.Bubble, 500, 300);
    Chart chart2 = shape2.Chart;
    chart2.Series[0].HasDataLabels = true;
    chart2.Series[0].DataLabels.ShowCategoryName = true;
    chart2.Series[0].DataLabels.ShowValue = true;
    chart2.Series[0].DataLabels.Position = position;
}
doc.SaveToFile(outputFile, FileFormat.Docx);
doc.Dispose();
New Feature SPIREDOC-11910 Adds several new properties to CompareOptions to support multi-dimensional document comparison:
· CompareMoves: Specifies whether to ignore moved content.
· IgnoreCaseChanges: Specifies whether to ignore case changes.
· IgnoreFields: Specifies whether to ignore fields.
· IgnoreFootnotes: Specifies whether to ignore footnotes.
· IgnoreComments: Specifies whether to ignore comments.
· IgnoreTextboxes: Specifies whether to ignore text boxes.
 Document doc1 = new Document();
            doc1.LoadFromFile(inputFile_1);
            Document doc2 = new Document();
            doc2.LoadFromFile(inputFile_2);

            CompareOptions options = new CompareOptions();
            options.CompareMoves = false;
            options.IgnoreCaseChanges = false;
            options.IgnoreComments = true;
            options.IgnoreFields = true;
            options.IgnoreFootnotes = true;
            options.IgnoreTables = true;
            options.IgnoreTextboxes = true;
            doc1.Compare(doc2, "user", new DateTime(), options);

            doc1.SaveToFile(outputFile, FileFormat.Docx2013);
Bug Fix SPIREDOC-11586 Fixes the issue where tables were converted incorrectly when converting Markdown to Docx or PDF.
Bug Fix SPIREDOC-11854 Fixes the issue where merged cells in tables were split incorrectly.
Bug Fix SPIREDOC-11871 Fixes the issue where a System.InvalidCastException was thrown when merging Word documents.
Bug Fix SPIREDOC-11874 Fixes the issue where a System.NullReferenceException was thrown when loading HTML.

Spre.XLS

Category ID Description
Adjustment SPIREXLS-6127 Corrected the spelling of the SortComparsionType enum to SortComparisonType.
Bug Fix SPIREXLS-6095 Fixed an issue where the text wrapping style did not apply to pivot table cells.
Bug Fix SPIREXLS-6117 Fixed an issue where an ArgumentOutOfRangeException was thrown when loading Excel documents.
Bug Fix SPIREXLS-6126 Fixed an issue where formatting was incorrect when converting Excel to PDF or SVG.

Spire.Presentation

Category ID Description
New Feature SPIREPPT-3096 Added support for saving PPTX files to video formats (.mp4/.wmv).

Note: This feature requires specifying the path to ffmpeg.

Presentation ppt = new Presentation();
            ppt.LoadFromFile(inputFile);
            SaveToVideoOption saveOption = new SaveToVideoOption(ffmpegDir);
            ppt.SaveToVideoOption=saveOption;//Default: 5 seconds per slide.
            ppt.SaveToFile(outputFile_mp4, FileFormat.MP4);
            ppt.SaveToFile(outputFile_wmv, FileFormat.WMV);
            ppt.Dispose();
Bug Fix SPIREPPT-3092 Fixed an issue where data label formatting was incorrect when converting PowerPoint files to PDF.
Bug Fix SPIREPPT-3094 Fixed an issue where an InvalidOperationException was thrown when converting shapes to SVG.
Bug Fix SPIREPPT-3097 Fixed an issue where exported files had excessively large sizes when splitting PowerPoint presentations.
Bug Fix SPIREPPT-3098 Fixed an issue where shapes were clipped during PowerPoint to PDF conversion.
Bug Fix SPIREPPT-3099 Fixed an issue where some images were missing when converting slides to images.
Bug Fix SPIREPPT-3102 Fixed an issue where extra incorrect images appeared during PowerPoint to PDF conversion.

Spire.PDF

Category ID Description
Optimization SPIREPDF-7878 SPIREPDF-7958 Optimized memory consumption during PDF merging.
Bug Fix SPIREPDF-7850 Fixed an issue where removing image watermarks from PDFs failed.
Bug Fix SPIREPDF-7963 Fixed an issue where keywords were not correctly identified when using “TextFindParameter.WholeWord”.
Bug Fix SPIREPDF-7980 Fixed an issue where content stream markers did not correctly include attribute placeholders when an “ArtifactPropertyList” object was passed to the “BeginMarkedContent” method.
Bug Fix SPIREPDF-7164 Fixed the issue where the page content was distorted when copying a page via CreateTemplate().
Bug Fix SPIREPDF-7803 Fixed the issue where concurrent HTML to PDF conversions occasionally failed to generate documents.
Bug Fix SPIREPDF-7948 Fixed the issue where printing a PDF produced extra, unintended content.
Bug Fix SPIREPDF-7984 Fixed the issue where text box fields with the same name could not be associated.
Bug Fix SPIREPDF-7998 Fixed the issue where content went missing when converting PDF to images.
Bug Fix SPIREPDF-8003 Fixed the issue where the program threw an ArgumentOutOfRangeException when merging PDFs.
Bug Fix SPIREPDF-8004 Fixed the issue where the program threw an ArgumentOutOfRangeException when merging PDF documents without applying a license.
Bug Fix SPIREPDF-8010 Fixed the issue where the description in document properties was incorrect when converting PDF to PDF/A.
Bug Fix SPIREPDF-8014 Fixed the issue where the position and size information of videos in PDF files could not be retrieved.
Thursday, 30 April 2026 09:21

Spire.Office for Java 11.4.0 is released

We're pleased to announce the release of Spire.Office for Java 11.4.0. In this version, the Spire.Doc for Java supports saving charts as templates and retrieving data values from charts. Spire.PDF for Java optimizes memory consumption when merging PDFs. In addition, many known issues that occurred during the conversion and processing of Word/Excel/PDF/PowerPoint files have been successfully fixed. More details are listed below.

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

Here is a list of changes made in this release

Spire.Doc for Java

Category ID Description
New Feature SPIREDOC-10293 Supports saving charts as templates.
Document doc = new Document();
        doc.loadFromFile(inputFile);
        int count = 1;
        for (Section sec : (Iterable) doc.getSections()) {
            for (Paragraph paragraph : (Iterable) sec.getParagraphs()) {
                for (int i = 0; i < paragraph.getChildObjects().getCount(); i++) {
                    DocumentObject obj = paragraph.getChildObjects().get(i);
                    if (obj instanceof ShapeObject) {
                        ShapeObject shape = (ShapeObject) obj;
                        Chart chart = shape.getChart();
                        String fileName = outputFile + count + ".crtx";
                        chart.saveAsTemplate(fileName);
                        count++;
                    }
                }
            }
        }
New Feature SPIREDOC-10828 Adds the XValues property to retrieve data XValues on the chart's X-axis, and the YValues property to retrieve data values on the Y-axis for a specified series.
Document doc = new Document();
doc.loadFromFile(inputFile);
StringBuilder sb = new StringBuilder();
int pageNumber = 1;
for (Section sec : (Iterable) doc.getSections()) {
    for (Paragraph paragraph : (Iterable) sec.getParagraphs()) {
        for (int i = 0; i < paragraph.getChildObjects().getCount(); i++) {
            DocumentObject obj = paragraph.getChildObjects().get(i);
            if (obj instanceof ShapeObject) {
                ShapeObject shape = (ShapeObject) obj;
                Chart chart = shape.getChart();
                sb.append("\r\n\r\nPage " + pageNumber + ":\r\n" + "All X-axis data: ");
                for(int x = 0; x < chart.getXValues().getCount(); x++){
                    // Print all X-axis data values
                    ChartValue xVal = chart.getXValues().get(x);
                    sb.append(xVal.getStringValue() + " ");
                }
                ChartSeries series = chart.getSeries().get(0);
                sb.append("\r\nY-axis data: ");
                // Print all Y-axis data values of the first series
                for(ChartValue yVal : (Iterable<ChartValue>)series.getYValues()){
                    sb.append(yVal.getValue() + " ");
                }
            }
        }
    }
    pageNumber++;
}
New Feature SPIREDOC-11457 Supports getting and setting the position of chart data labels.
Document doc = new Document();
for (ChartDataLabelPosition position : ChartDataLabelPosition.values()) {
    Section section = doc.addSection();
    section.addParagraph().appendText(position.name());
    Paragraph newPara = section.addParagraph();
    ShapeObject shape = newPara.appendChart(ChartType.Pie, 500, 300);
    Chart chart = shape.getChart();
    chart.getSeries().get(0).hasDataLabels(true);
    chart.getSeries().get(0).getDataLabels().setShowCategoryName(true);
    chart.getSeries().get(0).getDataLabels().setShowValue(true);
    chart.getSeries().get(0).getDataLabels().setPosition(position);
    ShapeObject shape2 = newPara.appendChart(ChartType.Bubble, 500, 300);
    Chart chart2 = shape2.getChart();
    chart2.getSeries().get(0).hasDataLabels(true);
    chart2.getSeries().get(0).getDataLabels().setShowCategoryName(true);
    chart2.getSeries().get(0).getDataLabels().setShowValue(true);
    chart2.getSeries().get(0).getDataLabels().setPosition(position);
}
doc.saveToFile(outputFile, FileFormat.Docx);
Bug Fix SPIREDOC-11879 Fixed the issue where a "NoClassDefFoundError" exception was thrown when adding HTML via appendHTML.
Bug Fix SPIREDOC-11796 Fixes the issue where some image sizes were not automatically scaled when converting HTML to Word.
Bug Fix SPIREDOC-11885 Fixes the "NullPointerException" exception that occurred when converting Word to PDF.
Bug Fix SPIREDOC-11770 Fixes the "There are too many styles in the document" exception that occurred when converting Word to PDF.
Bug Fix SPIREDOC-11826 Fixes the issue where tables and images were lost when converting Markdown to Word.
Bug Fix SPIREDOC-11836 Fixes the issue where field updating failed when converting Word to PDF.
Bug Fix SPIREDOC-11868 Fixes the "NullPointerException" exception that occurred when populating control content.
Bug Fix SPIREDOC-11876 Fixes the "NullPointerException" exception that occurred when reading document data in a multi-threaded environment.

Spire.XLS for Java

Category ID Description
Bug Fix SPIREXLS-6123 Fixed the issue where extra pages were generated when converting Excel to PDF.

Spire.PDF for Java

Category ID Description
Optimization SPIREPDF-7657 Optimized memory consumption when merging PDF documents.
Bug Fix SPIREPDF-7843 Fixed an issue where replacing text incorrectly caused other text to be lost.
Bug Fix SPIREPDF-8008 Fixed an issue where content became misaligned after text replacement.
Bug Fix SPIREPDF-8019 Fixed an issue where converting PDF to OFD without a license threw a "Specified argument was out of the range of valid values." exception.

Spire.Presentation for Java

Category ID Description
Bug Fix SPIREPPT-3095 Fixed the issue where OLE object data was lost after adding OLE object to PowerPoint documents.

Spire.OCR for Java

Category ID Description
Bug Fix SPIREOCR-120 Fixed an issue where license recognition failed when the provided license path started with a "\" character.

We're pleased to announce the release of Spire.Doc for Java 14.4.9. This version supports saving charts as templates, and provides the XValues and YValues properties to retrieve data values from charts. Additionally, it supports getting and setting the position of chart data labels. Meanwhile, some issues that occurred when converting Word to PDF, HTML to Word, and Markdown to Word 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 SPIREDOC-10293 Supports saving charts as templates.
Document doc = new Document();
        doc.loadFromFile(inputFile);
        int count = 1;
        for (Section sec : (Iterable) doc.getSections()) {
            for (Paragraph paragraph : (Iterable) sec.getParagraphs()) {
                for (int i = 0; i < paragraph.getChildObjects().getCount(); i++) {
                    DocumentObject obj = paragraph.getChildObjects().get(i);
                    if (obj instanceof ShapeObject) {
                        ShapeObject shape = (ShapeObject) obj;
                        Chart chart = shape.getChart();
                        String fileName = outputFile + count + ".crtx";
                        chart.saveAsTemplate(fileName);
                        count++;
                    }
                }
            }
        }
New Feature SPIREDOC-10828 Adds the XValues property to retrieve data XValues on the chart's X-axis, and the YValues property to retrieve data values on the Y-axis for a specified series.
Document doc = new Document();
doc.loadFromFile(inputFile);
StringBuilder sb = new StringBuilder();
int pageNumber = 1;
for (Section sec : (Iterable) doc.getSections()) {
    for (Paragraph paragraph : (Iterable) sec.getParagraphs()) {
        for (int i = 0; i < paragraph.getChildObjects().getCount(); i++) {
            DocumentObject obj = paragraph.getChildObjects().get(i);
            if (obj instanceof ShapeObject) {
                ShapeObject shape = (ShapeObject) obj;
                Chart chart = shape.getChart();
                sb.append("\r\n\r\nPage " + pageNumber + ":\r\n" + "All X-axis data: ");
                for(int x = 0; x < chart.getXValues().getCount(); x++){
                    // Print all X-axis data values
                    ChartValue xVal = chart.getXValues().get(x);
                    sb.append(xVal.getStringValue() + " ");
                }
                ChartSeries series = chart.getSeries().get(0);
                sb.append("\r\nY-axis data: ");
                // Print all Y-axis data values of the first series
                for(ChartValue yVal : (Iterable<ChartValue>)series.getYValues()){
                    sb.append(yVal.getValue() + " ");
                }
            }
        }
    }
    pageNumber++;
}
New Feature SPIREDOC-11457 Supports getting and setting the position of chart data labels.
Document doc = new Document();
for (ChartDataLabelPosition position : ChartDataLabelPosition.values()) {
    Section section = doc.addSection();
    section.addParagraph().appendText(position.name());
    Paragraph newPara = section.addParagraph();
    ShapeObject shape = newPara.appendChart(ChartType.Pie, 500, 300);
    Chart chart = shape.getChart();
    chart.getSeries().get(0).hasDataLabels(true);
    chart.getSeries().get(0).getDataLabels().setShowCategoryName(true);
    chart.getSeries().get(0).getDataLabels().setShowValue(true);
    chart.getSeries().get(0).getDataLabels().setPosition(position);
    ShapeObject shape2 = newPara.appendChart(ChartType.Bubble, 500, 300);
    Chart chart2 = shape2.getChart();
    chart2.getSeries().get(0).hasDataLabels(true);
    chart2.getSeries().get(0).getDataLabels().setShowCategoryName(true);
    chart2.getSeries().get(0).getDataLabels().setShowValue(true);
    chart2.getSeries().get(0).getDataLabels().setPosition(position);
}
doc.saveToFile(outputFile, FileFormat.Docx);
Bug Fix SPIREDOC-11796 Fixes the issue where some image sizes were not automatically scaled when converting HTML to Word.
Bug Fix SPIREDOC-11885 Fixes the "NullPointerException" exception that occurred when converting Word to PDF.
Bug Fix SPIREDOC-11770 Fixes the "There are too many styles in the document" exception that occurred when converting Word to PDF.
Bug Fix SPIREDOC-11826 Fixes the issue where tables and images were lost when converting Markdown to Word.
Bug Fix SPIREDOC-11836 Fixes the issue where field updating failed when converting Word to PDF.
Bug Fix SPIREDOC-11868 Fixes the "NullPointerException" exception that occurred when populating control content.
Bug Fix SPIREDOC-11876 Fixes the "NullPointerException" exception that occurred when reading document data in a multi-threaded environment.
Click the link below to download Spire.Doc for Java 14.4.9:

We are pleased to announce the release of Spire.XLS 16.4.2. This version enhances the stability of PDF and SVG conversion, ensuring more consistent export results. Meanwhile, it also fixes a critical issue where the text wrapping style did not apply correctly in pivot table cells. Please refer to the details below for more information.

Here is a list of changes made in this release

Category ID Description
Adjustment SPIREXLS-6127 Corrected the spelling of the SortComparsionType enum to SortComparisonType.
Bug Fix SPIREXLS-6095 Fixed an issue where the text wrapping style did not apply to pivot table cells.
Bug Fix SPIREXLS-6117 Fixed an issue where an ArgumentOutOfRangeException was thrown when loading Excel documents.
Bug Fix SPIREXLS-6126 Fixed an issue where formatting was incorrect when converting Excel to PDF or SVG.
Click the link below to download Spire.XLS 16.4.2:
Page 10 of 29