|
황준호 님이 쓰신 글 :
: 수고하십니다.
: 제가 만들고 있는것은 텍스트모드(ASCII값)로 만들어져있는 설계도면을 A4크기에 맞게 출력하는것입니다.
: 그런데 설계도면 파일의 화면크기가 A4를 넘습니다.
: 그래서 HP에 연락해봐서 프린터 제어코드(PCL 제어코드)를 받았습니다.
: 그러나 제어코드만으로는 축소가 조금밖에 안되는것 같습니다.
: 프로그램적으로 window상에서의 프린터 속성의 축소값을
: 지정할수있는방법은 없는지요...여러 고수분들의 조언부탁드립니다.
:
: dos 환경에서 개발할려고 하니까 많은 어려움이 있습니다. ^^;
Windows 환경에서 Win API를 이용한 인쇄는 아래와 같습니다.
1. EnumPrinters로 프린터 목록을 얻는다.
2. DocumentProperties로 프린터의 기능을 알아내거나 설정한다.
3. 원하는 프린터로 인쇄한다.
HDC CreateDC(
LPCTSTR lpszDriver, // pointer to string specifying driver name
LPCTSTR lpszDevice, // pointer to string specifying device name
LPCTSTR lpszOutput, // do not use; set to NULL
CONST DEVMODE *lpInitData // pointer to optional printer data
);
lpszDriver에는 "WINSPOOL"을 지정합니다.
int StartDoc(
HDC hdc, // handle of device context
CONST DOCINFO *lpdi // address of structure with file names
);
hdc에 쓰기 작업(즉,인쇄)
int EndDoc(
HDC hdc // handle to device context
);
DEVMODE의 구성원 중에는 dmScale이 있는데 확대/축소용입니다.
물론 해당 프린터가 이를 지원해야 가능합니다.
한가지 주의할 것은, 화면에 보이는 크기와 인쇄물이 크기는 서로 같지 않다는 것입니다.
이는 모니터의 DPI와 프린터의 DPI가 대부분 다르기 때문입니다.
DPI 가 클수록 결과물이 작습니다. 모니터에 크게 보이는 그림도 인쇄하면 작게 표시되는 것은 대부분 이 때문입니다.
이 둘간의 차이를 보정하려면 DEVMODE의 dmScale를 조정하든지 소스 자체를 확대/축소해서 프린터에 내보내면 됩니다. 그럼 이 둘의 DPI는 어떻게 아느냐 하면 GetDeviceCaps 함수를 통하여 가능합니다.
LOGPIXELSX, LOGPIXELSY에 적용되는 logical inch는 3cm입니다.
DeviceCapabilities로 얻을 수 있는 프린터의 대표적 정보에는 아래의 것들이 있습니다.
DC_COPIES
DC_PAPERS
DC_PAPERSIZE
DC_PAPERNAMES
DC_ENUMRESOLUTIONS
자세한 내용은 Win API 도움말을 참고하시기 바랍니다.
|