Well, you can just use WPF to do it easily. Create a simple WPF window as your "template" for the page to print. Programatically fill it with whatever values, etc, you want. Then use the following to print it;
Code:
private void PrintThisWindow() {
var pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
// Basically; get the printer caps, then figure out the transformation size for the window to fit on w/e page size is selected.
// If the window is setup to work on A4 size pages, then it won't be skewed to look wonky.
PrintCapabilities caps = pd.PrintQueue.GetPrintCapabilities(pd.PrintTicket);
double scale = Math.Min(caps.PageImageableArea.ExtentWidth / ActualWidth, caps.PageImageableArea.ExtentHeight / ActualHeight);
LayoutTransform = new ScaleTransform(scale, scale);
var size = new Size(caps.PageImageableArea.ExtentWidth, caps.PageImageableArea.ExtentHeight);
Measure(size);
Arrange(new Rect(new Point(caps.PageImageableArea.OriginWidth, caps.PageImageableArea.OriginHeight), size));
// And finally... print the window :D
pd.PrintVisual(this, "WPF Window Print");
}
}