<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="BodyFragment"><font size="2"><span style="font-size:10pt;">
<div class="PlainText">Hi all,<br>
<br>
I’ve recently returned to tackle the task of generating Tagged PDF using pdftex,<br>
in particular for PDF 2.0, PDF/A-1a  and  PDF/UA  format specifications.<br>
<br>
This is using ordinary pdftex, not the one with extra primitives specially for the<br>
tagging structures.<br>
So far I’ve had more success than I’d originally thought possible.<br>
<br>
The attached document below is an example that fully conforms to PDF/A-1a.<br>
It also passes all the Accessibility tests in Acrobat Pro DC.<br>
<br>
However there is some smallish issues that would be good to have implemented.<br>
<br>
Using  \pdfliteral  for the tagging, to insert material before and after textual content,<br>
the page-content stream looks like:<br>
<br>
>>> 36 0 obj<br>
>>> <<<br>
>>> /Length 2718      <br>
>>> >><br>
>>> stream<br>
>>> 1 0 0 1 108.737 686 cm<br>
>>> /T <</MCID 0 >> BDC <br>
>>> 1 0 0 1 -108.737 -686 cm<br>
>>> BT<br>
>>> /F15 10.9091 Tf 108.737 686 Td [(Here)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 25.788 0 Td [(is)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 10.97 0 Td [(a)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 9.091 0 Td [(paragraph)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 52.182 0 Td [(b)28(y)]TJ/F17
 1 Tf( )Tj/F15 10.9091 Tf 15.151 0 Td [(itself.)]TJ<br>
>>> ET<br>
>>> 1 0 0 1 252.586 686 cm<br>
>>> EMC<br>
>>> …<br>
<br>
Note<br>
   1.  the use of interword spaces between words;<br>
   2.  the coordinate space adjustments prior to tags an BT textual content:<br>
 <br>
1 0 0 1 108.737 686 cm<br>
/T <</MCID 0 >> BDC <br>
1 0 0 1 -108.737 -686 cm<br>
BT<br>
<br>
Further down this becomes excessive, for just a single line of text with styling:<br>
<br>
>>> 1 0 0 1 -179.576 -10.095 cm<br>
>>> /T <</MCID 4 >> BDC <br>
>>> 1 0 0 1 -108.737 -563.655 cm<br>
>>> BT<br>
>>> /F15 10.9091 Tf 108.737 563.655 Td [(And)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 23.94 0 Td [(another)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 40.03 0 Td [(with)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 24.849 0 Td [(some)]TJ<br>
>>> ET<br>
>>> 1 0 0 1 224.889 563.655 cm<br>
>>> EMC<br>
>>> /T <</MCID 5 >> BDC <br>
>>> 1 0 0 1 -224.889 -563.655 cm<br>
>>> BT<br>
>>> /F16 10.9091 Tf/F17 1 Tf( )Tj/F16 10.9091 Tf 224.889 563.655 Td [(b)-32(old)]TJ/F17 1 Tf( )Tj/F16 10.9091 Tf 28.227 0 Td [(text)]TJ<br>
>>> ET<br>
>>> 1 0 0 1 275.245 563.655 cm<br>
>>> EMC<br>
>>> /T <</MCID 6 >> BDC <br>
>>> 1 0 0 1 -275.245 -563.655 cm<br>
>>> BT<br>
>>> /F15 10.9091 Tf/F17 1 Tf( )Tj/F15 10.9091 Tf 275.245 563.655 Td [(.)]TJ<br>
>>> ET<br>
>>> 1 0 0 1 283.124 563.655 cm<br>
>>> EMC<br>
<br>
<br>
The length of the output can be reduced (by approx 15–20%) using   \pdfliteral direct ….<br>
But there is a drawback, since BT … ET  and  BDC … EMC  operators<br>
must be correctly nested, else the PDF is malformed.<br>
<br>
viz.<br>
>>> 36 0 obj<br>
>>> <<<br>
>>> /Length 2232      <br>
>>> >><br>
>>> stream<br>
>>> …<br>
>>> ...<br>
>>> BT<br>
>>> /F17 1 Tf 108.737 563.655 Td [( )]TJ<br>
>>> /T <</MCID 4 >> BDC <br>
>>> /F15 10.9091 Tf 0 0 Td [(And)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 23.94 0 Td [(another)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 40.03 0 Td [(with)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 24.849 0 Td [(some)]TJ<br>
>>> EMC<br>
>>> /T <</MCID 5 >> BDC <br>
>>> /F16 10.9091 Tf/F17 1 Tf( )Tj/F16 10.9091 Tf 27.333 0 Td [(b)-32(old)]TJ/F17 1 Tf( )Tj/F16 10.9091 Tf 28.227 0 Td [(text)]TJ<br>
>>> EMC<br>
>>> /T <</MCID 6 >> BDC <br>
>>> /F15 10.9091 Tf/F17 1 Tf( )Tj/F15 10.9091 Tf 22.129 0 Td [(.)]TJ<br>
>>> EMC<br>
>>> ET<br>
<br>
Note here that  \pdffakespace  is used immediately before the first  \pdfliteral direct 
<br>
otherwise one gets incorrect nesting as:<br>
<br>
>>> /T <</MCID 4 >> BDC <br>
>>> BT<br>
>>> /F15 10.9091 Tf 0 0 Td [(And)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 23.94 0 Td [(another)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 40.03 0 Td [(with)]TJ/F17 1 Tf( )Tj/F15 10.9091 Tf 24.849 0 Td [(some)]TJ<br>
>>> EMC<br>
>>> /T <</MCID 5 >> BDC <br>
>>> ...<br>
<br>
However that “fake space” is viewed as content, for Accessibility purposes.<br>
It must therefore be within tags — but that cannot be achieved this way.<br>
<br>
<br>
So here are my requests.<br>
<br>
  1.   please add a new mode to  \pdfliteral  <br>
        e.g.    \pdfliteral text {….}<br>
        which checks whether we have    pdf_doing_text   as true.<br>
If so,  just do what   \pdfliteral direct   does;<br>
otherwise do<br>
    pdf_print_ln("BT");<br>
    pdf_doing_text := true;<br>
then place the contents literally. <br>
When used correctly, textual content would follow, without needing to change   pdf_doing_text
<br>
nor include the initial “BT”.<br>
<br>
Presumably there’ll need to be an adjustment to<br>
 <br>
       procedure pdf_begin_text; {begin a text section}<br>
<br>
to not do   pdf_print_ln("BT”);  when  pdf_doing_text  is already true.<br>
<br>
<br>
<br>
2.  <br>
It would be great to be able to do away with the  \pdfinterwordspaceon/off  for every word.<br>
That is, generate shorter output with explicit spaces (when the font has it in slot 32 ) such as:<br>
<br>
  /T <</MCID 4 >> BDC <br>
 /F15 10.9091 Tf 0 0 Td [(And )<num>(another )<num>(with )<num>(some )]TJ<br>
 EMC<br>
<br>
where each <num> is calculated using the width of the space character in the font.<br>
<br>
Not only does this reduce the (uncompressed) size considerably, but it would also<br>
allow for the “Reflow” effect in Adobe Reader and Acrobat Pro (and other ?) PDF readers.<br>
<br>
<br>
<br>
All the best,<br>
<br>
        Ross<br>
<br>
</div>
</span></font></div>
<div class="BodyFragment"><font size="2"><span style="font-size:10pt;">
<div class="PlainText"><br>
<br>
<br>
Dr Ross Moore<br>
Mathematics Dept | Level 2, S2.638 AHH<br>
Macquarie University, NSW 2109, Australia<br>
<br>
T: +61 2 9850 8955  |  F: +61 2 9850 8114<br>
M:+61 407 288 255  |  E: ross.moore@mq.edu.au<br>
<br>
<a href="http://www.maths.mq.edu.au">http://www.maths.mq.edu.au</a><br>
<br>
<br>
</div>
</span></font></div>
<div><img src="cid:75aa1ef5-7de8-4a72-b53d-a5ccf4344a69@ausprd01.prod.outlook.com">
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:10pt;">
<div class="PlainText"><br>
<br>
<br>
CRICOS Provider Number 00002J. Think before you print. <br>
Please consider the environment before printing this email.<br>
<br>
This message is intended for the addressee named and may <br>
contain confidential information. If you are not the intended <br>
recipient, please delete it and notify the sender. Views expressed <br>
in this message are those of the individual sender, and are not <br>
necessarily the views of Macquarie University.<br>
<br>
</div>
</span></font></div>
</body>
</html>