chrome.printing

Açıklama

Yazdırma işlerini Chromebook'ta yüklü yazıcılara göndermek için chrome.printing API'sini kullanın.

İzinler

printing

Kullanılabilirlik

Yalnızca Chrome 81 ve üstü sürümler Yalnızca ChromeOS

Tüm chrome.printing yöntemleri ve etkinlikleri, uzantı manifestinde "printing" iznini beyan etmenizi gerektirir. Örneğin:

{
  "name": "My extension",
  ...
  "permissions": [
    "printing"
  ],
  ...
}

Örnekler

Aşağıdaki örnekler, yazdırma ad alanındaki yöntemlerin her birinin kullanımını göstermektedir. Bu kod, extensions-samples GitHub deposundaki api-samples/printing kodundan veya buna dayalı olarak kopyalanır.

cancelJob()

Bu örnekte, jobStatus PENDING veya IN_PROGRESS olmadığında "iptal" düğmesini gizlemek için onJobStatusChanged işleyici kullanılmaktadır. Bazı ağlarda veya bir Chromebook doğrudan yazıcıya bağlandığında bu durumların, iptal düğmesinin çok hızlı bir şekilde geçirilip çağrılabilecek kadar uzun süre görünmeyebileceğini unutmayın. Bu, son derece basitleştirilmiş yazdırma örneğidir.

