Thank you!! You may have just solved a problem that has plagued us for a long time now! Our Canon printer worked perfect for a while, then some days it just would not print. The idea that it was a dynamic IP issue never occurred to me. I changed it to static and now it works perfect.
For anyone who doesn't get this static/dynamic concept: Every device on your wifi network is given a number, called an IP address. When your printer is turned on, it says hello to your router, and asks for a new IP (this is called dynamic IP). The router gives it a number, let's call it "...10". When your laptop looks for your printer for the first time, it finds it at "...10" and remembers that number. When the printer shuts down for the day, it lets go of that number. So when your kid logs on with an iPad and that iPad says to the router "I need a number" the router gives the iPad "...10". So then the printer comes on later and says "I need a number" and it gives it "...11". Then your laptop tries to print, it looks for the printer at "...10", doesn't see it and thinks it's offline. Like Ivy74 said, software should account for this, but in my case it has not. So you need to change your printer to instead say to your router "Hey, I'm the printer and I want number "...50" (this is called static IP), or some number higher than the number of devices in your house. Then have your laptop find the printer again as if finding it for the first time, they'll find it at "...50" and it will always be at "...50".
Here's how to do that on my printer, which is an MG5400 series.
(For the record, IP addresses are in the format: 192.168.1.50 (I abbreviated the examples above))
Setup --> Device Settings --> LAN Settings --> Other Settings --> TCP/IP Settings --> IPv4 --> Yes --> IP address --> Manual Setup -->
192.168.001.050 (050 can be any number you want it to be from 0-255, but I recommend something high enough to avoid conflicts)
Hit the back button repeatedly to back out to main menu.
This has worked for me.