Aracılığıyla paylaş


JavaScript kısıtlamaları

Önemli

Modern yazdırma platformu, Windows'un yazıcılarla iletişim kurmak için tercih ettiği araçlardır. Yazıcı cihazı geliştirme için Windows 10 ve 11'deki yazdırma deneyimini özelleştirmek için Yazdırma Desteği Uygulamaları (PSA) ile birlikte Microsoft'un IPP gelen kutusu sınıf sürücüsünü kullanmanızı öneririz.

Daha fazla bilgi için bkz. Yazdırma Desteği Uygulaması v1 ve v2 tasarım kılavuzu.

v4 yazıcı sürücüsü modeli, v3 IPrintOemPrintTicketProvider arabiriminden türetilen genişletilmiş kısıtlama ve PrintTicket işleme için yeni bir modeli destekler.

Ancak, v4 yazıcı sürücüleri JavaScript kısıtlamaları olarak adlandırılan API'leri uygulamak için derlenmiş bir yapılandırma eklentisi kullanmak yerine JavaScript kullanır ve yazıcı sürücüsü gerektiğinde bunlardan birini veya daha fazlasını uygulayabilir. Daha fazla bilgi için bu konunun sonundaki JavaScript Kısıtlama API'leri bölümündeki işlevlere bakın.

JavaScript kısıtlamaları PrintCapabilities'i artırmak, PrintTicket'leri doğrulamak ve PrintTicket'in DEVMODE'a dönüştürülmesiyle başa çıkabilmek için kullanılabilir. Ancak JavaScript kısıtlamalarının birkaç sınırlaması vardır. Ana sınırlamaların listesi aşağıdadır:

  • CompletePrintCapabilities kullanılarak eklenen özellikler ve seçeneklerin yanı sıra validatePrintTicket'te belirtilen kısıtlamalar masaüstü yazıcı tercihleri penceresinde gösterilmez.

  • CompletePrintCapabilities kullanılarak eklenen özellikler ve seçenekler genel DEVMODE'da kalıcı olmaz.

  • JavaScript kısıtlamaları, eklenen özellikleri ve seçenekleri veya parametreleri yerelleştirmek için kaynak dll'lerden dil kaynaklarına erişemez.

Bu nedenle, JavaScript kısıtlamalarının yalnızca uygun yerlerde kullanılmasını öneririz. Özellikler ve seçenekler mümkün olduğunda GPD veya PPD dosyalarında belirtilmeli ve JavaScript'te yalnızca karmaşık kısıtlamalar gösterilmelidir.

JavaScript dosyalarında hata ayıklama

JavaScript dosyalarının temel sözdizimsel doğrulaması, JavaScript dosyasını Windows tabanlı Script Host'ta açarak desteklenir. Bunu yapmak için JavaScript dosyasına sağ tıklayın ve Birlikte Aç'ı seçin ve listeden Windows Tabanlı Komut Dosyası Barındırıcısı girişini seçin. Hata atılmazsa JavaScript söz dizimsel olarak geçerli olur. Aksi takdirde, aşağıdaki ekran görüntüsünde gösterildiği gibi sorunun satır numarasını gösterir.

JavaScript sözdizimi hatası iletişim kutusu.

Genel kullanıma açık JavaScript doğrulama araçları, JavaScript dosyalarının stilini değerlendirmede yardımcı olarak da değerli olabilir.

Etkileşimli hata ayıklama, aşağıdaki kayıt defteri anahtarı oluşturularak etkinleştirilebilir:

Anahtar Adı: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

Değer Adı: JavaScriptHataAyıklamayıEtkinleştir

Türü: DWORD

Değeri: 1

Ancak ,PrintConfig.dll sık sık yüklenip kaldırıldığından, yazdıran bir uygulamada hata ayıklama önerilen bir test/hata ayıklama stratejisi değildir. Bunun yerine Microsoft, üreticilerin şu genel API'leri kullanarak JavaScript kısıtlamaları için ilgili giriş noktalarını çağıran bir test uygulaması oluşturmalarını önerir: PTGetPrintCapabilities, PTConvertDevModeToPrintTicket, PTConvertPrintTicketToDevMode ve PTMergeAndValidatePrintTicket.

Test uygulaması tek başına hata ayıklamayı etkinleştirmek için yeterlidir, ancak sürücünün tamamının PrintTicket, PrintCapabilities ve kısıtlamaları beklendiği gibi işlemesini sağlamak için birim testleri eklemek de yararlıdır. Visual Studio'da Birim testleri oluşturma hakkında daha fazla bilgi için aşağıdaki konuya bakın:

