I think the modern ones are all fine for the basic stuff like that.
For my work, it was the highly detailed low level stuff. Pre-flight checks/profiles, content tree (object level, including text fragment) browsing, flattening, converting, transforming versions, and so on. It was indispensable for some of those operations, working in a printing business where clients would sometimes send in their own problematic PDFs which we'd need to adjust or inspect to find the error.
(Favourite one: a font was embedded in a PDF that mapped a character using // in its name, which was "fine" on PDF, but on the printer's RIP was converted to postscript for one step, and // in postscript precedes an immediately evaluated name so it stopped parsing and tried to look for it and bombed out)
For my work, it was the highly detailed low level stuff. Pre-flight checks/profiles, content tree (object level, including text fragment) browsing, flattening, converting, transforming versions, and so on. It was indispensable for some of those operations, working in a printing business where clients would sometimes send in their own problematic PDFs which we'd need to adjust or inspect to find the error.
(Favourite one: a font was embedded in a PDF that mapped a character using // in its name, which was "fine" on PDF, but on the printer's RIP was converted to postscript for one step, and // in postscript precedes an immediately evaluated name so it stopped parsing and tried to look for it and bombed out)