Here's a working example using <img> in a <table>. I don't think you can put an <img> inside an <item> or inside another <img>.

<table orient="col">
            <block width="40%">
                    <img src="http://localhost/logo.jpg" contentHeight="0.56in" contentWidth="2.33in" style="text-align:left"/>
            <block width="40%">
                <table orient="col">
                        <item field='#(..pagetitle)#'/>
            <block width="20%" style="text-align:right;">
                  <item field='#(..subtitle)#'/>

Here is the section in the docs that explains why this is happening and why @Eduard Lebedyuk asked if that class is persistent.

Business Process Execution Context

The life cycle of a business process requires it to have certain state information saved to disk and restored from disk, whenever the business process suspends or resumes execution. This feature is especially important for long-running business processes, which may take days or weeks to complete.

A BPL business process supports the business process life cycle with a group of variables known as the execution context. InterSystems IRIS automatically save the variables in the execution context and restores them each time the BPL business process suspends and resumes execution.

There's no option for %DisplayFormatted to split the results into multiple parts automatically. You would need to write a custom method to do your CSV output with the logic you need. I can post some sample code that outputs CSV if that would be helpful.

8 hours for 16 million records at ~140 bytes/record seems really slow. I just did a test on a slow Windows VM and for a simple "SELECT *" for 16 million records @ 150 bytes/record, %DisplayFormatted took about 18 minutes to output the 2.4 GB CSV.

I suggest you contact the WRC to help look at where the bottleneck is.

%XML.Reader and %XML.Document won't automatically update the original stream. You need to use %XML.Writer to output the %XML.Document into a stream.

set writer=##class(%XML.Writer).%New()
set outStream=##class(%Stream.GlobalCharacter).%New()
set tSC=writer.OutputToStream(.outStream)
set tSC=writer.Document(document)
write "Stream:[",outStream.Read(3000000),"]",!

[1,2,,3] is arguably more ambiguous than a trailing comma, and there are some precedents for (if and) how to treat trailing commas.

On the other hand, I just tested both cases in Firefox using JSON.parse() and they both fail. Browsers tend to be pretty tolerant of bad stuff, so the fact that Firefox won't accept trailing commas makes a good case for IRIS not allowing trailing commas either.

Strangely, Firefox apparently allows trailing commas in JavaScript, but not in JSON.

File Specs for services support wildcards, but not the complex time stamp specifications that are used for outputting filenames from an operation.

File Spec
Filename or wildcard file specification for file(s) to retrieve. For the wildcard specification, use the convention that is appropriate for the operating system on the local InterSystems IRIS Interoperability machine.