RCMP said the crash happened about 8:20 a.m. on Highway 35 north of Grimshaw.
The bus was taking 14 students to classes at elementary and high schools in the Peace River area.
All of the kids, ages eight to 18, went to area hospitals with injuries ranging from minor scrapes and bruises to broken bones and a head wound, said RCMP.
"One of the children has been flown to an Edmonton-area hospital with serious but not-life-threatening injuries," said Cpl. Carol McKinley.
She said it appears the bus crossed the centre line into the path of the oncoming truck.
Grimshaw Fire Chief Lance Bushie said the students were tossed about as the front of the bus was crushed and the semi landed in a ditch. Both drivers were trapped in the vehicles and crews had to use equipment to free them.
Students managed to get out of the rear door of the bus on their own, he said.
The 36-year-old truck driver was also flown to hospital in Edmonton with serious but not life-threatening injuries.
The 60-year-old male bus driver died on the way to hospital.
Paul Bennett, superintendent of the Peace River School Division, which owns and operates the bus, said the driver had worked as a spare driver in 2013 and went on the substitute list again last month.
The man was trained and qualified and being considered for a full-time position that had recently opened up, said Bennett.
Bennett drove to the crash site shortly after the accident and spoke with some students who were keeping warm in their parents' vehicles, waiting to go home.
"They were obviously very shaken up. They had just been in a horrific crash."
Parents of the students were notified and counselling was to be provided to students and drivers who need it, Bennett said. The students are from Kennedy Elementary School, Grimshaw High School and Holy Family Catholic School — all in Grimshaw.
Betty Turpin, superintendent of the Holy Family Catholic School division, said four of her students were on the bus, including the one who was flown to Edmonton.
She said the student was "doing OK," and the others had already been released from hospital.
Counselling was also being provided to help students gear up for boarding buses Tuesday, she said.
Police said the stretch of highway where the crash happened has three lanes — one south and two north.
A preliminary investigation shows the truck was travelling in the outside northbound lane and the school bus was going south, then crossed the centre line.
RCMP wasn't able to say if weather was a factor.
"We do know that at the time there was a bit of a snow-sleet mix," said McKinley. "I can't say specifically what that would have done to the road conditions."
Grimshaw is about 600 kilometres northwest of Edmonton.