browser.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

Chrome 81 ve sonraki sürümler Chrome 148'den itibaren browser.* Yalnızca ChromeOS

Tüm browser.printing yöntemleri ve etkinlikleri, uzantı manifest dosyasında "printing" iznini belirtmenizi gerektirir. Örneğin:

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

Örnekler

Aşağıdaki örneklerde, yazdırma ad alanındaki yöntemlerin her birinin kullanımı gösterilmektedir. Bu kod, extensions-samples GitHub deposundaki api-samples/printing dizininden kopyalanmış veya bu dizini temel almıştır.

cancelJob()

Bu örnekte, jobStatus ne PENDING ne de IN_PROGRESS olduğunda "iptal" düğmesini gizlemek için onJobStatusChanged işleyicisi kullanılmaktadır. Bazı ağlarda veya bir Chromebook doğrudan yazıcıya bağlıyken bu durumların çok hızlı geçebileceğini ve iptal düğmesinin çağrılacak kadar uzun süre görünür olmayabileceğini unutmayın. Bu, yazdırma işleminin son derece basitleştirilmiş bir örneğidir.

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

getPrinters() and getPrinterInfo()

Yazıcı bilgilerini almak için getPrinters() çağrılarak alınan bir yazıcı kimliği gerektiğinden bu işlevler için tek bir örnek kullanılır. Bu örnek, varsayılan yazıcının adını ve açıklamasını konsola kaydeder. Bu, yazdırma örneğinin basitleştirilmiş bir versiyonudur.

​​const printers = await browser.printing.getPrinters();
const defaultPrinter = printers.find((printer) => {
  const printerInfo = await browser.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 getPrinterInfo() kullanarak belirli bir yazıcı için bu özellikleri alabilirsiniz.
  • Kullanılacak yazıcıyı ve yazdırılacak dosyayı veya verileri belirten bir SubmitJobRequest yapısı. Bu yapı, ticket yapısına bir referans içerir.
  • Yazdırılacak dosyanın veya verilerin blob'u.

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

Bu, yazdırma örneğinin basitleştirilmiş bir versiyonudur. ticket öğesinin SubmitJobRequest yapısına (8. satır) eklendiğini ve yazdırılacak verilerin blob'a dönüştürüldüğünü (10. satır) görebilirsiniz. Yazıcının kimliğini alma (1. satır), ö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'
    });
  }
};

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

Rulo baskı

Bu örnekte, genellikle makbuz yazdırma için kullanılan sürekli (veya rulo) yazdırma için yazıcı biletinin nasıl 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 gerekiyorsa vendor_ticket_item tuşunu kullanın. (Varsayılan ayar yazıcıdan yazıcıya değişir.) Değeri değiştirmek için tek üyeli bir dizi sağlayın: id değeri 'finishings' olan bir nesne. Bu değer, yazdırma işleminin sonunda ruloyu kesen yazıcılar için 'trim', yazdırma işinin yırtılarak çıkarılmasını 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 bu özelliği destekleyip desteklemediğini öğrenmek için getPrinterInfo() numaralı telefonu arayın ve "display_name"/"finishings/11" değerini arayın.

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

Biletin media_size anahtarındaki değerler her yazıcıya özeldir. Uygun bir boyut seçmek için getPrinterInfo() simgesini tıklayın. Döndürülen GetPrinterResponse, "media_size"."option" adresinde desteklenen medya boyutlarının bir dizisini içerir. "is_continuous_feed" değeri doğru 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ı nesne

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

  • Yazıcının durumu.

JobStatus

Yazdırma işinin durumu.

Enum

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

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

"FAILED"
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.

"PRINTED"
Yazdırma işi hatasız bir şekilde yazdırıldı.

Printer

