DocumentUltimate v3.2.0 is released

This release includes the following changes:

  • Fixed: When ASP.NET impersonation was used via <identity impersonate=“true” … /> tag in web.config, when accessing temporary folder impersonation was being reverted “just in case”. This will not be done anymore because it cause access errors in some cases.

    More info about ASP.NET impersonation: Actually the user in <identity> tag already has to have permissions on “Temporary ASP.NET Files” because ASP.NET runtime throws an error on startup so we can assume the user can already access if the application is running.

    <identity impersonate=“true” /> (no user) impersonates IUSR when Anonymous Authentication is used and suprisingly IUSR is not member of IIS_IUSRS, only app pool identities are (via automatic injection). When Windows Authentication is used, this will be the logon user. So you are responsible for adding any impersonated user including IUSR to IIS_IUSRS group to grant “Temporary ASP.NET Files” access.

    After adding IUSR to IIS_IUSRS group, you need to run “iisreset” in Administrator Command Prompt. This is because changes to user’s group membership are not effective until the next time the user logs on.

    If you are running the app pool as a domain user, the rules change on the automatic injection of IIS_IUSRS token into the process at startup. Solution: Create a new active directory user group named “IIS_IUSERS” in Users OU. Then join your iis users to this group. After that, adding that user group to local IIS_IUSRS group solves your problem.

  • Added: New ConvertTo method overloads to DocumentConverter class. You do not have to implement IOutputHandler interface for some operations.

    You can now do multi-page output conversions in memory, conveniently:

    var documentConverter = new DocumentConverter("InputFile.pdf");
    Dictionary <string, MemoryStream> memoryStreams;
    documentConverter.ConvertTo(out memoryStreams, DocumentFormat.Jpg);
    foreach (var kvp in memoryStreams)
        var fileName = Path.GetFileName(kvp.Key); // File name or path (e.g. "OutputFile-01.jpg")
        var memoryStream = kvp.Value; // File stream in memory
        // Do something with file name and stream, e.g. save to a file
        using (memoryStream)
        using (var fileStream = File.Create(Path.Combine(@"C:\Output", fileName)))

    You can now do multi-page output conversions to streams, conveniently:

    var documentConverter = new DocumentConverter("InputFile.docx");
    // Convert "InputFile.docx" to Jpg via output stream callback
    // The callback will be called for each output file.
        currentOutputFile => GetStreamResult(currentOutputFile),
    public StreamResult GetStreamResult(string currentOutputFile)
        // Open a writable stream here which corresponds to identifier 
        // passed in currentOutputFile parameter.
        // In this example, currentOutputFile parameter will be 
        // "InputFile-01.jpg", "InputFile-02.jpg" etc. each time this method is called.
        // The current output file will be written to this stream.
        return new StreamResult(stream);
  • Fixed: Changing options (e.g. sender.options.documentError = '';) within ClientLoad event was not effective.

  • Improved: Got rid of HTTP headers used in DocumentViewer when downloading the XPZ. Parameters will instead passed via regular querystring. This will probably fix some random "Invalid XPZ file" errors.

  • Fixed: FILENAME merge field for Word files was updated to the cache file name (e.g. ~qpnyes~1hk72gx.pdf) if the file was loaded from a stream. Now it will display the original document name (e.g. DOCX Document.docx).

  • Added: WordProcessingInputOptions class. Currently there is only FieldFileName property which allows you to change the value of FILENAME merge field when converting from a Word document.

  • Added: rewindAfterUse constructor parameter to StreamResult class which is useful for reusing MemoryStreams.

  • Improved: MemoryInputOutputHandler class now supports multiple files.

  • Improved: Added more code examples in API docs.

For the full version history of DocumentUltimate, please see here.