В wxWidgets для печати существует простой класс wxHtmlEasyPrinting. Пример: (думаю из него все ясно, остальное - читайте help по wxWidgets)
//преобразования типов и суммирование строк опущены местами, излагаю суть.
//печать таблицы, содержащей кириллицу
wxHtmlEasyPrinting* prn = new wxHtmlEasyPrinting(wxT("заголовок"));
prn->GetPrintData()->SetOrientation(wxLANDSCAPE);
prn->GetPageSetupData()->SetMarginTopLeft(wxPoint(10,10));
prn->GetPageSetupData()->SetMarginBottomRight(wxPoint(5,5));
//FOOTER GENERATION
wxString sFooter = "Краткое описание внизу каждой страницы";
prn->SetFooter(sFooter);
//BODY GENERATION
wxString sText;
sText = sText + "<head> \
<meta http-equiv='Content-Type' content='text/html; charset=Windows-1251'> \ //для поддержки кириллицы
</head>\
<body>";
sText = sText + "<table border=5 style='border-color:#ffffff' cellspacing=2 cellpadding=2><tr><td></td>";
for(int i=0;i<5;i++) {
string nmAttr = "имя столбца №"+i;
sText=sText+"<td>"+nmAttr+"</td>";
}
sText=sText+"</tr>";
for (int row = 0; row < 7; row++)
{
sText=sText+"<tr><td>"+row+"</td>"; //сделаем индексацию рядов слева
for (int col = 0; col < 5; col++)
{
sText=sText+"<td>" + "Значение ячейки " + row + ";" + col "</td>";
}
sText=sText+"</tr>";
}
sText=sText+"</table>";
sText=sText+"</body>";
prn->PreviewText(sText); //отобразить страницу предварительного просмотра