The convention is for class names to start with a capital letter, primitive types do not. In your example, "String" is the simple class name for "java.lang.String" whereas "int" is a primitive type (i.e. not a class name). If you were to use the "java.lang.Integer" class, which is different from the primitive type "int" then you would (have to) capitalize the first char. In some sense autoboxing in Java 1.5 has made this more confusing because it looks more like "java.lang.Integer" and "int" are synonomous when they are definately not. Variable naming convention is a different subject. See the java coding conventions at http://java.sun.com/docs/codeconv/.
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