pdf-merge-001

Tests that pdf-merge works.

Test is expected to pass.

The pipeline

<p:declare-step xmlns:cx="http://xmlcalabash.com/ns/extensions"
                xmlns:p="http://www.w3.org/ns/xproc"
                xmlns:t="http://xproc.org/ns/testsuite/3.0" name="main" version="3.0">
   <p:import href="https://xmlcalabash.com/ext/library/pdf-steps.xpl"/>
   <p:output port="result"/>
   <cx:pdf-merge>
      <p:with-input port="source"
                    href="../documents/example.pdf"/>
      <p:with-input port="secondary">
         <p:document href="../documents/longer.pdf"/>
         <p:document href="../documents/libreoffice-form.pdf"/>
      </p:with-input>
   </cx:pdf-merge>
   <cx:pdf-info page-text="true"/>
</p:declare-step>

Result

<cx:pdf-info xmlns:cx="http://xmlcalabash.com/ns/extensions"
             xmlns:t="http://xproc.org/ns/testsuite/3.0">
   <cx:version>1.6</cx:version>
   <cx:form>acro-form</cx:form>
   <cx:pages>4</cx:pages>
   <cx:encrypted>false</cx:encrypted>
   <cx:page-size width="595" height="842" units="px">A4</cx:page-size>
   <cx:title>Example PDF Document</cx:title>
   <cx:creator>Bear</cx:creator>
   <cx:producer>macOS Version 26.5 (Build 25F71) Quartz PDFContext</cx:producer>
   <cx:author>Norm Tovey-Walsh</cx:author>
   <cx:creation-date>2026-06-10T14:26:39Z</cx:creation-date>
   <cx:modification-date>2026-06-10T14:26:39Z</cx:modification-date>
   <cx:subject>Sample documents</cx:subject>
   <cx:keyword>xmlcalabash</cx:keyword>
   <cx:keyword>testsuite</cx:keyword>
   <cx:file-size>210496</cx:file-size>
   <cx:page-details>
      <cx:page page-number="1">
         <cx:text>PDF Text
This is a sample PDF document.
With an image.
</cx:text>
      </cx:page>
      <cx:page page-number="2">
         <cx:text>Longer example
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
(There’s going to be lots of this 
!
)
Secondary heading
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
</cx:text>
      </cx:page>
      <cx:page page-number="3">
         <cx:text>aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore 
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum 
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
officia deserunt mollit anim id est laborum.
There. That gets us onto a second page, which was all that was really needed.
</cx:text>
      </cx:page>
      <cx:page page-number="4">
         <cx:text>Example for a Form
    
Gender:
Nationality:
First Name Last Name
Birthday
Female Male
Agree to privacy policy
Other
</cx:text>
      </cx:page>
   </cx:page-details>
</cx:pdf-info>

Schematron checks

<s:schema xmlns:s="http://purl.oclc.org/dsdl/schematron"
          xmlns:t="http://xproc.org/ns/testsuite/3.0" queryBinding="xslt2">
   <s:ns prefix="cx"
         uri="http://xmlcalabash.com/ns/extensions"/>
   <s:ns prefix="f"
         uri="http://xmlcalabash.com/ns/acro-form"/>
   <s:pattern>
      <s:rule context="/">
         <s:assert test="cx:pdf-info">Wrong document element></s:assert>
      </s:rule>
   </s:pattern>
   <s:pattern>
      <s:rule context="/cx:pdf-info">
         <s:assert test="cx:pages = 4">Wrong number of pages</s:assert>
         <s:assert test="starts-with(cx:page-details/cx:page[@page-number='4']/cx:text, 'Example for a Form')">Wrong page text</s:assert>
      </s:rule>
   </s:pattern>
</s:schema>

Revision history

11 Jun 2026, Norm Tovey-Walsh
Created test.