Unplanned
Last Updated: 23 Jun 2025 13:16 by ADMIN

When converting HTML to DOCX, margins set on an HTML element are ignored. These styles are exported correctly when the HTML passed to the converter is formatted with indents. The following XUnit test demonstrates this behavior with a simplified example.

using Telerik.Windows.Documents.Flow.FormatProviders.Docx;
using Telerik.Windows.Documents.Flow.FormatProviders.Html;

namespace MSPI.Tests.Unit;

public class WordExportTest
{
    [Fact]
    public async Task TextExport()
    {
        const string formattedDocumentSavePath = @"C:\Testing\export-test-formatted.docx";
        const string formattedContent = """"
            <p>Test paragraph</p>
            <ol style="margin-left: 100px;">
                <li>Item 1</li>
                <li>Item 2</li>
            </ol>
        """";

        const string minifiedDocumentSavePath = @"C:\Testing\export-test-minified.docx";
        const string minifiedContent = """"<p>Test paragraph</p><ol style="margin-left: 100px;"><li>Item 1</li><li>Item 2</li></ol>"""";

        var htmlFormatProvider = new HtmlFormatProvider();
        var docxFormatProvider = new DocxFormatProvider();

        await using var minifiedDocumentMemoryStream = new MemoryStream();
        var minifiedRadFlowDocument = htmlFormatProvider.Import(minifiedContent, TimeSpan.FromSeconds(30));
        docxFormatProvider.Export(minifiedRadFlowDocument, minifiedDocumentMemoryStream, TimeSpan.FromSeconds(30));
        var minifiedBytes = minifiedDocumentMemoryStream.ToArray();
        await File.WriteAllBytesAsync(minifiedDocumentSavePath, minifiedBytes);

        await using var formattedDocumentMemoryStream = new MemoryStream();
        var formattedRadFlowDocument = htmlFormatProvider.Import(formattedContent, TimeSpan.FromSeconds(30));
        docxFormatProvider.Export(formattedRadFlowDocument, formattedDocumentMemoryStream, TimeSpan.FromSeconds(30));
        var formattedBytes = formattedDocumentMemoryStream.ToArray();
        await File.WriteAllBytesAsync(formattedDocumentSavePath, formattedBytes);
    }
}

The minified HTML produces the following document:

The formatted HTML produces the following document:

 

Unplanned
Last Updated: 23 Jun 2025 07:53 by Vitalii
Handle documents with mismatched font Subtype and FontFile type when exporting PDF to image with SkiaImageFormatProvider.
Unplanned
Last Updated: 20 Jun 2025 08:33 by Michael
Created by: Michael
Comments: 0
Category: PdfProcessing
Type: Bug Report
0
Import-export changes the color of the shading object.
Unplanned
Last Updated: 17 Jun 2025 07:09 by ADMIN

Read the documentation for CancelationTokenSource.CancelAfter:

this method will throw an ArgumentOutOfRangeException when: delay.TotalMilliseconds is less than -1 or greater than Int32.MaxValue (or UInt32.MaxValue - 1 on some versions of .NET). Note that this upper bound is more restrictive than TimeSpan.MaxValue.

----------------------------------------------------

your code in CancelationTokenSourceFactory.CreateTokenSource does this check:

if (timeSpan.HasValue && timeSpan.Value != TimeSpan.MaxValue)

this check for TimeSpan.MaxValue seems totally pointless here, if timeSpan is anything between ~2147483647 and 922337203685476 milliseconds long this will still just throw a ArgumentOutOfRangeException.

I suspect that this check was intended as a way to prevent creating a cancellation timer that never triggers in the CancellationTokenSource, which should look like this:

if (timeSpan.HasValue && timeSpan != Timeout.InfiniteTimeSpan) //Timeout.InfiniteTimeSpan is -1 milliseconds
which still seems like premature optimization with no noticeable benefit but at least it isn't completely pointless.
Unplanned
Last Updated: 13 Jun 2025 10:08 by ADMIN

In the 2025 version of the Documents packages, "TimeSpan? timeout" were added to a number of interfaces, with the old versions obsoleted, for example: IWorkbookFormatProvider.Import & IWorkbookFormatProvider.Export.

This is a very strange choice, because this limits the flexibility of the interfaces for no reason at all. By only providing the TimeSpan parameter and not a CancellationToken is currently impossible to cancel the operation because e.g. an API request was canceled.

Internally these methods are implemented by first creating a cancellation token using

using CancellationTokenSource cancellationTokenSource = CancelationTokenSourceFactory.CreateTokenSource(timeout);

the token from this CancellationTokenSource is then passed to a protected method. Because this internal method uses a CancellationToken anyway, there is practically 0 development cost to exposing this in the interface, which makes the choice not to do so even more confusing.

The interfaces should expose methods that take a CancellationToken instead of a TimeSpan. This would allow for the same functionality as the TimeSpan parameter, by simply passing a cancellation token with a CancelAfter set with a TimeSpan, and an extension method could be provided for the interface which does exactly that, so users can still call these methods with a TimeSpan parameter if they wish to do so for convenience.

