LLM-driven Constrained Copy Generation through Iterative Refinement