Print two A5 on a A4 paper
Posted: Wed Oct 19, 2016 3:59 pm
Hello,
I've made a little change in TPrintableRV to support what I've called a "TwinMode", the call to Printer.NewPage is replaced by a call to TwinPage
it works fine on the XPS Windows vitutal printer driver, but on my Samsung printer, the page is printed without any transformation.
Do you know why this doesn't work ?
The other solution is to lie about the printer specifications, but the code seems a little complex to deal with that. Can you point me to some key functions that I could play with ?
I've tried to change Printer orientation and scale down the device part of sad:TRVScreenAndDevice...it doesn't seems to change anything
Regards
I've made a little change in TPrintableRV to support what I've called a "TwinMode", the call to Printer.NewPage is replaced by a call to TwinPage
Code: Select all
procedure TPrintableRV.TwinPage(PageNo: Integer);
var
XFORM: tagXFORM;
begin
if not TPrintableRVData(RVdata).TwinMode then
begin
if PageNo > 1 then
Printer.NewPage;
Exit;
end;
if (PageNo > 1) and (PageNo and 1 = 1) then
Printer.NewPage;
with Printer.Canvas do
begin
if PageNo and 1 = 1 then
begin
if Printer.Orientation = poPortrait then
begin
MoveTo(0, Printer.PageHeight div 2);
LineTo(Printer.PageWidth, Printer.PageHeight div 2);
end else begin
MoveTo(Printer.PageWidth div 2, 0);
LineTo(Printer.PageWidth div 2, Printer.PageHeight);
end;
end;
// x' = x * eM11 + y * eM21 + eDx
// y' = x * eM12 + y * eM22 + eDy
XFORM.eM11 := 0;
XFORM.em12 := -(210/297); // A4 (210x297) -> A5 (148x210)
XFORM.em21 := +(210/297);
XFORM.em22 := 0;
if Printer.Orientation = poPortrait then
begin
XFORM.eDx := 0;
XFORM.eDy := Printer.PageHeight;
if PageNo and 1 = 0 then
begin
XFORM.eDy := XFORM.eDy / 2;
end;
end else begin
XFORM.eDx := 0;
XFORM.eDy := Printer.PageHeight;
if PageNo and 1 = 0 then
begin
XFORM.eDx := Printer.PageWidth / 2;
end;
end;
SetGraphicsMode(Handle, GM_ADVANCED);
SetWorldTransform(Handle, XFORM);
end;
end;
Do you know why this doesn't work ?
The other solution is to lie about the printer specifications, but the code seems a little complex to deal with that. Can you point me to some key functions that I could play with ?
I've tried to change Printer orientation and scale down the device part of sad:TRVScreenAndDevice...it doesn't seems to change anything
Regards