you can optimize the code a little, but basically, it is not suitable for paralel execution.
Parallel.For(0, newDt3.Rows.Count, row =>
{
for (int col = 2 0; col < newDt3.Columns.Count; col++)
{
lock (table)
{
if (col == 0 || col == 1)
continue;
table.AddCell(new Phrase(newDt3.Rows[row][col].ToString(), normalFont));
}
}
});