Del Potro, a runner-up last year, defeated Gilles Muller of Luxembourg 7-6 (4), 7-6 (5) to reach his fourth final of the year, while Zemlja rallied to stun second-seeded Janko Tipsarevic 3-6, 7-6 (5), 6-2 for his first career final.
The 70th-ranked Zemlja was 0-4 against top-10 players. The Slovenian played 15 sets to get to the final, del Potro seven.
"This is an incredible dream," said Zemlja, who defeated third-seeded Tommy Haas in the quarterfinals. "I am full of confidence now. I have no tactics yet to play del Potro. I will have to talk to my coach first."
In his 17th career final, del Potro is looking for his 12th title and third of the season after winning in Marseille and Estoril. He has never played Zemlja before.
Del Potro is playing his first tournament since returning from a wrist injury that sidelined him for more than a month.
"Being in the final means a lot to me after a month without playing," he said. "I am getting better match by match. I am improving on my game, on my confidence. I am happy to play my second final in a row here."
Del Potro said he was especially satisfied with his serve. He won all 38 service games this event, and in Wednesday's second round, del Potro and Daniel Brands of Germany hit 30 and 32 aces respectively to set an all-time record for most aces in a best-of-three match.
His semifinal consisted mainly of short rallies and featured no breaks of serve. Del Potro converted his fourth match point with his 17th ace, while Zemlja had 16 aces.
It's his return that he needs to improve, del Potro said.
"Once again, I did not take my break point chances in this match so I will work on that," he said. "I miss a lot of break points. Against this kind of player, one break point is like match point or set point."
Zemlja was on the brink of defeat against Tipsarevic after losing the opening set and trailing the Serb 3-1 in the second. He broke back and got the match under control.
"Only in the third set I started thinking about winning," Zemlja said. "I got the feeling the match was in my hands but it was hard work and I had to stay focused until the last point."
Tipsarevic said he lost the match in the second set as he failed to build on his lead.
"I was too passive, I was waiting for Zemlja to give me the victory instead of going for it," the ninth-ranked Serb said. "I didn't stay focused until the end of the points."
In the third set, Tipsarevic got medical treatment for an injury to his right shoulder, which has caused him problems in the past.
"It was bothering me for almost two years but in the last year and a half I didn't feel it all," Tipsarevic said. "I hope it's not too serious."