chrome.printing.onJobStatusChanged.addListener((jobId, status) => {
  const cancelButton = document.getElementById("cancelButton");
  cancelButton.addEventListener('click', () => {
    chrome.printing.cancelJob(jobId).then((response) => {
      if (response !== undefined) {
        console.log(response.status);
      }
      if (chrome.runtime.lastError !== undefined) {
        console.log(chrome.runtime.lastError.message);
      }
    });
  });
  if (status !== "PENDING" && status !== "IN_PROGRESS") {
    cancelButton.style.visibility = 'hidden';
  } else {
    cancelButton.style.visibility = 'visible';
  }
}

getPrinters() and getPrinterInfo()

Yazıcı bilgilerinin alınması için getPrinters() çağrısı yapılarak alınan bir yazıcı kimliği gerektiğinden, bu işlevler için tek bir örnek kullanılmıştır. Bu örnekte, varsayılan yazıcının adı ve açıklaması konsola kaydedilir. Bu, yazdırma örneğinin basitleştirilmiş bir sürümüdür.

​​const printers = await chrome.printing.getPrinters();
const defaultPrinter = printers.find((printer) => {
  const printerInfo = await chrome.printing.getPrinterInfo(printer.id);
  return printerInfo.isDefault;
}
console.log(`Default printer: ${defaultPrinter.name}.\n\t${defaultPrinter.description}`);

submitJob()

submitJob() yöntemi için üç şey gerekir.

  • Yazıcının hangi özelliklerinin kullanılacağını belirten bir ticket yapısı. Kullanıcının mevcut özellikler arasından seçim yapması gerekiyorsa bunları getPrinterInfo() kullanarak belirli bir yazıcı için alabilirsiniz.
  • Kullanılacak yazıcıyı ve yazdırılacak dosyayı veya tarihi belirten bir SubmitJobRequest yapısı. Bu yapı, ticket yapısına bir referans içeriyor.
  • Yazdırılacak dosyanın veya verilerin bir blob'u.

submitJob() çağrıldığında, kullanıcıdan yazdırma işlemini onaylamasını isteyen bir iletişim kutusu tetiklenir. Onayı atlamak için PrintingAPIExtensionsAllowlist öğesini kullanın.

Bu, yazdırma örneğinin basitleştirilmiş bir sürümüdür. ticket öğesinin SubmitJobRequest yapısına (8. satır) eklendiğine ve yazdırılacak verilerin bir blob'a (10. satır) dönüştürüldüğüne dikkat edin. Yazıcının kimliğinin (1. satır) elde edilmesi, örnekte burada gösterilenden daha karmaşıktır.

const defaultPrinter = getDefaultPrinter();
const ticket = getPrinterTicket(defaultPrinter);
const arrayBuffer = getPrintData();
const submitJobRequest = {
  job: {
    printerId: defaultPrinter,
    title: 'test job',
    ticket: ticket,
    contentType: 'application/pdf',
    document: new Blob([new Uint8Array(arrayBuffer)], {
      type: 'application/pdf'
    });
  }
};

chrome.printing.submitJob(submitJobRequest, (response) => {
  if (response !== undefined) {
    console.log(response.status);
  }
  if (chrome.runtime.lastError !== undefined) {
    console.log(chrome.runtime.lastError.message);
  }
});

Rulo baskı

Bu örnekte, genellikle makbuz yazdırmada kullanılan sürekli (veya rulo) yazdırma için nasıl yazıcı bileti oluşturulacağı gösterilmektedir. Rulo baskı için submitJobRequest nesnesi, submitJob() örneğinde gösterilenle aynıdır.

Kağıt kesme için varsayılan değeri değiştirmeniz gerekirse vendor_ticket_item tuşunu kullanın. (Varsayılan ayar her yazıcıdan yazıcıya değişir.) Dahil edildiğinde bu anahtarın tek üyeli bir dizi olması gerekir: id değeri 'finishings' olan bir nesne. Değer, yazdırma işleminin sonunda zarı kesen yazıcılar için 'trim' veya yazdırma işinin kesilmesini gerektiren yazıcılar için 'none' olabilir.

const ticket = {
  version: '1.0',
  print: {
    vendor_ticket_item: [{id: 'finishings', value: 'trim'}],
    color: {type: 'STANDARD_MONOCHROME'},
    duplex: {type: 'NO_DUPLEX'},
    page_orientation: {type: 'PORTRAIT'},
    copies: {copies: 1},
    dpi: {horizontal_dpi: 300, vertical_dpi: 300},
    media_size: {
      width_microns: 72320,
      height_microns: 100000
    },
    collate: {collate: false}
  }
};

Bazı yazıcılar "finishings" seçeneğini desteklemez. Yazıcınızın bunu yapıp yapmadığını belirlemek için getPrinterInfo() numaralı telefonu arayın ve "finishings/11" olarak "display_name" değeri arayın.

"vendor_capability": [
  {
    "display_name": "finishings/11",
    "id": "finishings/11",
    "type": "TYPED_VALUE",
    "typed_value_cap": {
      "value_type": "BOOLEAN"
    }
  },
  ...
]

Biletlerin media_size anahtarındaki değerler her yazıcıya özeldir. Uygun bir boyut seçmek için getPrinterInfo() numaralı telefonu arayın. Döndürülen GetPrinterResponse, "media_size"."option" konumunda desteklenen medya boyutları dizisi içeriyor. "is_continuous_feed" değeri true olan bir seçenek belirleyin. Bilet için yükseklik ve genişlik değerlerini kullanın.

"media_size": {
  "option": [
  {
    "custom_display_name": "",
    "is_continuous_feed": true,
    "max_height_microns": 2000000,
    "min_height_microns": 25400,
    "width_microns": 50800
  },
  ...
  ]
}

Türler

GetPrinterInfoResponse

Özellikler

  • capabilities

    isteğe bağlı

    CDD biçiminde yazıcı özellikleri. Özellik eksik olabilir.

  • status

    Yazıcının durumu.

JobStatus

Yazdırma işinin durumu.

Enum

"BEKLEMEDE"
Yazdırma işi Chrome tarafında alındı, ancak henüz işlenmedi.

"IN_PROGRESS"
Yazdırma işi, yazdırma işlemi için gönderildi.

"BAŞARISIZ"
Yazdırma işi, bir hata nedeniyle kesintiye uğradı.

"CANCELED"
Yazdırma işi kullanıcı tarafından veya API aracılığıyla iptal edildi.

"YAZDIRILDI"
Yazdırma işi herhangi bir hata olmadan yazdırıldı.

Printer

Özellikler

  • açıklama

    dize

    Yazıcının kullanıcılar tarafından okunabilen açıklaması.

  • id

    dize

    Yazıcının tanımlayıcısı; cihazdaki yazıcılar arasında benzersiz olacağı garanti edilir.

  • isDefault

    boolean

    Yazıcının DefaultPrinterSelection kurallarına uyup uymadığını gösteren işaret. Birkaç yazıcının işaretlenebileceğini unutmayın.

  • ad

    dize

    Yazıcının adı.

  • recentlyUsedRank

    numara isteğe bağlı

    Yazıcının Chrome'dan yazdırmak için ne kadar süre önce kullanıldığını gösteren değer. Değer ne kadar düşük olursa yazıcı o kadar yakın zamanda kullanılır. Minimum değer 0'dır. Eksik değer, yazıcının yakın zamanda kullanılmadığını gösterir. Bu değerin yazıcılar arasında benzersiz olacağı garanti edilir.

  • source

    Yazıcının kaynağı (yapılandırılmış kullanıcı veya politika).

  • uri

    dize

    Yazıcı URI'si. Uzantılar, kullanıcının yazıcısını seçmek için bu değer tarafından kullanılabilir.

PrinterSource

Yazıcının kaynağı.

Enum

"USER"
Yazıcı, kullanıcı tarafından eklendi.

"POLICY"
Yazıcı, politika aracılığıyla eklendi.

PrinterStatus

Yazıcının durumu.

Enum

"DOOR_OPEN"
Yazıcının kapağı açık. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"TRAY_MISSING"
Yazıcının tepsisi yok. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"OUT_OF_INK"
Yazıcının mürekkebi bitmiş. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"OUT_OF_PAPER"
Yazıcıda kağıt bitti. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"OUTPUT_FULL"
Yazıcının çıkış alanı (ör. tepsi) dolu. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"KAĞIT_JAM"
Yazıcıda kağıt sıkışması var. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"GENERIC_ISSUE"
Genel bir sorun. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

"DURDURULDU"
Yazıcı durduruldu ve yazdırmıyor, ancak yazdırma işlerini kabul etmeye devam ediyor.

"UNREACHABLE"
Yazıcıya erişilemiyor ve yazdırma işlerini kabul etmiyor.

"EXPIRED_CERTIFICATE"
SSL sertifikasının süresi dolmuş. Yazıcı işleri kabul eder, ancak başarısız olur.

"AVAILABLE"
Yazıcı kullanılabilir.

SubmitJobRequest

Özellikler

  • Gönderilecek yazdırma işi. Desteklenen tek içerik türü "application/pdf"dir ve Cloud İş Bileti, yerel yazdırmayla ilgili olmadığından FitToPageTicketItem, PageRangeTicketItem, ReverseOrderTicketItem ve VendorTicketItem alanlarını içermemelidir. Diğer tüm alanlar mevcut olmalıdır.

SubmitJobResponse

Özellikler

  • jobId

    string isteğe bağlı

    Oluşturulan yazdırma işinin kimliği. Bu, cihazdaki tüm yazdırma işleri arasında yer alan benzersiz bir tanımlayıcıdır. Durum "Tamam" değilse businessId null olacaktır.

  • İsteğin durumu.

SubmitJobStatus

submitJob isteğinin durumu.

Enum

"Tamam"
Gönderilen yazdırma işi isteği kabul edildi.

"USER_REJECTED"
Gönderilen yazdırma işi isteği kullanıcı tarafından reddedildi.

Özellikler

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

getPrinterInfo işlevinin bir dakikada en fazla kaç kez çağrılabileceği.

Değer

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

submitJob işlevinin bir dakikada en fazla kaç kez çağrılabileceği.

Değer

40

Yöntemler

cancelJob()

Söz
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)

Daha önce gönderilen işi iptal eder.

Parametreler

  • jobId

    dize

    İptal edilecek yazdırma işinin kimliği. Bu, SubmitJobResponse içinde alınan kimlik olmalıdır.

  • geri çağırma

    Functions (isteğe bağlı)

    callback parametresi şu şekilde görünür:

    ()=>void

İlerlemeler

  • Promise<void>

    Chrome 100 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

getPrinterInfo()

Söz
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)

