Bagikan melalui


Mendukung ukuran kertas yang ditentukan pengguna

Penting

Platform cetak modern adalah sarana komunikasi pilihan Windows dengan printer. Kami menyarankan agar Anda menggunakan driver kelas kotak masuk IPP Microsoft, bersama dengan Print Support Apps (PSA), untuk menyesuaikan pengalaman cetak di Windows 10 dan 11 untuk pengembangan perangkat printer.

Untuk informasi selengkapnya, lihat panduan desain aplikasi dukungan Print.

Ukuran kertas yang ditentukan pengguna dapat khusus untuk satu server cetak dan biasanya disesuaikan untuk aplikasi tertentu. Oleh karena itu mereka sering disebut ukuran kertas yang disesuaikan. Administrator sistem menggunakan folder cetak untuk menentukan ukuran kertas yang disesuaikan. Jika printer dapat menangani ukuran kertas yang disesuaikan, vendor harus menggunakan file GPD printer untuk menentukan rentang ukuran yang dapat diterima.

Dua metode disediakan untuk menjelaskan rentang ukuran yang dapat diterima untuk kertas yang disesuaikan:

  • Anda dapat menentukan rentang ukuran secara eksplisit.

  • Anda dapat menentukan rentang ukuran relatif terhadap ukuran kertas terbesar printer.

Menentukan Rentang Ukuran Kertas Secara Eksplisit

Untuk menggunakan metode ini, fitur PaperSize file GPD Anda harus menyertakan entri *Opsi dengan argumen CUSTOMSIZE. Entri ini harus berisi atribut opsi berikut:

*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable? *CursorOrigin *Perintah Anda dapat menggunakan entri GPD ini untuk membuat deskripsi ukuran kertas yang disesuaikan hanya untuk printer yang memiliki karakteristik berikut:

  • Printer mendukung perintah untuk memilih ukuran kertas yang disesuaikan secara eksplisit (biasanya dengan memindahkan asal kursor).

  • Asal kursor tetap, relatif terhadap sudut kiri atas kertas, untuk semua ukuran kertas yang disesuaikan. (Ini biasanya tidak berlaku untuk pencetakan mode lanskap, atau untuk printer yang diberi makan tengah atau fed kanan.)

  • Margin atas dan bawah tidak bergantung pada ukuran kertas.

  • Jika lebar kertas kurang dari jumlah nilai yang ditentukan untuk *MinLeftMargin dan *MaxPrintableWidth, tidak ada margin kanan. Artinya, pencetak dapat mencetak ke tepi kanan kertas.

Parameter perintah (ditentukan dalam *Entri perintah ) dapat dihitung pada waktu cetak jika ekspresi variabel standar digunakan, biasanya termasuk variabel PhysPaperLength dan PhysPaperWidth. Variabel ini mewakili ukuran kertas aktual yang diminta untuk pekerjaan cetak, seperti yang ditentukan oleh aplikasi.

Menentukan Rentang Ukuran Kertas Relatif terhadap Ukuran Kertas Terbesar Printer

Untuk printer yang tidak mendukung karakteristik yang diperlukan untuk menentukan rentang ukuran kertas yang disesuaikan secara eksplisit, metode alternatif disediakan, yang menentukan ukuran kertas relatif terhadap ukuran kertas terbesar printer.

Untuk menggunakan metode ini, fitur PaperSize file GPD Anda harus menyertakan entri *Opsi dengan argumen CUSTOMSIZE. Entri ini harus berisi atribut opsi berikut:

*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command Saat menentukan rentang ukuran yang relatif terhadap ukuran kertas terbesar printer, gunakan aturan perataan berikut:

  • Untuk printer umpan kiri, margin atas dan kiri dari semua ukuran kertas harus diratakan.

  • Untuk printer umpan kanan, margin atas dan kanan dari semua ukuran kertas harus diratakan.

  • Untuk printer umpan tengah, margin atas dan titik tengah atas dari semua ukuran kertas harus diratakan.

Langkah-langkah berikut terlibat:

  1. Tentukan informasi berikut untuk ukuran kertas terbesar printer:

    • Perintah yang diperlukan untuk memilih ukuran kertas terbesar.
    • Nilai yang akan digunakan untuk ukuran kertas terbesar *PageDimensions, *CursorOrigin, *PrintableOrigin, dan *Entri GPD PrintableArea, seolah-olah mereka akan disertakan dalam file GPD. Namun, Anda tidak akan benar-benar menempatkan entri ini dalam file.
  2. Buat rumus yang menentukan atau menghitung informasi berikut untuk setiap ukuran kertas yang disesuaikan, relatif terhadap ukuran kertas terbesar printer.

    • Asal dan ukuran area cetak setiap kertas.
    • Asal kursor untuk setiap kertas.

