Печать книги формата А5 на листах А4

отредактировано January 2012 Раздел: FastReport 4.0
Есть n страниц формата А5. Нужно их напечатать как книгу на листах А4.
Реально это сделать силами фастрепорта?
(силами драйвера принтера не предлагать т.к. все что известно о принтере - он поддерживает двустороннюю печать).

Комментарии

  • gpigpi
    отредактировано 12:26
    Вы можете пересортировать страницы превью после формирования отчёта (алгоритм для брошюры будет другой):
    var i, j: integer;
        page : TfrxReportPage;
    begin
         frxReport1.PrepareReport();
         j := frxReport1.PreviewPages.Count div 2;
         page := TfrxReportPage.Create(nil);
         for i := 0 to j - 2 do
           begin
             page.AssignAll(frxReport1.PreviewPages.Page[j + i]);
             frxReport1.PreviewPages.AddEmptyPage(i * 2 + 1);
             frxReport1.PreviewPages.ModifyPage(i * 2 + 1, page);
             frxReport1.PreviewPages.DeletePage(j + i + 1);
           end;
         page.Free;  
         frxReport1.ShowPreparedReport;
    end;
    
  • отредактировано 12:26
    Большое спасибо!
    Так и сделал.
    только переписал алгоритм "перемешивания".
    Может кому пригодится -
    для печати А5 книжкой на А4 получилось так:
         frxReport1.PrepareReport(True);
    
         while (frxReport1.PreviewPages.Count mod 4) > 0 do
         begin
            frxReport1.PreviewPages.AddPage(nil);
         end;
    
         j := frxReport1.PreviewPages.Count div 4; //количество листов А4
         page := TfrxReportPage.Create(nil);
    
         for i := 0 to j-1 do // цикл по листах а4
           for k := 1 to 2 do //цикл по разворотах
           begin
             if k = 1 then //для первой стороны
             begin
             page.AssignAll(frxReport1.PreviewPages.Page[j*4-1]);
             frxReport1.PreviewPages.AddEmptyPage(i*4);
             frxReport1.PreviewPages.ModifyPage(i*4, page);
             frxReport1.PreviewPages.DeletePage(j*4);
             end
             else  //для второй...
             begin
             page.AssignAll(frxReport1.PreviewPages.Page[j*4-1]);
             frxReport1.PreviewPages.AddEmptyPage(i*4+3);
             frxReport1.PreviewPages.ModifyPage  (i*4+3, page);
             frxReport1.PreviewPages.DeletePage(j*4);
             end;
           end;
         page.Free;
         frxReport1.ShowPreparedReport;
    
    к примеру для 8 страниц получается: <[8,1],[2,7]>,<[6,3],[4,5]>
    Только нужно не забывать ставить pmJoin для объединения листов.

    но все же было бы удобнее, если бы это встроили как метод самого репорта...

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.