First, you will need VMware's VDiskManager utility. If you do not already have it installed, you can download it here, scroll down to the "Attachments" section (has links for Windows, Mac, and Linux). You will also need OpenSSL if you haven't installed it already (Windows download link).
If the VMDK is not already in "Monolithic Flat" form, you'll have to convert it with with the command "
vdiskmanager.exe -r sourceimage.vmdk -t 2 destinationimage.vmdk"
Next, make a backup of your disk.vmdk file (call it disk.vmdk.old or something), and open your disk.vmdk file with a text editor such as Notepad++ on Windows. Scroll down to the section called "# Extent description", it will look something like this: "
RW 120000000 FLAT "disk.vmdk" 0". Take the size you want the disk to be in GB and multiply it by 2000000, for example, 30 GB would be 60000000. Replace the value in-between
FLAT with this number. Save the file.
Then, convert it again with the command "
vdiskmanager.exe -r sourceimage.vmdk -t 2 destinationimage.vmdk". The new image now appears as the desired size on disk, and appears as the desired size to the VM, and the VM itself will still be able to boot.
That's it, you should now have a VMDK file that has a lower maximum size as you want. You can now increase the size of the partitions to fill any small amount of extra unallocated space that you left for yourself as leeway.