Хотя использование инструмента отчетности - хорошая идея, если вы действительно хотите сделать это самостоятельно, вы можете это сделать. Я делаю это для печати на заказной бумаге в нашем приложении для лицензирования. Ключ заключается в том, чтобы узнать размер вашей бумаги и рассчитать ее, используя свойства принтера PageHeight и PageWidth. Для бумаги формата А4 я решил использовать 297 мм на 210 мм, и из этого я смог рассчитать, где я хочу, чтобы вещи были. Расчет сделан так:
nStartPos := 210-141;
nUserColX := muldiv(localPrinter.PageWidth, 187, 297);
nUserColY := muldiv(localPrinter.PageHeight, nStartPos, 210);
Переменная nStartPos используется для запуска в определенном месте, а затем nUserColY используется для перемещения вниз по строке, как показано здесь:
nUserColY := nUserColY - localPrinter.canvas.font.height - (localPrinter.canvas.font.height div 8);
Это позволяет более чем одной строке за раз уместиться.
Это не завершено, но должно стать хорошим началом для пользовательской печати.