Visual Studio Team Test ile Birim Testi kılavuzu

Önceki metinde gösterilen kayıt defteri anahtarı oluşturulduktan ve barındırma işlemi yeniden başlatıldıktan sonra JavaScript kaynak dosyanızda hata ayıklayabilirsiniz.

Kaynak dosya ayrıştırılamazsa hata ayıklayıcının çağrılmadığını ve hata ayıklama ortamı başarısız olmuş gibi görüneceğini unutmayın. Kaynak dosya ayrıştırılamazsa, nasıl devam edileceği hakkında daha fazla bilgi için bkz. Windows Script Host.

Hata yoksa ve kaynak dosyanız başarıyla ayrıştırılırsa kaynak dosyanızda aşağıdaki gibi hata ayıklayın:

  1. Test makinesine Microsoft Visual Studio 2012 veya üzerini yükleme

  2. Kısıtlamaları JavaScript kodu olan sürücüyü kullanarak yazdırma kuyruğu oluşturma

  3. Bu yazdırma sırasını varsayılan olarak ayarlayın.

  4. Test uygulamanızı veya yazdıran bir uygulamayı başlatın ve JavaScript kısıtlamalarının çağrılmasına neden olacak bir senaryo başlatın. Uygulamanın JavaScript kısıtlamalarına girebilmesi için PrintTicket/PrintCapabilities API'lerini çağırması gerekir; Not Defteri gibi eski uygulamalar bu API'leri çağırmaz, ancak XPS Görüntüleyicisi uygulaması çağırır. Senaryolar daha kolay yalıtılıp yeniden üretilebileceği için Microsoft burada bir test uygulaması kullanmanızı önerir.

  5. Şu anda "Visual Studio Just-In-Time Debugger" açılır ve "Uygulamanızda< işlenmeyen bir özel durum oluştu" ifadesi görüntülenir >

  6. Visual Studio 2012 veya sonraki bir sürümün yeni bir örneğini başlatma

  7. Hata Ayıklama'yı ve ardından İşleme Bağlan'ı seçin

  8. İşleme Ekleme iletişim kutusunda, Eklenecek: öğesinin Betik kodu olarak ayarlandığından emin olun

  9. Şimdi test uygulamasını veya uygulama yazdırmayı seçin ve son olarak Ekle'yi seçin

  10. "Tümünü Kes" seçeneğine tıklayın

  11. Şimdi "Visual Studio YalnızcaIn-Time Hata Ayıklayıcısı" iletişim kutusuna dönün ve "Hayır" seçeneğine tıklayın

  12. Visual Studio, geçerli test tarafından çağrılan konumda hata ayıklayıcıya girer. Artık kodun hatalarını normal şekilde ayıklayabilirsiniz.

JavaScript kısıtlama API'leri

Bu bölüm, JavaScript kısıtlama dosyasında kullanılmak üzere API giriş noktaları işlevi görecek işlevleri belirtir. İşlevler şunlardır:

  • validatePrintTicket

  • tamYazdırmaYetenekleri

  • convertDevModeToPrintTicket

  • convertPrintTicketToDevMode

validatePrintTicket işlevi

Bu API, PrintTicket nesnesinin belirli bir yazıcı için geçerli olduğunu doğrulamak için çağrılır. Bu, işlevinde IPrintOemPrintTicketProvider::ValidatePrintTicket API'sine benzer.

validatePrintTicket söz dizimi

function validatePrintTicket(printTicket, scriptContext)

validatePrintTicket parametreleri

validatePrintTicket dönüş değeri

Dönüş değeri Açıklama
0 printTicket parametresinin geçersiz olduğunu ve düzeltilemediğini gösterir. E_PRINTTICKET_FORMAT eşdeğerdir.
1 printTicket parametresinin bu yazıcı için geçerli bir PrintTicket olduğunu gösterir. S_PT_NO_CONFLICT eşdeğerdir.
2 printTicket parametresinin geçerli olması için değiştirildiğini gösterir. S_PT_CONFLICT_RESOLVED eşdeğerdir.

completePrintCapabilities işlevi

