Document Understanding 26.7 Preview: Coded Workflows, New PDF Activities, Enhanced Document Redaction, and IXP Models in Solutions

:clinking_beer_mugs: We’re excited to announce a new Preview release of the Document Understanding activity packages, alongside the Public Preview of IXP models in Solutions. This release is all about meeting developers where they work: whether you build visually on the canvas, write C# in coded workflows, or orchestrate everything as a solution, your document processing tools now follow you there.

Here’s what’s new.

:keyboard: Document Understanding and PDF Activities in Coded Workflows

You can now call Document Understanding and PDF capabilities directly from coded workflows — no XAML required.

Coded workflows give you the full power of C# — loops, LINQ, exception handling, unit-testable logic — while staying fully integrated with the UiPath platform. With this release, UiPath.DocumentUnderstanding.Activities and UiPath.PDF.Activities now expose coded workflow capabilities as services you can call directly in coded workflows:

  • The du service (from UiPath.DocumentUnderstanding.Activities) exposes document classification, data extraction, and the human-in-the-loop validation artifacts operations.
  • The pdf service (from UiPath.PDF.Activities) exposes the PDF toolbox: reading text, counting pages, merging and splitting PDFs, extracting page ranges and attachments, creating PDFs from images, and the new document-to-PDF conversions.

A complete classify-then-extract flow now looks like this:

public class ProcessInvoice : CodedWorkflow
{
    [Workflow]
    public void Execute(string documentPath)
    {
        // Classify the document against your Document Understanding project
        var classified = du.ClassifyDocument(
            documentPath,
            projectName: "AccountsPayable",
            projectVersionOrTag: "Production");
        // Extract structured data — the document type is picked up
        // from the classification result, and the file isn't re-digitized
        var extractionResults = du.ExtractDocumentData(
            classified,
            projectName: "AccountsPayable",
            projectVersionOrTag: "Production");
        // Work with the extracted fields in plain C#
        var total = extractionResults.Data.GetFieldValue("Total Amount");
    }
}

Need a human in the loop? The du service also covers the validation flow: CreateDocumentValidationArtifacts uploads extraction results and returns a handle you can attach to a Validation Station task, and RetrieveDocumentValidationArtifacts picks up the validated results once the task completes.

PDF manipulation is just as direct:

// Read, inspect, and reshape PDFs with one-line calls
var text = pdf.ReadPdfText(@"C:\input\contract.pdf", range: "1-3");
var pageCount = pdf.GetPdfPageCount(@"C:\input\contract.pdf");
var merged = pdf.JoinPdf(new[] { @"C:\input\cover.pdf", @"C:\input\body.pdf" });

The full API references, including every method signature and more end-to-end examples, are available in the docs: Document Understanding coded automation APIs and PDF coded automation APIs.

:phoenix: Three New PDF Conversion Activities: Email, HTML, and Text to PDF

Real-world documents come in various formats. Invoices arrive as email bodies, reports as HTML, confirmations as plain text. Three new activities in UiPath.PDF.Activities normalize all of these into PDF — the format the rest of your document processing pipeline expects:

All three are available on both Windows and cross-platform projects, and all three share a common set of rendering options: standard paper sizes (A4, Letter, Legal, and more), custom margins, a rendering scale from 0.1 to 2.0, optional HTML header and footer templates, and background colors and graphics preserved by default.

A typical pattern this unlocks: an email trigger fires, you convert the email (and its HTML body) to PDF, then feed it directly into Extract Document Data — a complete mailbox-to-structured-data pipeline with no intermediate manual steps. And yes, these conversions are available from coded workflows too.

:shuffle_tracks_button: E-Invoicing Building Blocks: Extract Attachments from PDFs new Activity

Processing PDFs with attached structured XMLs is now one activity away! Literally. The UiPath.PDF.Activities pack now holds the Extract Attachments From PDF activity, allowing you to save the XMLs from your PDF and process them as structured data.

Here’s a little something I did with my coding agent:

:hiking_boot: IXP models as solution resources (Public Preview)

If you build with UiPath Solutions, model management just got significantly simpler. IXP models can now be added to a solution as resources — packaged, versioned, and deployed together with everything else in the solution.

