Spire.Doc for C++ 14.9.11 Adds ARM64 and HarmonyOS Support with Major API Changes
We’re pleased to announce the release of Spire.Doc for C++ 14.9.11. This release is a major structural upgrade, expanding platform support from two to ten targets, introducing a public C API with 4,237 declared functions, and adding capabilities for charts, SmartArt, themes, VBA, digital signatures, and revision tracking.
Important: Version 14.9.11 is not a drop-in replacement for version 13.8.2. Existing projects require source-code modifications and a full rebuild. Replacing the library files alone is not sufficient.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | - | Added support for Windows ARM64, Linux ARM64, Linux musl, macOS ARM64, and HarmonyOS ARM64 and x86_64, expanding platform support to ten targets. |
| New Feature | - | Introduced a public C API with 4,237 declared functions in Spire.Doc.C.h. |
| New Feature | - | Added APIs and classes for charts, SmartArt, themes, VBA projects, digital signatures, revision tracking, document navigation, page operations, and rendering. |
| New Feature | - | Added XLSX export support and expanded Markdown export options, custom font management, document protection, and document-format APIs. |
| Adjustment | - | Reorganized C++ header files and namespaces. |
| Adjustment | - | Changed string handling across many APIs from wide-character strings to UTF-8 strings. |
| Adjustment | - | Redesigned list-style management and updated several commonly used methods and classes. |
| Adjustment | - | Changed library names and platform-specific library directories. |
| Adjustment | - | Updated the binary interface. Existing projects must be rebuilt with the new headers and libraries. |
1. Version Comparison: 13.8.2 vs. 14.9.11
| Item | Version 13.8.2 | Version 14.9.11 |
| Target platforms | 2 | 10 |
| Package size | 343.5 MB | 918.8 MB |
| Header files (.h) | 417 | 508 |
| Public C API | Not available | 4,237 declared functions |
| Exported class definitions | 271 | 336 |
| AOT library version | 13.8.2.17370 | 14.9.11.3420 |
| Demo source files (.cpp) | 311 | 330 |
The package size increased from 343.5 MB to 918.8 MB, alongside the expanded platform support and package reorganization.
2. Platform and Binary Changes
Version 14.9.11 introduces support for the following platform targets:
- Windows: win-x64, win-arm64
- Linux with glibc: linux-x64, linux-arm64
- Linux with musl: linux-musl-x64, linux-musl-arm64
- HarmonyOS: ohos-x86_64, ohos-arm64-v8a
- macOS: osx-x64, osx-arm64
The package layout and binary dependencies have also changed:
- The Windows library name has changed from Spire.Doc.Cpp.dll to SpireDocCpp.dll. The corresponding import library name has changed as well.
- Platform-specific libraries are now organized under directories such as lib/win-x64, lib/linux-arm64, and lib/ohos-arm64-v8a.
- HarfBuzz has been added alongside Skia, introducing an additional native dependency.
- The new package does not provide 32-bit targets.
Deployment Requirements
Before deploying the new version, review the following requirements:
- Linux glibc: The target environment must use glibc 2.29 or later.
- Linux musl and HarmonyOS: ICU and fontconfig dependencies must be deployed as required by the package documentation. Missing dependencies may cause failures when constructing a Document object or loading Skia.
- HarmonyOS: Use the ohos-clang toolchain provided by DevEco Studio, as specified in the package documentation.
- Text rendering: Ensure that the required native dependencies, including HarfBuzz, are available in the deployment environment.
For the exact compiler, linker, and runtime configuration, consult the README files included with the new package.
3. Header Files and Namespace Reorganization
The former Spire.Doc.o.h entry-point header has been removed. Version 14.9.11 introduces a new header structure under include/Spire/Doc/, organized into namespaces and functional areas corresponding more closely to the .NET API.
The new package also provides Spire.Doc.C.h, which contains the public C API.
Include Directories
The new package documentation specifies the following three include directories:
include
include/Spire/Doc
include/Spire/Doc/common/h
Existing projects must update their header includes and compiler configuration to match the new structure.
Namespace Changes
In version 13.8.2, most classes were located in Spire::Doc. In version 14.9.11, classes are distributed across additional namespaces, including:
- Spire::Doc::Documents
- Spire::Doc::Fields
- Spire::Doc::Formatting
- Spire::Doc::Collections
- Spire::Doc::Pages
- Spire::Doc::Fields::Shapes::Charts
- Spire::Doc::Reporting
- Spire::Doc::Interface
For example, Document, Section, and Table remain in Spire::Doc, while classes such as Paragraph, TextRange, and CharacterFormat belong to more specific namespaces.
As a result, existing code that relies only on using namespace Spire::Doc; may require additional namespace qualifications.
4. Breaking API Changes
Version 14.9.11 includes significant changes to the public C++ interface. The following examples illustrate some of the updates that may require source-code modifications.
4.1 String ABI: Wide Characters to UTF-8
Many APIs have changed from wide-character strings to UTF-8 strings.
Version 13.8.2:
typedef const wchar_t* LPCWSTR_S; intrusive_ptr<TextRange> AppendText(LPCWSTR_S text);
Version 14.9.11:
typedef const char* LPCWSTR_S; intrusive_ptr<TextRange> AppendText(const std::string& text);
Other affected APIs include:
- Document::LoadFromFile() and Document::SaveToFile(), which now use const std::string& for the relevant parameters.
- Style::GetName(), which now returns std::string by value.
- Other methods that previously accepted or returned wide-character strings.
When migrating existing code, replace wide-character literals such as L"example", std::wstring, and wchar_t* where necessary to match the new UTF-8 API. When using MSVC, configure source encoding with /utf-8 as required by the new headers.
4.2 ListStyle and Style Collection API Redesign
Version 13.8.2:
auto listStyle = new ListStyle(document, ListType::Numbered);
listStyle->SetName(L"MyStyle");
for (int i = 0; i < listStyle->GetLevels()->GetCount(); i++)
listStyle->GetLevels()->GetItem(i);
document->GetListStyles()->Add(listStyle);
Version 14.9.11:
auto listStyle = document->GetStyles()->Add(ListType::Numbered, "MyStyle");
for (int i = 0; i < listStyle->GetListRef()->GetLevels()->GetCount(); i++)
listStyle->GetListRef()->GetLevels()->GetItem(i);
document->GetStyles()->Add(listStyle);
The main changes include:
- The ListStyle constructor is now protected. Instances must be created through factory methods such as StyleCollection::Add(ListType, name).
- ListStyle::GetLevels() has been removed and replaced by GetListRef()->GetLevels().
- Document::GetListStyles() and AddListStyle() have been removed in favor of Document::GetStyles().
- StyleCollection now provides Add(ListType, name) and Add(StyleType, name) overloads.
- ListFormat now works with ListDefinitionReference, introducing methods such as ApplyListRef, GetCurrentListRef, and SetCurrentListRef.
4.3 Other Renamed or Removed APIs
Representative changes include:
- Document::CloneDocument() → Document::Clone()
- Table::GetTableFormat() → Table::GetFormat()
- Table::GetTableStyleName() → TableFormat::GetStyleName()
- TableCell::GetWidth(), SetWidth(), and SetCellWidthType() → GetCellWidth() and SetCellWidth(width, type)
- Paragraph::GetIsFrame() → Paragraph::GetFrame()->GetIsFrame()
- DigitalSignatures → DigitalSignatureCollection
- ISPicture → IPicture
- SpireString → String
- MathObject → OfficeMath
- TextEffect → TextEffectFormat
License configuration has also been reorganized under License::LicenseProvider. Check the new headers for the exact replacement methods and signatures.
In addition, some methods previously exposed by Document, including CreateObjectByTypeName, CreateParagraphItemByType, GetOriginalFileFormat, GetUseNewEngine, GetXHTMLValidateOption, OpenOnlineBin, and SaveToOnlineBin, are no longer available in the same form.
This list is representative rather than exhaustive. Review the new headers when migrating code that depends on less commonly used classes or methods.
4.4 Event Registration in the C++ Wrapper
Several event-registration methods previously available on the C++ Document class are no longer exposed by the version 14.9.11 C++ wrapper. These include methods related to page layout, field updates, bookmark layout, and evaluation information.
Some corresponding functions remain available through the new C API, including:
- Document_add_PageLayout
- Document_add_UpdateFields
- Document_add_BookmarkLayout
Applications that rely on these events should review their implementation and determine whether to use the C API or another suitable callback mechanism.
5. New APIs and Document-Processing Capabilities
Version 14.9.11 adds a broad range of APIs and classes across several document-processing areas.
5.1 Document Navigation, Search, and Page Operations
New methods include:
- Search:FindPattern, FindPatternInLine, Paragraph::FindAllString, and Paragraph::FindAllPattern.
- Page operations:ExtractPages, RemovePages, and RemoveBlankPages.
- Rendering and layout:SaveToImages, RenderToScale, RenderToSize, UpdatePageLayout, and UpdateTableLayout.
- Export:SaveToXLSX, GetMarkdownExportOptions, and SaveToFile(..., ExportOptions).
5.2 Charts, SmartArt, Themes, and VBA
The new version introduces classes for additional document content and structure, including:
- Charts: Chart, ChartAxis, ChartSeries, ChartDataLabel, ChartLegend, and ChartTitle.
- SmartArt: SmartArt, SmartArtNode, and related formatting and shape-property classes.
- Themes: Theme, ThemeColors, and ThemeFonts.
- VBA: VbaProject, VbaModule, and VbaReference.
These additions expand the API available for working with document elements and related configuration.
5.3 Digital Signatures, Revision Tracking, and Document Protection
New APIs cover digital signatures, revision tracking, document protection, and related operations. Examples include:
- Sign, HasDigitalSignature, and GetDigitalSignatures
- StartTrackRevisions, StopTrackRevisions, and GetRevisionInfos
- IsEncrypted, HasWriteProtection, SetWriteProtection, and Unprotect
The release also introduces revision-related classes such as RevisionInfo, RevisionsView, MoveRevision, and TextDiffMode.
5.4 Font Management and Formatting
Additional APIs support custom fonts, font fallback settings, hyphenation dictionaries, and formatting options. Examples include:
- SetCustomFonts, SetCustomFontsFolders, and SetGlobalCustomFonts
- SetDefaultSubstitutionFontName and LoadFontFallbackRuleSettings
- RegisterHyphenationDictionary and UnregisterHyphenationDictionary
- New formatting properties for character, paragraph, and table formats
5.5 Export Formats and Public C API
The FileFormat enumeration has been expanded with values including Dot, OOXML, Ott, Mhtml, HtmlFixed, PostScript, PCL, OFD, OnlineDoc, Wps, Wpt, XLSX, and Auto.
The new public C API is defined in include/Spire.Doc.C.h and contains 4,237 declared SPIRE_DOC_API functions. It provides a C-language interface alongside the C++ wrapper and the underlying AOT exports. The interface uses UTF-8 strings and object handles, as defined in the header.
6. Migration Checklist
Before upgrading an existing project from version 13.8.2 to 14.9.11, complete the following checks:
- Rebuild the entire application. Do not mix object files compiled against the old version with the new libraries. The package documentation warns that changes to interface and virtual-table layouts require a full rebuild.
- Update header paths. Remove dependencies on Spire.Doc.o.h and use the new headers under Spire/Doc/.
- Update include directories and namespaces. Configure the required include paths and add namespace qualifications where needed.
- Migrate string handling. Update wide-character strings to match the new UTF-8 API, and configure /utf-8 for MSVC where required.
- Update API calls. Review list-style management, table-width methods, cloning methods, formatting APIs, and license configuration.
- Review event handling. The C++ wrapper no longer exposes some event-registration methods; use the C API or another suitable approach where necessary.
- Update linker and runtime settings. Use the new Windows library name and platform-specific library directories, and deploy required native dependencies such as HarfBuzz, ICU, and fontconfig where applicable.
- Check the C++ language standard. The package migration notes specify C++11/14 and identify a potential byte definition conflict with C++17. Verify compatibility with the actual build environment.
- Rebuild and test representative workflows. Validate document loading, editing, rendering, and export before deploying to production.
Note on Packaged Demos
Some packaged demo sources may still reference the removed Spire.Doc.o.h header, the previous library path, or wide-character strings. Consequently, certain demos may require updates before they compile against version 14.9.11.
If a demo fails to compile, consult the new README and its examples for the updated include paths, string types, and linker settings.
Spire.Doc for Python 14.9.1 enhances the conversion from Word to PDF
We’re pleased to announce the release of Spire.Doc for Python 14.9.1. This version addresses issues related to Word-to-PDF conversion and improper page removal from Word files. More details are as follows.
Here is a list of changes made in this release
| Category | ID | Description |
| Bug Fix | - | Fixed the issue where extra pages were mistakenly deleted when removing pages from Word documents. |
| Bug Fix | - | Fixed the issue where some Symbol font characters went missing during Word-to-PDF conversion. |
Spire.PDF for Python 12.9.4 Adds Support for Multiple PDF Annotations and Code 128 Barcodes
We're pleased to announce the release of Spire.PDF for Python 12.9.4. This version adds support for multiple PDF annotation types, including Caret, Circle, Square, FileAttachment, Movie, Screen, RichMedia, and Widget annotations, and adds support for drawing Code 128 barcodes. It also fixes several issues related to PDF attachments, text replacement, text extraction, and text positioning. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | - | Added support for Caret annotations.
rect = RectangleF(100.0, 100.0, 10.0, 15.0) annotation = PdfCaretAnnotation(page, rect) annotation.Title = "CaretTest" annotation.Contents = "A caret annotation with default (None) symbol." annotation.Color = PdfRGBColor(0, 0, 255) annotation.Border.Width = 1 annotation.Intent = "ParaCaret" PdfAnnotationCollection.Create(page).Add(annotation) |
| New Feature | - | Added support for Circle annotations.
annotation = PdfCircleAnnotation(page, rect) annotation.Color = PdfRGBColor(128, 0, 128) annotation.InteriorColor = PdfRGBColor(255, 255, 200) annotation.Border.Width = 2 annotation.Border.Style = PdfBorderStyle.Solid annotation.Border.Effect = PdfBorderEffect.Cloudy annotation.Border.EffectIntensity = 2 PdfAnnotationCollection.Create(page).Add(annotation) |
| New Feature | - | Added support for Square annotations.
annotation = PdfSquareAnnotation(page, rect) annotation.Color = PdfRGBColor(128, 0, 128) annotation.InteriorColor = PdfRGBColor(255, 255, 200) annotation.Border.Width = 2 annotation.Border.Style = PdfBorderStyle.Dashed PdfAnnotationCollection.Create(page).Add(annotation) |
| New Feature | - | Added support for FileAttachment annotations.
fileSpecification = PdfFileSpecification("SalesReportChart.png", data)
annotation = PdfFileAttachmentAnnotation(page, bounds, fileSpecification)
annotation.Icon = PdfFileIcon.Graph
annotation.Color = PdfRGBColor(Color.get_Teal())
PdfAnnotationCollection.Create(page).Add(annotation)
|
| New Feature | - | Added support for Movie annotations.
annotation = PdfMovieAnnotation(page, rect, "sample.wmv") annotation.Title = "My Movie Player" annotation.Movie.Poster = False annotation.Movie.Aspect = SizeF(16.0, 9.0) PdfAnnotationCollection.Create(page).Add(annotation) |
| New Feature | - | Added support for Screen annotations.
annotation = PdfScreenAnnotation(page, rect) annotation.Title = "ScreenWithBorder" annotation.Border.Width = 3.0 annotation.Border.Style = PdfBorderStyle.Dashed PdfAnnotationCollection.Create(page).Add(annotation) |
| New Feature | - | Added support for RichMedia annotations.
annotation = PdfRichMediaAnnotation(page, rect, content) annotation.Content = PdfRichMediaContent() annotation.Color = PdfRGBColor(Color.get_Green()) PdfAnnotationCollection.Create(page).Add(annotation) |
| New Feature | - | Added support for Widget annotations.
doc.LoadFromFile("widget.pdf")
a = PdfAnnotationCollection.Create(page).get_Item(0)
a.Characteristics.BackgroundColor
a.Characteristics.BorderColor
a.Flatten()
|
| New Feature | SPIREPDF-7101 | Added support for drawing Code 128 barcodes through the PdfCode128ABarcode interface.
message = '0123456789' Code128 = PdfCode128ABarcode(message) Code128.BarcodeToTextGapHeight = 1.0 Code128.TextDisplayLocation = TextLocation.Bottom Code128.TextColor = PdfRGBColor(Color.get_Blue()) Code128.Draw(page, PointF(0.0, y)) |
| Bug Fix | SPIREPDF-7291 | Fixed an issue where attachments failed to open after being added to a PDF. |
| Bug Fix | SPIREPDF-7923 | Fixed an issue where text replacement failed. |
| Bug Fix | SPIREPDF-7939 | Fixed an issue where extra spaces appeared in extracted text. |
| Bug Fix | SPIREPDF-8119 | Fixed an issue where the position was incorrect after drawing text using the PdfTextWidget interface. |
Spire.PDF 12.9.18 supports creating PDFs by adding content in flowing layout mode
We're pleased to announce the release of Spire.PDF 12.9.18. This version supports creating PDFs by adding content in flowing layout mode and adjusts the method for creating annotation collections. Moreover, several issues that occurred when copying pages, creating form fields, and importing FDF 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 | SPIREPDF-1 | Added support for creating PDFs by adding content in flowing layout mode. (Note: Creation only; loading or modifying existing documents is not supported.)
// Create a pdf document
PdfDocument pdf = new PdfDocument();
// Create a content builder
PdfContentBuilder builder = new PdfContentBuilder(pdf);
// Add the first section
var s1 = builder.AddSection();
s1.AddHeading1("Section One");
s1.AddParagraph("First flowing paragraph.");
// Add the second section
var s2 = builder.AddSection();
s2.AddHeading1("Section Two");
s2.AddParagraph("Second flowing paragraph.");
// Add the third section (paragraph only)
var s3 = builder.AddSection();
s3.AddParagraph("Third section, only a paragraph.");
// Add the fourth section with headings and navigation entries
var s4 = builder.AddSection();
var h1 = s4.AddHeading(1, "Alpha Chapter");
var h2 = s4.AddHeading(2, "Beta Section");
var h3 = s4.AddHeading(3, "Gamma Subsection");
h1.AsNavigationEntry("Alpha Chapter", 1);
h2.AsNavigationEntry("Beta Section", 2);
h3.AsNavigationEntry("Gamma Subsection", 3);
s4.AddParagraph("Body copy under the headings.");
// Build the document
var result = builder.Build();
// Save the document
String outputFile = "Bug_1_MultipleSections.pdf";
pdf.SaveToFile(outputFile);
pdf.Close();
|
| New Feature | - | Adjusted the method for creating annotation collections from PdfPageBase.AnnotationsV2 to PdfAnnotationCollect.Create (page).
PdfDocument doc = new PdfDocument(); PdfPageBase page = doc.Pages.Add(); RectangleF rect = new RectangleF(140, 689, 80, 1); PdfLineAnnotation lineAnnotation = new PdfLineAnnotation(page, rect, new PointF(140, 690), new PointF(220, 690)); lineAnnotation.Contents = "This is the first line annotation"; // New way PdfAnnotationCollection anmotationCollection = PdfAnnotationCollection.Create(page); anmotationCollection.Add(lineAnnotation); // Old way //page.AnnotationsV2.Add(lineAnnotation); |
| Bug Fix | SPIREPDF-7514 | Fixed the issue where form fields were lost when copying pages using InsertPage. |
| Bug Fix | SPIREPDF-8041 | Fixed the issue where the generated tag structure PDF document could not be fully validated by PDF/UA (ISO 14289-1). |
| Bug Fix | SPIREPDF-8068 | Fixed the failure when importing FDF and adjusted the annotation import API. It is recommended to use PdfAnnotationCollection.Create(document.Pages[0]).ImportFromFdf(). |
| Bug Fix | SPIREPDF-8151 | Fixed the issue where the coordinates and size of the obtained image were incorrect. |
| Bug Fix | SPIREPDF-8152 | Fixed the issue where the field name was duplicated when creating form fields. |
Spire.Doc for Java 14.9.5 supports automatically adjusting watermark font size based on text length
We're pleased to announce the release of Spire.Doc for Java 14.9.5. This version supports automatically adjusting the font size of the watermark according to the length of the watermark text. Meanwhile, some issues that occurred when converting Word to PDF, saving DOC as DOCX, and setting setMimicWPSLayout(true) 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-11738 | Adds support for automatically adjusting the font size of the watermark according to the length of the watermark text.
TextWatermark wm = new TextWatermark(document);
wm.setText("Watermark");
// Automatic font size
wm.setFontSize(0);
document.setWatermark(wm);
|
| Bug Fix | SPIREDOC-10474, SPIREDOC-10669, SPIREDOC-12009 | Fixes the issue of inconsistent line breaks when converting Word to PDF. |
| Bug Fix | SPIREDOC-11863 | Fixes the issue where the content format changed after loading a DOC document and saving it as DOCX. |
| Bug Fix | SPIREDOC-11925 | Fixes the issue of incorrect pagination when converting Word to PDF. |
| Bug Fix | SPIREDOC-12023 | Fixes the issue where images were incorrect after setting setMimicWPSLayout(true). |
| Bug Fix | SPIREDOC-12089 | Fixes the issue where page numbers were inconsistent in WPS mode when converting Word to PDF. |
Spire.XLS for Java 16.9.2 improves Excel to PDF conversion
We’re pleased to announce the release of Spire.XLS for Java 16.9.2. This version fixes an issue where cell values did not match the formatting in the original file, optimizes formula calculation time on hidden worksheets during Excel-to-PDF conversion, and fixes validation issues when converting Excel files to PDF/A-1a, PDF/A-2a, and PDF/A-3a. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| Bug Fix | SPIREXLS-6207 | Fixed an issue where the value read from a cell did not match the cell format in the original file |
| Optimization | SPIREXLS-6216 | Optimized formula calculation time on hidden worksheets when converting Excel to PDF. |
| Bug Fix | SPIREXLS-6218 | Fixed an issue where validation failed when converting Excel files to PDF/A-1a, PDF/A-2a, and PDF/A-3a. |
Spire.Doc 14.9.11 adds new classes to control document loading and exporting
We’re pleased to announce the release of Spire.Doc 14.9.11. This release introduces the ImportOptions and ExportOptions classes for granular control over document loading and export workflows, adds support for HSL color rendering in HTML-to-Word conversion, and resolves numerous known defects encountered during format conversion and general document manipulation. More details are given below.
Here is a list of changes made in this release
| Category | ID | Description |
| Adjustment | - | Revised the .NET Core packaging approach. Cross-platform compatibility is realized by adhering to the .NET Standard specification. Dependencies in readme.txt were updated for .NET 6.0, .NET 9.0 and .NET 10.0 as listed below; all other platforms remain unchanged:
net6.0 Has external reference to SkiaSharp >= 3.116.1 Microsoft.Win32.Registry >= 5.0.0 System.Buffers >= 4.5.1 System.Memory >= 4.5.5 System.Text.Encoding.CodePages >= 6.0.0 HarfBuzzSharp >=8.3.0.1 net9.0 Has external reference to SkiaSharp >= 3.116.1 Microsoft.Win32.Registry >= 5.0.0 System.Buffers >= 4.5.1 System.Memory >= 4.5.5 System.Text.Encoding.CodePages >= 9.0.0 HarfBuzzSharp >=8.3.0.1 net10.0 Has external reference to SkiaSharp >= 3.116.1 Microsoft.Win32.Registry >= 5.0.0 System.Buffers >= 4.5.1 System.Memory >= 4.5.5 System.Text.Encoding.CodePages >= 10.0.0 HarfBuzzSharp >=8.3.0.1 Original implementation using System.Drawing: Image img = document.SaveToImages(0, ImageType.Bitmap);
img.Save("sample.png", ImageFormat.Png);
SkiaSharp.SKImage images = document.SaveToImages(0, ImageType.Bitmap); FileStream fileStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write); images.Encode(SkiaSharp.SKEncodedImageFormat.Png, 100).SaveTo(fileStream); fileStream.Flush(); |
| New Feature | - | Provided the ImportOptions and ExportOptions option classes to control the behavior of document loading and exporting. 1. Load an encrypted document with a password using Spire.Doc;
using Spire.Doc.Importing;
var importOptions = new ImportOptions { Password = "123456" };
var doc = new Document();
doc.LoadFromFile("encrypted.docx", importOptions);
using Spire.Doc;
using Spire.Doc.Importing;
// Implement the asset loading callback
public class MyAssetLoader : IAssetLoadingCallback
{
public AssetLoadingAction AssetLoading(AssetLoadingArgs args)
{
// Block tracking images
if (args.Url.Contains("tracker"))
return AssetLoadingAction.Block;
// Provide custom image data with authentication
if (args.AssetType == AssetType.Image && args.Url.StartsWith("https://api."))
{
var data = LoadWithAuth(args.Url);
args.SetData(data);
return AssetLoadingAction.Custom;
}
// Redirect CDN addresses
if (args.Url.Contains("cdn.example.com"))
{
args.Url = args.Url.Replace("cdn.example.com", "local.mirror.com");
return AssetLoadingAction.Download;
}
// Default behavior: download from the original URL
return AssetLoadingAction.Download;
}
}
// Load a document using the callback
var doc = new Document();
var options = new ImportOptions
{
AssetLoadingCallback = new MyAssetLoader()
};
doc.LoadFromFile("document.html", options);
using Spire.Doc;
using Spire.Doc.Exporting;
var doc = new Document();
doc.LoadFromFile("input.docx");
// Use the default DOC format
//var options = new DocExportOptions();
// Use the default DOCX format
var options = new DocxExportOptions();
doc.SaveToFile("output.docx", options);
// Specify Word 2019 format
doc.SaveToFile("output.docx", new DocxExportOptions(FileFormat.Docx2019));
using Spire.Doc;
using Spire.Doc.Exporting;
// 1. Implement the progress callback interface
public class ProgressReporter : IExportingProgressCallback
{
public void OnProgress(ExportingProgressArgs args)
{
// EstimatedProgressPercentage ranges from 0 to 100
Console.WriteLine($"Progress: {args.EstimatedProgressPercentage:F1}%");
// Throw an exception here if you need to abort the saving process
}
}
// 2. Set the callback and export
var doc = new Document();
doc.LoadFromFile("large-document.docx");
var options = new DocxExportOptions(FileFormat.Docx)
{
ProgressCallback = new ProgressReporter()
};
doc.SaveToFile("output.docx", options);
|
| New Feature | SPIREDOC-10309 | Added support for setting "Don't add space between paragraphs of the same style".
Document doc = ConvertUtil.GetNewEngineDocument();
Section section = doc.AddSection();
ParagraphStyle heading1 = (ParagraphStyle)doc.Styles["Heading 1"];
Assert.IsFalse(heading1.ParagraphFormat.NoSpaceBetweenSameStyle);
heading1.ParagraphFormat.NoSpaceBetweenSameStyle = true;
Spire.Doc.Documents.Paragraph sameStyle1 = AddParagraph(section, SameStyleText1, BuiltinStyle.Heading1);
Spire.Doc.Documents.Paragraph sameStyle2 = AddParagraph(section, SameStyleText2, BuiltinStyle.Heading1);
Spire.Doc.Documents.Paragraph otherStyle = AddParagraph(section, OtherStyleText, BuiltinStyle.Heading2);
doc.SaveToFile(outputFile_temp, FileFormat.Docx);
|
| New Feature | SPIREDOC-10841 | Added support for HSL color settings in HTML.
Document doc = new Document();
Section sec = doc.AddSection();
Paragraph para = sec.AddParagraph();
para.AppendHTML("<p style=\"color:hsl(0,75%,60%)\">Hello</p>");
doc.SaveToFile("HtmlTest_hsl.docx");
|
| New Feature | SPIREDOC-11779 | Added support for removing the border of charts.
Document doc = new Document();
doc.LoadFromFile(@"input.docx");
foreach (Paragraph para in doc.Sections[0].Paragraphs)
{
foreach (DocumentObject obj in para.ChildObjects)
{
if (obj is ShapeObject shape && shape.Chart != null)
{
Chart chart = shape.Chart;
// Remove the border of the chart area
chart.Format.Stroke.Fill.FillType = FillType.NoFill;
}
}
}
doc.SaveToFile("NoBorder.docx", FileFormat.Docx);
|
| Bug Fix | SPIREDOC-9875 | Fixed the issue where the content format was messed up when converting Word to PDF. |
| Bug Fix | SPIREDOC-9888 | Fixed issue with incorrect table parsing when converting Word to PDF. |
| Bug Fix | SPIREDOC-9925 | Fixed the issue where the table style was incorrect when converting a document with merged table cells to PDF. |
| Bug Fix | SPIREDOC-9928 | Fixed the issue where the content format changed when converting Word to PDF. |
| Bug Fix | SPIREDOC-10138 | Fixed the issue with incorrect parsing of LaTeX formulas. |
| Bug Fix | SPIREDOC-10312 | Fixed the issue where the content layout changed when converting Word to PDF. |
| Bug Fix | SPIREDOC-10313 | Fixed the issue where an "IndexOutOfRangeException" was thrown when adding SVG to Word. |
| Bug Fix | SPIREDOC-10356 | Fixed the issue where underlines were lost after converting Word to HTML and then back to Word. |
| Bug Fix | SPIREDOC-10483 | Fixed the issue where an error was thrown when loading a document encrypted by WPS. |
| Bug Fix | SPIREDOC-10563 | Fixed the issue where the cross-reference superscript changed when converting Word to PDF. |
| Bug Fix | SPIREDOC-10611 | Fixed the issue where the WordArt effect was lost when copying the content of a Word document. |
| Bug Fix | SPIREDOC-10733 | Fixed the issue where hyperlinks were lost when saving directly to PDF after adding them. |
| Bug Fix | SPIREDOC-10746 | Fixed the issue where a "NullReferenceException" was thrown when saving to PDF after inserting a page break into a table. |
| Bug Fix | SPIREDOC-10774 | Fixed the issue where text was lost when converting to PDF after replacing content with an empty string. /td> |
| Bug Fix | SPIREDOC-11071 | Fixed the issue where the "{aligned}" was not recognized in formulas, causing line breaks to fail. |
| Bug Fix | SPIREDOC-11774 | Fixed the issue where emojis changed from color to black and white when converting Word to PDF. |
| Bug Fix | SPIREDOC-11286 | Fixed the issue where text was formatted in italics after converting formulas in a Word document to MathML. |
| Bug Fix | SPIREDOC-11834 | Fixed the issue where an "ArgumentException" was thrown when converting Word to PDF. |
| Bug Fix | SPIREDOC-12062 | Fixed the issue where the page number position set by the InsertPageNumbers method was incorrect. |
| Bug Fix | SPIREDOC-12066 | Fixed the issue where page numbers were displayed in red in WPS after saving the document. |
| Bug Fix | SPIREDOC-12070 | Fixed the issue where some characters could not be mapped when converting Word to PDF/A-1b. |
| Bug Fix | SPIREDOC-12071 | Fixed the issue where updating the table of contents field failed. |
| Bug Fix | SPIREDOC-12078 | Fixed the issue where an "Object reference not set to an instance of an object" error was thrown when loading a document with FixedLayoutDocument. |
Spire.Presentation 11.9.1 supports adding Office formulas
We're pleased to announce the release of Spire.Presentation 11.9.1. This version adds the Paragraphs.AppendOfficeMathML() method to support adding Office formulas and fixes an issue related to blurry text when converting PPT to PDF. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | SPIREPPT-3172 | Added the Paragraphs.AppendOfficeMathML() method to add Office formulas.
Presentation ppt = new Presentation(); IAutoShape autoShape = ppt.Slides[0].Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(100, 100, 300, 200)); string txtContent = File.ReadAllText(inputFile); autoShape.TextFrame.Paragraphs.AppendOfficeMathML(txtContent); ppt.SaveToFile(outputFile, FileFormat.Pptx2013); ppt.Dispose(); |
| Bug Fix | SPIREPPT-3191 | Fixed an issue where text became blurry and unclear when converting PPT to PDF. |
Spire.XLS 16.9.2 supports the TRANSPOSS formula
We're pleased to announce the release of Spire.XLS 16.9.2. This version supports the TRANSPOSS formula and also fixes several issues that occurred when converting Excel to PDF and exporting data. More details are shown below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | SPIREXLS-6200 | Added support for TRANSPOSS formula.
sheet.Range["F1:H4"].FormulaArray = "=TRANSPOSE(A2:D4)"; |
| Bug Fix | SPIREXLS-6204 | Fixed the issue where column widths were inconsistent when converting Excel to PDF. |
| Bug Fix | SPIREXLS-6206 | Fixed the issue where borders appeared thicker when converting Excel to PDF. |
| Bug Fix | SPIREXLS-6209 | Fixed the issue where incorrect data was exported when using ExportDataTable. |
Spire.Barcode 7.5.13 fixes the issue where barcode data reading was incorrect
We're pleased to announce the release of Spire.Barcode 7.5.13. This version successfully fixes the issue where barcode data reading was incorrect. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| Bug Fix | SPIREBARCODE-299 | Fixes the issue where barcode data reading was incorrect. |