I just rigged a flag halyard on my San Juan 21. If you want to run a flag from the spreader, one way to do it, I'll describe what I did.
Attach a small light duty block to the middle of the starboard spreader (customary to put it on the starboard.) I've put mine on temporarily with a nylon tie strap until I figure out exactly where on the spreader I want it, then I'll put it on a small eyestrap.
Put a shroud cleat on the starboard shroud down by the turnbuckle. You can get these at West Marine or anywhere, really. The one pictured here is for shroud diameters greater than 1/8", the normal size for our DS boats, so you'd have to get a different one, but it looks like this:
That's it. Run a 1/8"-1/4" line up around the block and tie it as a big loop about a foot longer than the loop in the shroud cleat. Run it down through the loop and then around the cleat. Use flag clips to attach a flag.
Like this:
Carlos