Pekka makes a very good point in asking whether the door seals are part of the problem.
I would start without the door cards or B-post trim and only with the A-post seal fitted. I’d then make sure the door panel gaps really are correct and that the door is not trying to sag on a worn hinge pin.
Once that all the physical location/orientation of the door checks out, I would worry about the catch and the mechanics of door closing.
To do that, I’d add the seals back in one at a time, starting from the front and working backwards.
Consider that to latch the door, it has close a tiny amount further into the cabin and bounce back latched. The seals are like springs and so they affect the ability of the door to overshoot and close. This is not only because they have friction, but because they affect how much the door can overshoot and bounce back - i.e. how the “spring” settles is a function of how strong the spring is.
The objective is to make the door seals offer almost zero resistance to movement .
The leverage that the door has over the rubber is greatest at the A-post and weakest at the B-post. Accordingly, if door can’t be made to latch with just the big A-post seal fitted, you will never get it closing correctly later anyway. You will need to work that seal with a Dremel to thin it out where it is pinching/folding and too strong until the door weight alone is sufficient to overcome the springiness of the seal.
Then you can work your way towards the B-post and repeat with each new piece of rubber.
Eventually, you can refit the door card and B-post trim and verify that the door isn’t bouncing off of those.
When you are done, the door can be made to close under its own weight (no need to slam!) if let go from a distance of one just handspan away.
Caveat - if you have a lightweight, further measures are needed as the door is aluminium and much lighter than a steel door.
Amongst the tricks with seals is that you should consider that can be as thin as they like, so long as they still contact the door and are deformable. For the seals which sit in a pop rivetted channel, the rear of the seal can be ground away with a Dremel to stop the rivets from interfering with the seal standing proud and obstructing the door fit.
Consider that a spring doesn’t just go straight to its rest position when it releases its tension - the door has to be allowed to overshoot by just enough click the latching mechanism - then it’ll bounce back locked. Unless you are dealing with a physical/mechanical problem (which needs sorting first), seals which are too strong will not allow proper door closure.
Finally, the super secret trick no one tells you is that it is possible to locate the striker plate up to 2mm higher/lower/inboard/outboard more by taking the three cross headed bolts and turning down their thickness in a lathe. The only part of the thread which is needed on those bolts is the end part which mates with the captive nuts. The middle part of the bolt, if turned/ground down, gives you the choice of moving that striker plate further than a stock bolt because the turned down section is where the bolt passes through the door B-post and striker plate. It’s sneaky and it works. Obviously if you take too much metal off, it’ll snap, so adjust to suit.
My doors close without slamming. Just let go of them if they are more than your hand’s width from the B-post and they shut under their own weight with a satisfying clunk. Every single owner I’ve demonstrated this to goes away swearing under their breath, but it’s not rocket science.