Bu API, PrintCapabilities nesnesinin değiştirilmesine izin vermek için çağrılır. Bu, yalnızca fotoğraf kağıdında desteklenen kenarlıksız baskı gibi koşullu özellikler veya bir GPD ya da PPD dosyası tarafından oluşturulamayan iç içe özellik tanımları gibi özellikleri temsil etmek için kullanılmalıdır. Bu, işlevinde IPrintOemPrintTicketProvider::CompletePrintCapabilities API'sine benzer.

completePrintCapabilities sözdizimi

function completePrintCapabilities(printTicket, scriptContext, printCapabilities)

completePrintCapabilities parametreleri

completePrintCapabilities dönüş değeri

Yok.

convertDevModeToPrintTicket işlevi

Bu API, DEVMODE özellik paketindeki değerleri PrintTicket'e dönüştürmek için çağrılır. Bu, işlevinde IPrintOemPrintTicketProvider::ConvertDevModeToPrintTicket API'sine benzer, ancak bu uygulama DEVMODE'nin özel bölümünü bir IPrinterScriptablePropertyBag nesnesine kapsüller ve DEVMODE'nin genel bölümüne erişime izin vermez.

convertDevModeToPrintTicket Sözdizimi

function convertDevModeToPrintTicket(devModeProperties, scriptContext, printTicket)

convertDevModeToPrintTicket parametreleri

  • devModeProperties

[in] DEVMODE Özellik Paketini temsil eden IPrinterScriptablePropertyBag nesnesi.

  • scriptContext

    [in] Sürücü özellik paketine, kuyruk özellik paketine ve kullanıcı özellik paketine erişim sağlayan IPrinterScriptContext nesnesi.

  • printTicket

    [in][out] PrintTicket'i temsil eden IPrintSchemaTicket nesnesi.

convertDevModeToPrintTicket dönüş değeri

Yok.

convertPrintTicketToDevMode işlevi

Bu API, PrintTicket'ten DEVMODE özellik paketine değerleri dönüştürmek için çağrılır. Bu, işlevsel olarak IPrintOemPrintTicketProvider::ConvertPrintTicketToDevMode API'sine benzer, ancak bu uygulama DEVMODE'nin özel bölümünü bir IPrinterScriptablePropertyBag nesnesine kapsüller ve DEVMODE'nin genel bölümüne erişime izin vermez.

convertPrintTicketToDevMode söz dizimi

function convertPrintTicketToDevMode(printTicket, scriptContext, devModeProperties)

convertPrintTicketToDevMode parametreleri

  • printTicket

    [in] Dönüştürülecek PrintTicket'i temsil eden IPrintSchemaTicket nesnesi.

  • scriptContext

    [in] Sürücü özellik paketine, kuyruk özellik paketine ve kullanıcı özellik paketine erişim sağlayan IPrinterScriptContext nesnesi.

  • devModeProperties

    [in][out] DEVMODE Özellik Paketini temsil eden IPrinterScriptablePropertyBag nesnesi.

convertPrintTicketToDevMode dönüş değeri

Yok.

Kısıtlama en iyi yöntemleri

Windows 8 yazdırma iletişim kutusu ve yazdırma tercihleri deneyimi, Şema Anahtar Sözcüklerini Yazdır ad alanının yalnızca bir alt kümesini destekler. Sonuç olarak Microsoft, Windows 8 yazdırma iletişim kutusunda desteklenen özellikler veya yazdırma tercihleri kullanıcı arabirimi ve bu kullanıcı arabiriminde olmayan özellikler arasında kısıtlamalar kullanılmasını önermez, çünkü kullanıcılar bu kısıtlamaları çözme fırsatına sahip olmayacaktır.

Örneğin, Fotoğraf adlı PageMediaType seçeneği yalnızca 1200dpi PageResolution değeriyle çalışacak şekilde kısıtlanmışsa, kullanıcılar hiçbir zaman Fotoğraf medya türünü seçemez. Böyle durumlarda, kullanıcının amacı ile fotoğraf medyasının eşleşmesini sağlamak ve bunun gerçekleşmesi için gereken ayarları yapmak daha iyidir. Bu ayarlamalar JavaScript kısıtlama kodunda yapılabilir.

Bir sürücü JavaScript kısıtlamalarını kullanmazsa, bir dosyanın sağlanması gerekmez. Sürücü giriş noktalarının yalnızca bir alt kümesi için JavaScript kısıtlamaları kullanıyorsa (örneğin, ValidatePrintTicket), diğer giriş noktaları JavaScript dosyasından tamamen atlanmalıdır.