Rumus untuk langkah 2 harus berupa ekspresi parameter CUSTOMSIZE, yang ditentukan sebagai nilai untuk entri GPD berikut:

*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginy *CustPrintableSizeX *CustPrintableSizeY

Opsi CUSTOMSIZE juga harus menyertakan entri *Perintah yang menentukan perintah yang memilih ukuran printer terbesar. Perintah ini dikirim untuk semua ukuran kertas kustom, dan rumus yang ditentukan untuk area yang dapat dicetak dan kontrol asal kursor tempat pencetak mencetak pada kertas aktual, apa pun ukurannya.

Sampel perhitungan

Sebagai contoh sederhana, asumsikan printer Anda mendukung ukuran kertas yang disesuaikan yang memiliki margin dengan ukuran yang sama dengan margin ukuran kertas terbesar. Langkah-langkah yang terlibat adalah:

Tentukan nilai untuk ukuran kertas terbesar *PageDimensions, *CursorOrigin, *PrintableOrigin, dan *PrintableArea . (Jangan letakkan entri ini dalam file GPD.)

Tentukan lebar masing-masing margin ukuran kertas terbesar dalam hal nilai-nilai ini, seperti yang diilustrasikan dalam pseudoexpressions berikut:

LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidthTopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth

Dalam pseudoexpressions ini, .x dan .y mewakili komponen horizontal dan vertikal dari setiap nilai pasangan entri. Untuk pencetakan lanskap, gunakan nilai lanskap untuk *PrintableArea dan *PrintableOrigin.

Sekarang buat pseudoexpressions yang menentukan atau menghitung area yang dapat dicetak untuk ukuran kertas nonstandar.

*CustPrintableOriginX: %d{LeftMarginWidth}

*CustPrintableOriginY: %d{TopMarginWidth}

*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}

*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}

Perhatikan penggunaan dua variabel standar, PhysPaperWidth dan PhysPaperLength. Pada waktu proses, variabel ini berisi panjang dan lebar ukuran kertas aktual yang telah diminta oleh aplikasi.

Perhatikan bahwa pseudoexpressions ini valid apakah kertas diberi makan kiri, diumpankan kanan, atau diumpankan ke tengah.

Sisipkan nilai aktual, ditentukan di langkah 1, ke dalam ekspresi ini untuk membuat entri GPD. Contohnya mungkin:

*CustPrintableOriginX:  %d{300}
*CustPrintableOriginY:  %d{300}
*CustPrintableSizeX:   %d{PhysPaperWidth-600}
*CustPrintableSizeY:  %d{PhysPaperLength-600}

Buat pseudoexpressions yang menghitung indeks asal kursor. Dalam pseudoexpressions berikut, *CursorOrigin.x dan *CursorOrigin.y adalah tempat penampung untuk komponen horizontal dan vertikal dari nilai pasangan untuk asal kursor ukuran kertas terbesar.

Untuk printer left-fed:

*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} Untuk printer right-fed:

*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} Untuk printer center-fed:

*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} Sisipkan nilai aktual, ditentukan di langkah 1, ke dalam ekspresi ini untuk membuat entri GPD. Contohnya mungkin (untuk kertas center-fed):

*CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY:   %d{180}

Tentukan nilai untuk tiga entri GPD yang tersisa--*MinSize, *MaxSize, dan *MaxPrintableWidth. Nilai yang ditentukan untuk *MaxPrintableWidth sebenarnya tidak digunakan untuk metode ini, tetapi pengurai memerlukan entri untuk ada, sehingga nilainya dapat diatur ke 1.

Contoh

Contoh segmen file GPD berikut menjelaskan ukuran kertas yang disesuaikan yang dapat diterima untuk printer center-fed. Untuk mode potret, semua margin untuk semua ukuran kertas kustom berukuran 300 unit master (1/4 inci). Untuk mode lanskap, margin atas dan bawah adalah 240 unit master sedangkan margin kiri dan kanan adalah 200 unit master.

*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
}