Pages using nested Form XObject chains (page → wrapper Form → text Form) were returning 0 text items because extract_form_xobject_text() didn't handle the Do operator. Add Do/q/Q/cm handling with recursive descent (max depth 5) and proper CTM tracking through the nesting. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>