Here’s how it works: when you add an IXP model as a solution resource, it appears in the Resource Explorer in Studio Web and becomes part of the solution package. Deploy the solution, and the model travels with it — no separate model deployment step, no environment-by-environment reconfiguration.

You can use solution-deployed IXP models in:

Both activities gain a new Use Solution Resource toggle. Switch it on (available when your workflow is part of a solution), pick your model, and you’re done.

This closes a long-standing gap between automation lifecycle management and model lifecycle management: your extraction model is now just another resource that moves through dev, test, and production alongside the workflows that depend on it.

:see_no_evil_monkey: Document Redaction - Field Level Settings and Redaction Codes

Redact Document gains a new public RedactionOptions argument for per-field redaction settings, giving you granular control over exactly how each field gets redacted.

Building the RedactionOptions input in an Invoke Code would look as simple as:

redactionOptions = new RedactionOptions
{
    Fields = new List<FieldRedactionSettings>
    {
        new FieldRedactionSettings
        {
            FieldId = "NoGroup.NoCategory.UtilityBills.BillingName",
            RedactionType = RedactionType.Fill,
            FillColor = "#00FF00",
            FillOpacity = 1,
            RedactionCode = "FILL PII-01",
            RedactionCodeFontColor = "#FF00FF",
            RedactionCodeFontSize = 30
        },
        new FieldRedactionSettings
        {
            FieldId = "NoGroup.NoCategory.UtilityBills.BillingAddress",
            RedactionType = RedactionType.StrikeThrough,
            FillColor = "#FF0000",
            FillOpacity = 0.6,
            BorderColor = "#FF0000",
            BorderSize = 1,
            RedactionCode = "STRK PII-02",
            RedactionCodeFontColor = "#000000",
            RedactionCodeFontSize = 30
        },
        new FieldRedactionSettings
        {
            FieldId = "",
            RedactionType = RedactionType.Fill,
            FillColor = "#FFFF00",
            FillOpacity = 0.6,
            BorderColor = "#FF0000",
            BorderSize = 1,
            RedactionCode = "WTR PII-03",
            RedactionCodeFontColor = "#000000",
            RedactionCodeFontSize = 30
        }
    }
};

Notice you can choose between a Fill and a Strikethrough redaction type, and you can define redaction codes (that get written over the redacted areas) for each field individually.

The one entry with an empty FieldID will be applied to every redaction performed from the “Words To Redact” string array.

Try it out

The new capabilities ship in the following Preview package versions, available now:

Package Version Release notes
UiPath.IntelligentOCR.Activities 7.4.0-preview Release notes
UiPath.DocumentUnderstanding.Activities 3.4.0-preview Release notes
UiPath.PDF.Activities 4.4.0-preview Release notes

For IXP models in Solutions, see the IXP release notes.

As always with Preview releases, we recommend evaluating these features in non-production environments first — and we’d love to hear your feedback. Happy automating!

Very exciting update! I have wanted Document Understanding in coded workflows for a long time.

To compliment this, we need updates to support persistence in coded workflows. If you have persistence in chain of invoking workflows that involves a coded workflow at any level it does not work. It is akin to when all persistence activities had to be in the entry-file.

I don’t know if the suspend/resume mechanism can be extended to work from within a coded workflow due to state serialization complexity.

For now, you can prep everything and add the “human touch” from outside. You can even create doc validation artifacts for coded app tasks.

Oh, and it all works for coding agents as well - using UiPath skills should guide them plenty :slight_smile:

It does not need to work in coded workflows themselves. But I do wish it could work in a low-code workflow that is being invoked by a coded workflow higher up the chain.

This is really well timed as I want to do an update on our DU Framework and make them more coding agent first, so great to see.

Got two comments on this.
There is an outstanding bug in UiPath Template projects where Coded Workflows break when you use the template project as it doesnt update the namespaces etc, meaning it cannot inherit the CodedWorkflow class.
Not your issue Iona, but raising it again as it stops us using these things optimally.

Regarding the skills, have you updated the Skills on the Github repo to reflect this? Or are you talking about the ones ran through autopilot?

referring to documentation for coding agents that are used through the rpa workflow skills from the repo… when a package gets installed in a project in studio desktop, it gets access to info about how to properly configure activities or coded workflow methods from that package. Currently available for PDF, DU.Activities, OCR.Activities, NOT for IntelligentOCR yet..