Please, in the next version, make these interfaces methods like this:

Workbook Import(Stream input, CancellationToken cancellationToken = default);
void Export(Workbook workbook, Stream output, CancellationToken cancellationToken = default);

and, for convenience, add extension methods for these like this:

public static class WorkbookFormatProviderExtensions
{
    public static Workbook Import(this IWorkbookFormatProvider workbookFormatProvider, Stream input, TimeSpan? timeout)
    {
        using CancellationTokenSource cancellationTokenSource = CancelationTokenSourceFactory.CreateTokenSource(timeout);
        return workbookFormatProvider.Import(input, cancellationTokenSource.Token);
    }
}

Affected interfaces I've run into so far:

  • Telerik.Windows.Documents.Spreadsheet.FormatProviders.IWorkbookFormatProvider
  • Telerik.Windows.Documents.Common.FormatProviders.IFormatProvider<T>

There may be more with this same pattern, I haven't checked.

Unplanned
Last Updated: 12 Jun 2025 08:44 by Lorenzo
Created by: Lorenzo
Comments: 0
Category: SpreadProcessing
Type: Feature Request
0
Add support for Stock charts (StockChart).
Unplanned
Last Updated: 09 Jun 2025 10:20 by Heidi

NullReferenceException when inserting a document containing a table with a document variable having a line break (\n) in its value.

Unplanned
Last Updated: 06 Jun 2025 14:56 by ADMIN
ADMIN
Created by: Deyan
Comments: 10
Category: SpreadProcessing
Type: Feature Request
32
Add support for pivot tables.
Unplanned
Last Updated: 05 Jun 2025 11:46 by ADMIN
Add API that allows one to manipulate the macros inside a Workbook.
Unplanned
Last Updated: 04 Jun 2025 12:33 by Sailaja
Stacktrace: 
   at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
   at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
   at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key)
   at Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx.Model.Elements.Worksheets.ConditionalFormattingRuleElementX14.OnAfterRead(IXlsxWorksheetImportContext context) in C:\Work\document-processing\Documents\Spreadsheet\FormatProviders\OpenXml\Xlsx\Model\Elements\Worksheets\ConditionalFormatting\x14\ConditionalFormattingRuleElementX14.cs:line 62
Unplanned
Last Updated: 03 Jun 2025 10:23 by Rey
Add support for "AcroSendMail:SendMail" named action.
Unplanned
Last Updated: 03 Jun 2025 05:57 by Eli
Such a document can be considered as invalid. However, it would be good to provide functionality to handle it.  
Unplanned
Last Updated: 30 May 2025 08:16 by ADMIN
ADMIN
Created by: Martin
Comments: 0
Category: PdfProcessing
Type: Feature Request
0
Part 3 of the standard, published on October 15, 2012, differs from PDF/A-2 in only one regard: it allows embedding of arbitrary file formats (such as XML, CSV, CAD, word-processing documents, spreadsheet documents, and others) into PDF/A conforming documents.
Unplanned
Last Updated: 28 May 2025 07:54 by ADMIN
ADMIN
Created by: Martin
Comments: 0
Category: PdfProcessing
Type: Feature Request
0

Purpose: Long-term archiving of electronic documents with full semantic structure.

  • "A" for Archiving
  • Level "1a" ensures:

    • Tagged PDF (with proper logical structure and reading order)

    • Unicode text for proper text extraction and searchability

    • Embedded fonts (for consistent rendering)

  • Restrictions:

    • No audio/video

    • No encryption

    • No JavaScript

    • No external content (everything must be self-contained)

  • Based on: PDF 1.4 (Acrobat 5)

Unplanned
Last Updated: 27 May 2025 11:03 by Thomas
PdfProcessing: ArgumentException is thrown when importing a document with a duplicated filed names.
Unplanned
Last Updated: 27 May 2025 10:24 by Thomas
Handle the import of documents when the GoToR action`s file specification object is a string.
Unplanned
Last Updated: 26 May 2025 12:28 by ADMIN
Unplanned
Last Updated: 20 May 2025 15:13 by Christopher
Add support for documents with unexpected text between child elements (e.g. ZWNBSP).
Unplanned
Last Updated: 20 May 2025 11:38 by Babu
Background color is lost when formatting tags (<strong> and <u>) are applied to the content of a nested span.
Unplanned
Last Updated: 09 May 2025 10:23 by Vitalii
Created by: Vitalii
Comments: 0
Category: PdfProcessing
Type: Feature Request
10
A shading dictionary specifies details of a particular gradient fill, including the
type of shading to be used, the geometry of the area to be shaded, and the geometry of the gradient fill. Various shading types are available, depending on the value of the dictionary’s ShadingType entry:
  • Coons patch meshes (type 6) construct a shading from one or more color
    patches, each bounded by four cubic Bézier curves.
1 2 3 4 5 6