There is the python library ocrmypdf
https://ocrmypdf.readthedocs.io/en/latest/ that works really well. I have found the results comparable to Adobe in accuracy.
I believe it uses tesseract, ghostscript and some other libraries.
Speaking of ghostscript, one way to deal with problematic PDFs is to print them to file and deal with the result instead.