Özellikler

  • açıklama

    dize

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

  • id

    dize

    Yazıcının tanımlayıcısı. Cihazdaki yazıcılar arasında benzersiz olması garanti edilir.

  • isDefault

    boole

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

  • ad

    dize

    Yazıcının adı.

  • recentlyUsedRank

    number isteğe bağlı

    Yazıcının Chrome'dan yazdırma işlemi için ne kadar yakın zamanda kullanıldığını gösteren değer. Değer ne kadar düşükse yazıcı o kadar yakın zamanda kullanılmıştı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 olduğu garanti edilir.

  • kaynak

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

  • uri

    dize

    Yazıcı URI'si. Bu, uzantılar tarafından kullanıcı için yazıcı seçmek amacıyla kullanılabilir.

PrinterSource

Yazıcının kaynağı.

Enum

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

"POLİTİKA"
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 eksik. Yazıcı, yazdırma işlerini kabul etmeye devam eder.

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

"OUT_OF_PAPER"
Yazıcının kağıdı 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.

"PAPER_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.

"STOPPED"
Yazıcı durdurulmuştur ve yazdırma işlemi yapmaz ancak yazdırma işlerini kabul etmeye devam eder.

"UNREACHABLE"
Yazıcıya erişilemiyor ve yazdırma işleri kabul edilmiyor.

"EXPIRED_CERTIFICATE"
SSL sertifikasının süresi doldu. Yazıcı işleri kabul ediyor ancak işler başarısız oluyor.

"KULLANILABİLİR"
Yazıcı kullanılabilir.

SubmitJobRequest

Özellikler

  • iş

    Gönderilecek yazdırma işi. Desteklenen içerik türleri "application/pdf" ve "image/png"dir. Cloud Job Ticket, yerel yazdırma ile alakalı olmadığından FitToPageTicketItem, PageRangeTicketItem ve ReverseOrderTicketItem alanlarını içermemelidir. VendorTicketItem isteğe bağlıdır. 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 benzersiz bir tanımlayıcıdır. Durum OK değilse jobId boş olur.

  • İsteğin durumu.

SubmitJobStatus

submitJob isteğinin durumu.

Enum

"OK"
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 dakikada çağrılabileceği maksimum sayı.

Değer

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

submitJob işlevinin dakikada çağrılabileceği maksimum sayı.

Değer

40

Yöntemler

cancelJob()

browser.printing.cancelJob(
  jobId: string,
)
: Promise<void>

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

Parametreler

  • jobId

    dize

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

İadeler

  • Promise<void>

    Chrome 100 ve sonraki sürümler Chrome 148'den itibaren browser.*

getJobStatus()

Chrome 135 ve sonraki sürümler Chrome 148'den itibaren browser.*
browser.printing.getJobStatus(
  jobId: string,
)
: Promise<JobStatus>

Yazdırma işinin durumunu döndürür. Belirtilen jobId değerine sahip yazdırma işi mevcut değilse bu çağrı, çalışma zamanı hatasıyla başarısız olur. jobId: Durumu döndürülecek yazdırma işinin kimliği. Bu kimlik, SubmitJobResponse içinde alınan kimlikle aynı olmalıdır.

Parametreler

  • jobId

    dize

İadeler

getPrinterInfo()

browser.printing.getPrinterInfo(
  printerId: string,
)
: Promise<GetPrinterInfoResponse>

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

Parametreler

  • printerId

    dize

İadeler

getPrinters()

browser.printing.getPrinters(): Promise<Printer[]>

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

İadeler

  • Promise<Printer[]>

    Chrome 100 ve sonraki sürümler Chrome 148'den itibaren browser.*

submitJob()

browser.printing.submitJob(
  request: SubmitJobRequest,
)
: Promise<SubmitJobResponse>

İşi yazdırmak 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 promise döndürmüyordu.

Parametreler

İadeler

  • Chrome 100 ve sonraki sürümler Chrome 148'den itibaren browser.*

Etkinlikler

onJobStatusChanged

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

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

Parametreler

  • callback

    işlev

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

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