Spire.Office for Java 11.6.0 is released
We are excited to announce the release of Spire.Office for Java 11.6.0. In this version, Spire.Doc for Java enhances the conversion from Word to PDF; Spire.XLS for Java enhances Excel to PDF and image conversion; Spire.PDF for Java supports setting PDF reading direction and language. Besides, many issues have been successfully fixed in this version. More details are listed below.
Here is a list of changes made in this release
Spire.Doc for Java
| Category | ID | Description |
| Bug Fix | SPIREDOC-11785 | Fixed an issue where symbols wrapped incorrectly when converting Word to PDF. |
| Bug Fix | SPIREDOC-11908 | Fixed an issue where cross-reference fields were updated incorrectly. |
| Bug Fix | SPIREDOC-11920 | Fixed an issue where text positions were incorrect when converting Word to PDF. |
| Bug Fix | SPIREDOC-11947 | Fixed an issue where bullet styles were incorrect when converting Word to PDF. |
Spire.XLS for Java
| Category | ID | Description |
| Bug Fix | SPIREXLS-6137 | Fixed the issue of incorrect pagination when converting Excel to PDF. |
| Bug Fix | SPIREXLS-6147 | Fixed the issue of the application hanging when converting a worksheet to an image. |
| Bug Fix | SPIREXLS-6156 | Fixed the issue of content being cropped when converting Excel to images. |
Spire.PDF for Java
| Category | ID | Description |
| New Feature | SPIREPDF-7829 | Added support for signing with SHA-256/SHA-512 algorithm certificates.
public static void main(String[] args) throws IOException {
// Create pdf document
PdfDocument doc = new PdfDocument();
// Load file from disk
doc.loadFromFile("Sample.docx");
// Load the X509 certificate for signature
PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(new PdfCertificate("gary.pfx", "e-iceblue"), false);
// Create an instance of PdfOrdinarySignatureMaker using the loaded document and certificate
PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(doc, formatter);
// Create an instance of PdfCustomSignatureAppearance as the appearance for the signature
IPdfSignatureAppearance signatureAppearance = new PdfCustomSignatureAppearance();
// Make the signature with a specified name and the custom appearance
signatureMaker.makeSignature("Signature", signatureAppearance);
// Iterate through all hash algorithm types
for (HashAlgorithmType hashAlg : HashAlgorithmType.values()) {
// Skip SM3 (case-insensitive)
if ("SM3".equalsIgnoreCase(hashAlg.name())) {
continue;
}
try {
// Set the current hash algorithm
formatter.getProperties().setHashAlgorithm(hashAlg);
String filePath = "AddImageSignature_" + hashAlg.name() + ".pdf";
doc.saveToFile(filePath, FileFormat.PDF);
System.out.println("Succeed:" + hashAlg.name());
} catch (Exception ex) {
System.out.println("Error HashAlgorithmType:" + hashAlg.name());
System.out.println("Error Info:" + ex.getMessage());
}
}
// Close the document
doc.close();
}
// Custom signature appearance implementation
public static class PdfCustomSignatureAppearance implements IPdfSignatureAppearance {
@Override
public void generate(PdfCanvas pdfCanvas) {
// Set font size
int fontSize = 10;
// Create Arial font
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.PLAIN, fontSize), true);
// Set line height
float lineHeight = fontSize;
// Draw text string
pdfCanvas.drawString("AAAAAAAAAAA", font, PdfBrushes.getRed(), new Point.Float(0, 0));
// Draw image at specified position
pdfCanvas.drawImage(PdfImage.fromFile("E-iceblue logo.png"), new Point.Float(20, 0));
}
}
|
| New Feature | SPIREPDF-8077 | Added support for setting a fallback font when converting OFD to PDF.
OfdConverter converter = new OfdConverter(ofdFile.getAbsolutePath()); converter.getOptions().setDefaultFontName(fontName); converter.toPdf(PdfPath); |
| New Feature | SPIREPDF-8078 | Added a progress callback for OFD to PDF conversion.
CustomProgressNotifier progressNotifier =new CustomProgressNotifier(output_txt);
ofdConverter ofdconverter=new Ofdconverter(inputPath);
ofdconverter.registerProgressNotifier(progressNotifier);
ofdConverter.toPdf(outputPath);
CustomProgressNotifier progressNotifier2=new CustomProgressNotifier(output_txt2);
PdfToWordConverter converter=new PdfTowordConverter(inputPath2);
converter.registerProgressNotifier(progressNotifier2);
converter.saveToDocx(outputPath2)
|
| New Feature | SPIREPDF-7990 | Added support for setting PDF reading direction and language.
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile(inputFile);
pdf.getViewerPreferences().setReadingDirection(PdfReadingDirection.LeftToRight);
pdf.setLanguage("zh-CN");
pdf.saveToFile(outputFile , FileFormat.PDF);
|
| New Feature | SPIREPDF-8091 | Added an overload of IPdfSignatureFormatter to PdfMDPSignatureMaker, providing more flexible formatting support for PDF signature operations.
PdfDocument document = new PdfDocument();
PdfPageBase pdfPageBase = document.getPages().add();
pdfPageBase.getCanvas().drawString("Hello, World!",
new PdfFont(PdfFontFamily.Helvetica, 30f),
PdfBrushes.getBlack(), 10, 10);
PdfCertificate certificate = new PdfCertificate(path+"gary.pfx", "e-iceblue");
PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(certificate, false);
String timeStampUrl = "https://rfc3161.ai.moda/adobe";
formatter.setTimestampService(new TSAHttpService(timeStampUrl));
formatter.setOCSPService(new OCSPHttpService(null));
PdfMDPSignatureMaker signatureMaker = new PdfMDPSignatureMaker (document, formatter, PdfMDPSignatureMaker.Level2Permissions);
signatureMaker.makeSignature("signName");
com.spire.pdf.interactive.digitalsignatures.PdfSignature signature = signatureMaker.getSignature();
signature.setName("Gary");
// signature.setReason("This is the final version.");
signature.setLocation("U.S.");
signature.setContactInfo("112554");
PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);
appearance.setNameLabel("Signer: ");
// appearance.setReasonLabel("Reason: ");
appearance.setLocationLabel("Location: ");
appearance.setContactInfoLabel("Phone: ");
PdfImage image = PdfImage.fromFile(path+"logo.png");
appearance.setSignatureImage(image);
appearance.setGraphicMode(GraphicMode.SignImageAndSignDetail);
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(new Point2D.Float(90, 550), new Dimension(150, 80));
signatureMaker.makeSignature("Signature", pdfPageBase,
(float) rect.getMinX(), (float) rect.getMinY(),
(float) rect.getWidth(), (float) rect.getHeight(),
appearance);
String output = "signature.pdf";
document.saveToFile(path+output, FileFormat.PDF);
document.close();
|
| Bug Fix | SPIREPDF-8040 | Fixed the issue where loading a PDF without a permission password caused an exception. |
| Bug Fix | SPIREPDF-8060 | Fixed the issue where converting an image to PDF caused an exception. |
| Bug Fix | SPIREPDF-8065 | Fixed the issue where checkmarks were missing when converting PDF to PDFA. |
| Bug Fix | SPIREPDF-8067 | Fixed the issue where extracted PDF text contained garbled characters. |
| Bug Fix | SPIREPDF-8079 | Fixed the issue where PDF-to-SVG conversion displayed incorrect content in browsers. |
| Bug Fix | SPIREPDF-5475 | Fixed an issue where signature validity verification was inaccurate. |
| Bug Fix | SPIREPDF-8086 | Fixed an issue where images were rendered incorrectly. |
Spire.Presentation 11.6.11 adds support for exporting formulas as MathML and LaTeX
We’re pleased to announce the release of Spire.Presentation 11.6.11. This version adds support for exporting formulas as MathML and LaTeX code, making it easier to integrate mathematical expressions into web applications, academic documents, and other workflows. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | - | Added support for exporting formulas as MathML and LaTeX code.
IAutoShape shapeFormula = slide.Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(40, currentTop, shapeWidth, formulaHeight)); // Insert LaTeX formula TextParagraph formulaPara = shapeFormula.TextFrame.Paragraphs.AddParagraphFromLatexMathCode(latex); // Export as MathML string mathML = formulaPara.ExportMathML(); // Export as LaTeX string LaTex = formulaPara.ExportLaTex(); |
Spire.PDF 12.6.9 optimizes the parsing logic for converting PDF to fixed-layout Word
We’re pleased to announce the release of Spire.PDF 12.6.9. This version optimizes the parsing logic for converting PDF documents to fixed-out Word files, and fixes several known bugs occurred when converting PDF to Docx, HTML, and XPS to PDF. More details are as follows.
Here is a list of changes made in this release
| Category | ID | Description |
| Adjustment | - | Adjusted the internal parsing logic for converting PDF to fixed-layout Word. Minor differences in conversion results may occur for some documents. |
| Bug Fix | - | Fixed the issue where the generated DOCX document had an incorrect page size when using PdfToWordConverter. |
| Bug Fix | SPIREPDF-8041 | Fixed the issue where generated structured PDF documents failed to pass PDF/UA (ISO 14289-1) standard validation. |
| Bug Fix | SPIREPDF-8082 | Fixed the issue where the program became unresponsive when parsing individual corrupted documents. |
| Bug Fix | SPIREPDF-8092 | Fixed the issue where inconsistent formatting occurred when converting PDF to HTML. |
| Bug Fix | SPIREPDF-8094 | Fixed the issue where an "Invalid font metrics" exception was thrown when converting XPS to PDF. |
Spire.XLS for Java 16.6.5 enhances Excel to PDF and image conversion
We're pleased to announce the release of Spire.XLS for Java 16.6.5. This version enhances the conversion from Excel to PDF and images . It also fixes several issues. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| Bug Fix | SPIREXLS-6137 | Fixed the issue of incorrect pagination when converting Excel to PDF. |
| Bug Fix | SPIREXLS-6147 | Fixed the issue of the application hanging when converting a worksheet to an image. |
| Bug Fix | SPIREXLS-6156 | Fixed the issue of content being cropped when converting Excel to images. |
Spire.PDF for Java 12.6.4 supports setting PDF reading direction and language
We're pleased to announce the release of Spire.PDF for Java 12.6.4. This version adds support for setting PDF reading direction and language, and enables more flexible formatting for PDF signature operations. Moreover, it also fixes two bugs affecting signature verification and image rendering. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | SPIREPDF-7990 | Added support for setting PDF reading direction and language.
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile(inputFile);
pdf.getViewerPreferences().setReadingDirection(PdfReadingDirection.LeftToRight);
pdf.setLanguage("zh-CN");
pdf.saveToFile(outputFile , FileFormat.PDF);
|
| New Feature | SPIREPDF-8091 | Added an overload of IPdfSignatureFormatter to PdfMDPSignatureMaker, providing more flexible formatting support for PDF signature operations.
PdfDocument document = new PdfDocument();
PdfPageBase pdfPageBase = document.getPages().add();
pdfPageBase.getCanvas().drawString("Hello, World!",
new PdfFont(PdfFontFamily.Helvetica, 30f),
PdfBrushes.getBlack(), 10, 10);
PdfCertificate certificate = new PdfCertificate(path+"gary.pfx", "e-iceblue");
PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(certificate, false);
String timeStampUrl = "https://rfc3161.ai.moda/adobe";
formatter.setTimestampService(new TSAHttpService(timeStampUrl));
formatter.setOCSPService(new OCSPHttpService(null));
PdfMDPSignatureMaker signatureMaker = new PdfMDPSignatureMaker (document, formatter, PdfMDPSignatureMaker.Level2Permissions);
signatureMaker.makeSignature("signName");
com.spire.pdf.interactive.digitalsignatures.PdfSignature signature = signatureMaker.getSignature();
signature.setName("Gary");
// signature.setReason("This is the final version.");
signature.setLocation("U.S.");
signature.setContactInfo("112554");
PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);
appearance.setNameLabel("Signer: ");
// appearance.setReasonLabel("Reason: ");
appearance.setLocationLabel("Location: ");
appearance.setContactInfoLabel("Phone: ");
PdfImage image = PdfImage.fromFile(path+"logo.png");
appearance.setSignatureImage(image);
appearance.setGraphicMode(GraphicMode.SignImageAndSignDetail);
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(new Point2D.Float(90, 550), new Dimension(150, 80));
signatureMaker.makeSignature("Signature", pdfPageBase,
(float) rect.getMinX(), (float) rect.getMinY(),
(float) rect.getWidth(), (float) rect.getHeight(),
appearance);
String output = "signature.pdf";
document.saveToFile(path+output, FileFormat.PDF);
document.close();
|
| Bug Fix | SPIREPDF-5475 | Fixed an issue where signature validity verification was inaccurate. |
| Bug Fix | SPIREPDF-8086 | Fixed an issue where images were rendered incorrectly. |
Spire.PDF for C++ 12.6.1 enhances the conversion from XPS to PDF
We're pleased to announce the release of Spire.PDF for C++ 12.6.1. This version enhances the conversion from XPS to PDF. Meanwhile, some issues that occurred when converting PDF to the PdfX1A2001 standard and merging PDF documents 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 | SPIREPDF-8034 | Fixes the issue where the resulting document reported an error when converting XPS to PDF. |
| Bug Fix | SPIREPDF-8047 | Fixes the issue where characters overlapped when converting XPS to PDF. |
| Bug Fix | SPIREPDF-8057 | Fixes the issue where image backgrounds turned black when converting PDF to the PdfX1A2001 standard. |
| Bug Fix | SPIREPDF-8074 | Fixes the issue where the program threw a "The index cannot be less than zero or greater than Count" exception when merging PDF documents. |
Spire.Doc for Python 14.6.2 supports configuring license via environment variables
We’re pleased to announce the release of Spire.Doc for Python 14.6.2. This update supports for license configuration via environment variables. More details are as follows.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | - | Spire.Doc now automatically detects and loads license information from the following environment variables:
SPIRE_OFFICE_LICENSE_KEY SPIRE_DOC_LICENSE_KEY SPIRE_LICENSE_KEY |
Spire.XLS 16.6.3 adjusts the Worksheet.SaveToPdf() method
We’re pleased to announce the release of Spire.XLS 16.6.3. This version includes an adjustment to the Worksheet.SaveToPdf() method by removing the FileFormat parameter. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| Adjustment | - | Removed the FileFormat parameter from the Worksheet.SaveToPdf() method. |
Spire.Presentation for Python 11.6.2 supports configuring licenses via environment variables
We're pleased to announce the release of Spire.Presentation for Python 11.6.2. This version adds support for configuring licenses via environment variables, with automatic recognition and loading of the following three variables: SPIRE_OFFICE_LICENSE_KEY, SPIRE_PPT_LICENSE_KEY, and SPIRE_LICENSE_KEY, optimizes the processing logic of multiple interfaces to further eliminate potential user experience issues, and fixes several exceptions when loading PPTX documents. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | - | Added support for configuring licenses via environment variables, with automatic recognition and loading of the following three variables:
SPIRE_OFFICE_LICENSE_KEY SPIRE_PPT_LICENSE_KEY SPIRE_LICENSE_KEY |
| Optimization | - | Optimized the processing logic of multiple interfaces to further eliminate potential user experience issues. |
| Bug Fix | SPIREPPT-3134 | Fixed an issue where the program threw a "Microsoft PowerPoint 2007 file is corrupt." exception when loading PPTX documents. |
| Bug Fix | SPIREPPT-3135, SPIREPPT-3136 | Fixed an issue where the program threw an "Arg_NullReferenceException" exception when loading PPTX documents. |
Spire.XLS for Python 16.6.0 supports configuring licenses via environment variables
We're pleased to announce the release of Spire.XLS for Python 16.6.0. This version supports configuring licenses via environment variables, and optimizes the SaveToPdf() method. Details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| Optimization | - | Removed the FileFormat parameter from the Worksheet.SaveToPdf() method.
Before: SaveToPdf(filename, fileformat) After: SaveToPdf(filename) |
| New Feature | - | Added support for configuring licenses via environment variables, with automatic recognition and loading of the following three variables:
SPIRE_OFFICE_LICENSE_KEY SPIRE_XLS_LICENSE_KEY SPIRE_LICENSE_KEY |