PrinterShare works well for me. If the printer is wifi-enabled, or bluetooth, then the only thing that PrinterShare needs is the printer driver (which it will add to the Android device), and maybe the rendering engine (also on the device). Once those two parts are installed, it works just fine.
Depending on the printer, they may have an app. I have an Epson printer. There is an app out for it (Epson iPrint) that works directly with that printer. The latest update added document support. Plus it will print borderless photos.