Q&A

  • 프린트(PRINT)시 폰트 지정을 어케하나요?
안녕하십니까...



제가 프린터로 삼보 스타일러스에 출력하려고 합니다.

그리고 출력루틴은 프린터의 제어코드를 사용하여 출력을 하려고 하는데요.

프린터에 있는 자체 폰트가 아닌 윈도우에 있는 폰트를 지정하여 출력을

하려고 합니다. 어떻게 해야되는 지 아시는 분이 계시면 꼬옥~ 답변주십시요..



부탁합니다요.



Printer.Canvas.TextOut으로 출력을 하였더니 잘 찍히는 부분이 많지만 간혹

출력된 글자가 조금 찌그러 들더군요.

그래서 그냥 여기저기를 뒤적이다 프린터를 제어하는 소스가 있길래 써볼려고

하는데..



WritePrinter(PrinterHandle, PChar(PrnStr), Length(PrnStr), PrintCount);

이놈입니다.



그런데 윈도우의 폰트를 지정하여 출력을 어떻게 해야되는지를 몰라서요...







1  COMMENTS
  • Profile
    김영대 1999.10.22 22:41
    모영찬 wrote:

    > 안녕하십니까...

    >

    > 제가 프린터로 삼보 스타일러스에 출력하려고 합니다.

    > 그리고 출력루틴은 프린터의 제어코드를 사용하여 출력을 하려고 하는데요.

    > 프린터에 있는 자체 폰트가 아닌 윈도우에 있는 폰트를 지정하여 출력을

    > 하려고 합니다. 어떻게 해야되는 지 아시는 분이 계시면 꼬옥~ 답변주십시요..

    >

    > 부탁합니다요.

    >

    > Printer.Canvas.TextOut으로 출력을 하였더니 잘 찍히는 부분이 많지만 간혹

    > 출력된 글자가 조금 찌그러 들더군요.

    > 그래서 그냥 여기저기를 뒤적이다 프린터를 제어하는 소스가 있길래 써볼려고

    > 하는데..

    >

    > WritePrinter(PrinterHandle, PChar(PrnStr), Length(PrnStr), PrintCount);

    > 이놈입니다.

    >

    > 그런데 윈도우의 폰트를 지정하여 출력을 어떻게 해야되는지를 몰라서요...



    Printer 오브젝트를 쓰지 않고 직접 프린터로 출력할때의

    폰트제어에 대한 자료가 없군요

    아래는 제가 가지고 있던 건데 역시나 없네요



    procedure PrintFile(const sFileName: string);

    const

    BufSize = 16384;

    type

    TDoc_Info_1 = record

    pDocName: pChar;

    pOutputFile: pChar;

    pDataType: pChar;

    end;

    var

    Count, BytesWritten: integer;

    hPrinter: THandle;

    Device : array[0..255] of char;

    Driver : array[0..255] of char;

    Port : array[0..255] of char;

    hDeviceMode: THandle;

    DocInfo: TDoc_Info_1;

    f: file;

    Buffer: Pointer;

    begin

    Printer.PrinterIndex := -1;

    Printer.GetPrinter(Device, Driver, Port, hDeviceMode);

    if not WinSpool.OpenPrinter(@Device, hPrinter, nil) then

    exit;

    DocInfo.pDocName := 'MyDocument';

    DocInfo.pOutputFile := nil;

    DocInfo.pDatatype := 'RAW';

    if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then

    begin

    WinSpool.ClosePrinter(hPrinter);

    exit;

    end;

    if not StartPagePrinter(hPrinter) then

    begin

    EndDocPrinter(hPrinter);

    WinSpool.ClosePrinter(hPrinter);

    exit;

    end;



    System.Assign(f, sFileName);

    try

    Reset(f, 1);

    GetMem(Buffer, BufSize);

    while not eof(f) do

    begin

    Blockread(f, Buffer^, BufSize, Count);

    if Count > 0 then

    begin

    if not WritePrinter(hPrinter, Buffer, Count, BytesWritten) then

    begin

    EndPagePrinter(hPrinter);

    EndDocPrinter(hPrinter);

    WinSpool.ClosePrinter(hPrinter);

    FreeMem(Buffer, BufSize);

    exit;

    end;

    end;

    end;

    FreeMem(Buffer, BufSize);

    EndDocPrinter(hPrinter);

    WinSpool.ClosePrinter(hPrinter);

    finally

    System.Closefile(f);

    end;

    end;