사용자 정의 용지 크기 지원
Important
최신 인쇄 플랫폼은 Windows에서 프린터와 통신하는 데 선호되는 수단입니다. 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하려면 MICROSOFT의 IPP 받은 편지함 클래스 드라이버와 PSA(인쇄 지원 앱)를 사용하는 것이 좋습니다.
자세한 내용은 최신 인쇄 플랫폼 및 인쇄 지원 앱 디자인 가이드를 참조하세요.
사용자 정의 용지 크기는 단일 인쇄 서버와 관련될 수 있으며 일반적으로 특정 애플리케이션에 맞게 사용자 지정됩니다. 따라서 사용자 지정된 용지 크기라고도 합니다. 시스템 관리자는 인쇄 폴더를 사용하여 사용자 지정된 용지 크기를 정의합니다. 프린터에서 사용자 지정된 용지 크기를 처리할 수 있는 경우 공급업체는 프린터의 GPD 파일을 사용하여 허용되는 크기 범위를 지정해야 합니다.
사용자 지정된 용지에 허용되는 크기 범위를 설명하는 두 가지 방법이 제공됩니다.
크기 범위를 명시적으로 지정할 수 있습니다.
프린터의 가장 큰 용지 크기를 기준으로 크기 범위를 지정할 수 있습니다.
용지 크기 범위를 명시적으로 지정
이 메서드를 사용하려면 GPD 파일의 PaperSize 기능에는 CUSTOMSIZE 인수가 있는 *Option 항목이 포함되어야 합니다. 이 항목에는 다음 옵션 특성이 포함되어야 합니다.
*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable? *CursorOrigin *명령 이러한 GPD 항목을 사용하여 다음과 같은 특성을 가진 프린터에 대해서만 사용자 지정된 용지 크기 설명을 만들 수 있습니다.
프린터는 사용자 지정된 용지 크기를 명시적으로 선택하는 명령을 지원합니다(일반적으로 커서 원점 이동).
커서 원점은 사용자 지정된 모든 용지 크기에 대해 용지의 왼쪽 위 모서리를 기준으로 고정된 상태로 유지됩니다. (일반적으로 가로 모드 인쇄나 중앙 공급 또는 오른쪽 공급 프린터의 경우는 그렇지 않습니다.)
위쪽 및 아래쪽 여백은 용지 크기와 독립적입니다.
용지 너비가 *MinLeftMargin 및 *MaxPrintableWidth에 지정된 값의 합계보다 작으면 오른쪽 여백이 없습니다. 즉, 프린터는 용지의 오른쪽 가장자리에 인쇄할 수 있습니다.
표준 변수 식이 사용되는 경우 일반적으로 PhysPaperLength 및 PhysPaperWidth 변수를 포함하여 명령 매개 변수(*명령 항목에 지정됨)를 인쇄 시 계산할 수 있습니다. 이러한 변수는 애플리케이션에서 지정한 대로 인쇄 작업에 요청된 실제 용지 크기를 나타냅니다.
프린터의 가장 큰 용지 크기를 기준으로 용지 크기 범위 지정
사용자 지정된 용지 크기 범위를 명시적으로 지정하는 데 필요한 특성을 지원하지 않는 프린터의 경우 프린터의 가장 큰 용지 크기를 기준으로 용지 크기를 지정하는 대체 방법이 제공됩니다.
이 메서드를 사용하려면 GPD 파일의 PaperSize 기능에는 CUSTOMSIZE 인수가 있는 *Option 항목이 포함되어야 합니다. 이 항목에는 다음 옵션 특성이 포함되어야 합니다.
*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command 프린터의 가장 큰 용지 크기를 기준으로 크기 범위를 지정할 때 다음 맞춤 규칙을 사용합니다.
왼쪽 공급 프린터의 경우 모든 용지 크기의 위쪽 및 왼쪽 여백을 정렬해야 합니다.
오른쪽 공급 프린터의 경우 모든 용지 크기의 위쪽 및 오른쪽 여백을 정렬해야 합니다.
가운데 공급 프린터의 경우 모든 용지 크기의 위쪽 여백과 위쪽 중심점을 맞춰야 합니다.
다음 단계가 포함됩니다.
프린터의 가장 큰 용지 크기에 대한 다음 정보를 확인합니다.
- 가장 큰 용지 크기를 선택하는 데 필요한 명령입니다.
- GPD 파일에 포함될 것처럼 가장 큰 용지 크기의 *PageDimensions, *CursorOrigin, *PrintableOrigin 및 *PrintableArea GPD 항목에 사용되는 값입니다. 그러나 이러한 항목을 파일에 실제로 배치하지는 않습니다.
프린터의 가장 큰 용지 크기를 기준으로 사용자 지정된 각 용지 크기에 대해 다음 정보를 지정하거나 계산하는 수식을 만듭니다.
- 각 용지 인쇄 가능 영역의 원본 및 크기입니다.
- 각 용지의 커서 원점입니다.
2단계의 수식은 다음 GPD 항목에 대한 값으로 지정된 CUSTOMSIZE 매개 변수 식이어야 합니다.
*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY
또한 CUSTOMSIZE 옵션에는 가장 큰 프린터 크기를 선택하는 명령을 지정하는 *명령 항목도 포함되어야 합니다. 이 명령은 모든 사용자 지정 용지 크기에 대해 전송되며 프린터가 실제 용지에 인쇄되는 인쇄 가능 영역 및 커서 원점 컨트롤에 지정된 수식은 크기에 관계없이 전송됩니다.
샘플 계산
간단한 예로 프린터에서 가장 큰 용지 크기의 여백과 같은 크기의 여백이 있는 사용자 지정된 용지 크기를 지원한다고 가정합니다. 관련 단계는 다음과 같습니다.
가장 큰 용지 크기의 *PageDimensions, *CursorOrigin, *PrintableOrigin 및 *PrintableArea 항목의 값을 결정합니다. (GPD 파일에 이러한 항목을 넣지 마세요.)
다음 의사 식에 설명된 대로 이러한 값으로 가장 큰 용지 크기의 각 여백 너비를 결정합니다.
LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidthTopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth
이러한 의사 식에서 .x 및 .y는 각 항목의 쌍 값의 가로 및 세로 구성 요소를 나타냅니다. 가로 인쇄의 경우 *PrintableArea 및 *PrintableOrigin에 가로 값을 사용합니다.
이제 표준이 아닌 용지 크기의 인쇄 가능 영역을 지정하거나 계산하는 의사 식(pseudoexpressions)을 만듭니다.
*CustPrintableOriginX: %d{LeftMarginWidth}
*CustPrintableOriginY: %d{TopMarginWidth}
*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}
*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}
두 표준 변수인 PhysPaperWidth 및 PhysPaperLength를 사용합니다. 런타임에 이러한 변수는 애플리케이션에서 요청한 실제 용지 크기의 길이와 너비를 포함합니다.
이러한 의사 식은 종이가 왼쪽 공급, 오른쪽 공급 또는 중앙 공급인지에 관계없이 유효합니다.
1단계에서 결정된 실제 값을 이러한 식에 삽입하여 GPD 항목을 만듭니다. 예제는 다음과 같습니다.
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
커서 원본 인덱스를 계산하는 의사 식(pseudoexpressions)을 만듭니다. 다음 의사 식에서 *CursorOrigin.x 및 *CursorOrigin.y는 가장 큰 용지 크기의 커서 원점에서 쌍 값의 가로 및 세로 구성 요소에 대한 자리 표시자입니다.
왼쪽 공급 프린터의 경우:
*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} 오른쪽 공급 프린터의 경우:
*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} 중앙 공급 프린터의 경우:
*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} 1단계에서 결정된 실제 값을 이러한 식에 삽입하여 GPD 항목을 만듭니다. 예를 들면 다음과 같습니다(가운데 공급 용지의 경우).
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
나머지 3개의 GPD 항목(*MinSize, *MaxSize 및 *MaxPrintableWidth)에 대한 값을 지정합니다. *MaxPrintableWidth에 지정된 값은 이 메서드에 실제로 사용되지 않지만 파서에 항목이 있어야 해당 값을 1로 설정할 수 있습니다.
예시
다음 예제 GPD 파일 세그먼트는 중앙 공급 프린터에 허용되는 사용자 지정 용지 크기를 설명합니다. 세로 모드의 경우 모든 사용자 지정 용지 크기에 대한 모든 여백의 크기는 300 마스터 단위(1/4인치)입니다. 가로 모드의 경우 위쪽 및 아래쪽 여백은 240개의 마스터 단위이고 왼쪽 및 오른쪽 여백은 200개의 마스터 단위입니다.
*Option: CUSTOMSIZE
{
*rcNameID: =USER_DEFINED_SIZE_DISPLAY
*MinSize: PAIR(4200,9000)
*MaxSize: PAIR(14040, 21240)
*MaxPrintableWidth: 14040
*MinLeftMargin: 100
*CenterPrintable?: FALSE
*PageProtectMem: 1692
*InsertBlock: =PaperConstraints
*switch: Orientation
{
*case: PORTRAIT
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e99F<1B>*p0x0Y<1B>*c0t8064x12528Y"
}
}
*case: LANDSCAPE_CC90
{
*switch: Option20
{
*% The 8100 rotates the landscape job 180 degrees if a stapler
*% is attached, so the staple can be placed in the top left
*% corner of the document. The printer always rotates the
*% landscape job, even if stapling is not selected.
*case: 3KStapler
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{PhysPaperLength}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
*case: MBM5S
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{PhysPaperLength}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
*default
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{21000}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
} *% switch Option20
} *% case LANDSCAPE_CC90
} *% switch Orientation
}