..проект готов, приступаем к печати. Документы нужно разослать по принтерам.
Самый минимум: большие - на плоттер, маленькие - на ближайший принтер (прога знает на какие, и какие нужны форматы бумаги).
Printer.PrinterIndex:=3; //ставим принтер, скорее всего работает, не проверял, но видел работу в демках
Printer.Orientation:=poLandscape; //проверено - работает
Printer.? PaperSize, PaperName ? -
как установить требуемый размер бумаги?
на крайний случай выбрать и установить из числа предопределённых форматов?
или нужно каждый раз выполнять дополнительно рутинную установку штатными диалогами?
распечатка простого примера: 1-Титульный А3ландшафт, 2-записка А4портрет, 3-отчет измерений А4л, 4-каталог А4п, 5-схема А4-А2пл, 6-план А4-А0лп, 7-акт А4п
7раз менять - 1 раз обязательно вручную, и это если схема и план А4.
Особенно глупо это выглядит при печати в pdf.
Есть мысль дважды установить на клиентском компе принтер с разными дефолтными настройками бумаги например EPSON WF-7515 А4 и EPSON WF-7515 А3....
Как в принтере "поменять" бумагу?
Модератор: Модераторы
1 часть ответа - Установка предопределённых форматов бумаги Printer.PapSize.PaperName:=PaperName; - работает, проверено!
фрагмент исходников для "ленивых"..
Добавлено спустя 3 минуты 8 секунд:
2 часть ответа - Установка любого размера бумаги (особенно бывает нужен для плоттеров с рулонной подачей)
https://ru.stackoverflow.com/questions/880293/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE-%D0%B2-%D0%BF%D1%80%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B5-%D0%BF%D0%BE%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80-%D0%B1%D1%83%D0%BC%D0%B0%D0%B3%D0%B8
сам пока не проверил, не горит. Проверю-напишу
фрагмент исходников для "ленивых"..
Код: Выделить всё
function PaperSet(Prn1: TPrinter; PaperInd: integer): string;
//устанавливает бумагу в принтер и возвращает её название
var MyPaperSize, p2:TMapPt;// TMapPt = record : x, y, z:double;
i, j:integer;
PapSize: TPaperSize;
PrintCanv:TPrinterCanvas;
bol:boolean;
s:string;
begin
result:='';
i:=abs(PaperInd)-1;
if i<0 then exit;
if Prn1=nil then Prn1:=Printer;
//PaperElems - массив записей с размерами и названиями нужных программе форматов а4, а3, ...
MyPaperSize:=PaperElems[i].Size1; //размер нужного программе формата в метрах
PapSize:=Printer.PaperSize;
bol:=false;
if Printer.Orientation=poLandscape then
begin
Printer.Orientation:=poPortrait;//штатная ориентация
bol:=true;
end;
for j:=0 to PapSize.SupportedPapers.Count-1 do // список форматов бумаги текущего принтера
begin
s:=PapSize.SupportedPapers.Strings[j];
PapSize.PaperName:=s;//!!!!!устанавливаем формат!!!!!
PrintCanv:=TPrinterCanvas(Printer.Canvas);//берём пощупать размеры
//в Printer.PageWidth и Printer.PageHeight размер в пикселях без полей
P2.x:=(Printer.PageWidth+PrintCanv.LeftMargin+PrintCanv.RightMargin)/Printer.XDPI*0.0254;//дюймы*0.0254=метры
P2.y:=(Printer.PageHeight+PrintCanv.TopMargin+PrintCanv.BottomMargin)/Printer.XDPI*0.0254;
if LineLength(MyPaperSize, p2)<MapEpsilon*0.1 then//длина линии (разность размеров форматов) < 1mm
begin//наш формат с заданной точностью
result:=s;
if bol then
Printer.Orientation:=poLandscape;
exit;
end;
end;
end;
Добавлено спустя 3 минуты 8 секунд:
2 часть ответа - Установка любого размера бумаги (особенно бывает нужен для плоттеров с рулонной подачей)
https://ru.stackoverflow.com/questions/880293/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE-%D0%B2-%D0%BF%D1%80%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B5-%D0%BF%D0%BE%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80-%D0%B1%D1%83%D0%BC%D0%B0%D0%B3%D0%B8
сам пока не проверил, не горит. Проверю-напишу
