A DSL is just an internal or external language used to express and solve a problem. Metaprogramming is a programming tool. DSLs do not rely on metaprogramming (but metaprogramming may be used to implement a DSL).
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com
subject: What is the difference between a DSL and Metaprogramming