As usual, it depends on the situation. Some constants are values that you are allowed to pass into a particular method. Then it makes sense for the class that has the method to also have the constants. Some constants are used all over the system. Then it makes sense to make them more global in their own class.
It's a neat goal to have only one reason to change a class. That steers you away from a single class with all the constants in the system because it would have many reasons to change.
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
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