Yazıcının durumunu ve özelliklerini CDD biçiminde döndürür. Belirtilen kimliğe sahip hiçbir yazıcı yüklenmezse bu çağrı, çalışma zamanı hatası vererek başarısız olur.

Parametreler

İlerlemeler

  • Chrome 100 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

getPrinters()

Söz
chrome.printing.getPrinters(
  callback?: function,
)

Cihazdaki kullanılabilir yazıcıların listesini döndürür. Buna manuel olarak eklenen kurumsal yazıcılar ve keşfedilen yazıcılar dahildir.

Parametreler

  • geri çağırma

    Functions (isteğe bağlı)

    callback parametresi şu şekilde görünür:

    (printers: Printer[])=>void

İlerlemeler

  • Söz<Yazıcı[]>

    Chrome 100 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

submitJob()

Söz
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)

İşi yazdırma için gönderir. Uzantı, PrintingAPIExtensionsAllowlist politikasında listelenmiyorsa kullanıcıdan yazdırma işini kabul etmesi istenir. Chrome 120'den önce bu işlev bir söz veriyordu.

Parametreler

İlerlemeler

  • Chrome 100 ve sonraki sürümler

    Vaatler, Manifest V3 ve sonraki sürümlerde desteklenir ancak geriye dönük uyumluluk için geri çağırmalar sağlanır. Aynı işlev çağrısında ikisini birden kullanamazsınız. Vaat, geri çağırmaya iletilen aynı türle çözümlenir.

Etkinlikler

onJobStatusChanged

chrome.printing.onJobStatusChanged.addListener(
  callback: function,
)

İşin durumu değiştirildiğinde etkinlik tetiklenir. Bu, yalnızca bu uzantı tarafından oluşturulan işler için tetiklenir.

Parametreler

  • geri çağırma

    işlev

    callback parametresi şu şekilde görünür:

    (jobId: string,status: JobStatus)=>void