Having overcome Juan Martin del Potro in a gripping quarter-final, Djokovic had to get through another epic encounter in the last four of the ATP Masters 1000 event, the world No.1 prevailing 6-3 6-7 (2-7) 6-3.
After cruising in the first set, 15-time grand slam champion Djokovic, who is aiming for his fifth Rome title and third ATP triumph of 2019, was pegged back in the second, Schwartzman coming out on top in a tie-break.
But Schwartzman's resistance was finally ended when Djokovic's quality came to the fore in the final set, and world No.2 Nadal, who the Serbian beat in January's Australian Open final, awaits on Monday (AEST).
With eight-time winner Nadal breezing past Stefanos Tsitsipas 6-3 6-4 to claim the first final spot, Djokovic started strongly, despatching some typically composed shots to wrap up the first set, capping it off with a wonderful drop-shot in the final game after a terrific rally.
Schwartzman, buoyed by his 6-4 6-2 victory over Kei Nishikori in the last eight, responded well, breaking serve twice to force, and subsequently win, the tie-break.
However, that second-set resilience took too much out of Schwartzman's sails, and Djokovic broke serve when the Argentinian sent a short hit into the net after a brilliant cross-court effort from the Serb.
After an awkward moment when a stray shot hit a ball boy, Djokovic – through to back-to-back ATP Masters finals – made sure to make no further mistakes, breaking serve once more before forcing another error from his opponent to secure a hard-fought victory.