chrome.printing

Deskripsi

Gunakan chrome.printing API untuk mengirimkan pekerjaan cetak ke printer yang diinstal di Chromebook.

Izin

printing

Ketersediaan

Chrome 81+ Khusus ChromeOS

Manifes

Semua metode dan peristiwa chrome.printing mengharuskan Anda mendeklarasikan izin "printing" dalam manifes ekstensi. Contoh:

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

Contoh

Contoh di bawah menunjukkan penggunaan setiap metode di namespace pencetakan. Kode ini disalin dari atau didasarkan pada api-samples/printing di repositori GitHub extensions-samples.

cancelJob()

Contoh ini menggunakan pengendali onJobStatusChanged untuk menyembunyikan tombol 'batal' saat jobStatus bukan PENDING atau IN_PROGRESS. Perhatikan bahwa di beberapa jaringan atau saat Chromebook terhubung langsung ke printer, status ini dapat berlalu terlalu cepat sehingga tombol batalkan tidak terlihat cukup lama untuk dipanggil. Ini adalah contoh pencetakan yang sangat disederhanakan.

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()

Satu contoh digunakan untuk fungsi ini karena mendapatkan informasi printer memerlukan ID printer, yang diambil dengan memanggil getPrinters(). Contoh ini mencatat nama dan deskripsi printer default ke konsol. Ini adalah versi sederhana dari contoh pencetakan.

​​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()

Metode submitJob() memerlukan tiga hal.

  • Struktur ticket yang menentukan kemampuan printer mana yang akan digunakan. Jika pengguna perlu memilih dari kemampuan yang tersedia, Anda dapat mengambilnya untuk printer tertentu menggunakan getPrinterInfo().
  • Struktur SubmitJobRequest, yang menentukan printer yang akan digunakan, dan file atau tanggal yang akan dicetak. Struktur ini berisi referensi ke struktur ticket.
  • Blob file atau data yang akan dicetak.

Memanggil submitJob() akan memicu kotak dialog yang meminta pengguna untuk mengonfirmasi pencetakan. Gunakan PrintingAPIExtensionsAllowlist untuk melewati konfirmasi.

Ini adalah versi sederhana dari contoh pencetakan. Perhatikan bahwa ticket dilampirkan ke struktur SubmitJobRequest (baris 8) dan data yang akan dicetak dikonversi menjadi blob (baris 10). Mendapatkan ID printer (baris 1) lebih rumit dalam contoh daripada yang ditampilkan di sini.

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);
  }
});

Pencetakan gulungan

Contoh ini menunjukkan cara membuat tiket printer untuk pencetakan berkelanjutan (atau gulungan), yang sering digunakan dengan pencetakan tanda terima. Objek submitJobRequest untuk pencetakan gulungan sama dengan yang ditampilkan untuk contoh submitJob().

Jika Anda perlu mengubah nilai default untuk pemotongan kertas, gunakan tombol vendor_ticket_item. (Default bervariasi dari printer ke printer.) Jika disertakan, kunci ini harus berupa array dengan satu anggota: objek yang id-nya adalah 'finishings'. Nilainya dapat berupa 'trim' untuk printer yang memotong gulungan di akhir pencetakan atau 'none' untuk printer yang mengharuskan tugas pencetakan dirobek.

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

Beberapa printer tidak mendukung opsi "finishings". Untuk menentukan apakah printer Anda mendukungnya, hubungi getPrinterInfo() dan cari "display_name" "finishings/11".

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

Nilai dalam kunci media_size tiket bersifat spesifik untuk setiap printer. Untuk memilih ukuran yang sesuai, hubungi getPrinterInfo(). GetPrinterResponse yang ditampilkan berisi array ukuran media yang didukung di "media_size"."option". Pilih opsi yang nilai "is_continuous_feed"-nya benar (true). Gunakan nilai tinggi dan lebarnya untuk tiket.

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

Jenis

GetPrinterInfoResponse

Properti

  • capabilities

    objek opsional

    Kemampuan printer dalam format CDD. Properti mungkin tidak ada.

  • status

    Status printer.

JobStatus

Status tugas cetak.

Enum

"PENDING"
Pekerjaan cetak diterima di sisi Chrome, tetapi belum diproses.

"IN_PROGRESS"
Tugas cetak dikirim untuk dicetak.

"GAGAL"
Tugas cetak terganggu karena terjadi error.

"DIBATALKAN"
Tugas cetak dibatalkan oleh pengguna atau melalui API.

"DICETAK"
Tugas cetak dicetak tanpa error.

Printer

Properti

  • deskripsi

    string

    Deskripsi printer yang dapat dibaca manusia.

  • id

    string

    ID printer; dijamin unik di antara printer pada perangkat.

  • isDefault

    boolean

    Flag yang menunjukkan apakah printer sesuai dengan aturan DefaultPrinterSelection. Perhatikan bahwa beberapa printer dapat ditandai.

  • nama

    string

    Nama printer.

  • recentlyUsedRank

    nomor opsional

    Nilai yang menunjukkan seberapa baru printer digunakan untuk mencetak dari Chrome. Makin rendah nilainya, makin baru printer tersebut digunakan. Nilai minimumnya adalah 0. Nilai yang tidak ada menunjukkan bahwa printer tidak digunakan baru-baru ini. Nilai ini dijamin unik di antara printer.

  • source

    Sumber printer (dikonfigurasi pengguna atau kebijakan).

  • uri

    string

    URI printer. Ini dapat digunakan oleh ekstensi untuk memilih printer bagi pengguna.

PrinterSource

Sumber printer.

Enum

"USER"
Printer ditambahkan oleh pengguna.

"KEBIJAKAN"
Printer ditambahkan melalui kebijakan.

PrinterStatus

Status printer.

Enum

"DOOR_OPEN"
Pintu printer terbuka. Printer masih menerima tugas cetak.

"TRAY_MISSING"
Baki printer tidak ada. Printer masih menerima tugas cetak.

"OUT_OF_INK"
Printer kehabisan tinta. Printer masih menerima tugas cetak.

"OUT_OF_PAPER"
Printer kehabisan kertas. Printer masih menerima tugas cetak.

"OUTPUT_FULL"
Area output printer (misalnya, baki) penuh. Printer masih menerima tugas cetak.

"PAPER_JAM"
Printer mengalami macet kertas. Printer masih menerima tugas cetak.

"GENERIC_ISSUE"
Beberapa masalah umum. Printer masih menerima tugas cetak.

"BERHENTI"
Printer berhenti dan tidak mencetak, tetapi masih menerima tugas cetak.

"TIDAK DAPAT DIJANGKAU"
Printer tidak dapat dijangkau dan tidak menerima tugas cetak.

"EXPIRED_CERTIFICATE"
Masa berlaku sertifikat SSL telah berakhir. Printer menerima tugas, tetapi gagal.

"AVAILABLE"
Printer tersedia.

SubmitJobRequest

Properti

  • tugas

    Tugas cetak yang akan dikirimkan. Jenis konten yang didukung adalah "application/pdf" dan "image/png". Cloud Job Ticket tidak boleh menyertakan kolom FitToPageTicketItem, PageRangeTicketItem, dan ReverseOrderTicketItem karena tidak relevan untuk pencetakan native. VendorTicketItem bersifat opsional. Semua kolom lainnya harus ada.

SubmitJobResponse

Properti

  • jobId

    string opsional

    ID tugas cetak yang dibuat. Ini adalah ID unik di antara semua tugas cetak di perangkat. Jika statusnya bukan OK, jobId akan bernilai null.

  • Status permintaan.

SubmitJobStatus

Status permintaan submitJob.

Enum

"OK"
Permintaan tugas cetak yang dikirim diterima.

"USER_REJECTED"
Permintaan tugas cetak yang dikirim ditolak oleh pengguna.

Properti

MAX_GET_PRINTER_INFO_CALLS_PER_MINUTE

Jumlah maksimum panggilan getPrinterInfo per menit.

Nilai

20

MAX_SUBMIT_JOB_CALLS_PER_MINUTE

Jumlah maksimum panggilan submitJob per menit.

Nilai

40

Metode

cancelJob()

Janji
chrome.printing.cancelJob(
  jobId: string,
  callback?: function,
)
: Promise<void>

Membatalkan tugas yang sebelumnya dikirimkan.

Parameter

  • jobId

    string

    ID tugas cetak yang akan dibatalkan. ID ini harus sama dengan ID yang diterima dalam SubmitJobResponse.

  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    () => void

Hasil

  • Promise<void>

    Chrome 100+

    Promise hanya didukung untuk Manifest V3 dan yang lebih baru, platform lain harus menggunakan callback.

getJobStatus()

Promise Chrome 135+
chrome.printing.getJobStatus(
  jobId: string,
  callback?: function,
)
: Promise<JobStatus>

Menampilkan status tugas cetak. Panggilan ini akan gagal dengan error runtime jika tugas cetak dengan jobId yang diberikan tidak ada. jobId: ID tugas cetak untuk menampilkan statusnya. ID ini harus sama dengan ID yang diterima dalam SubmitJobResponse.

Parameter

  • jobId

    string

  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (status: JobStatus) => void

Hasil

  • Promise<JobStatus>

    Promise hanya didukung untuk Manifest V3 dan yang lebih baru, platform lain harus menggunakan callback.

getPrinterInfo()

Janji
chrome.printing.getPrinterInfo(
  printerId: string,
  callback?: function,
)
: Promise<GetPrinterInfoResponse>

Menampilkan status dan kemampuan printer dalam format CDD. Panggilan ini akan gagal dengan error runtime jika tidak ada printer dengan ID tertentu yang diinstal.

Parameter

Hasil

  • Chrome 100+

    Promise hanya didukung untuk Manifest V3 dan yang lebih baru, platform lain harus menggunakan callback.

getPrinters()

Janji
chrome.printing.getPrinters(
  callback?: function,
)
: Promise<Printer[]>

Menampilkan daftar printer yang tersedia di perangkat. Hal ini mencakup printer yang ditambahkan secara manual, printer perusahaan, dan printer yang ditemukan.

Parameter

  • callback

    fungsi opsional

    Parameter callback terlihat seperti:

    (printers: Printer[]) => void

Hasil

  • Promise<Printer[]>

    Chrome 100+

    Promise hanya didukung untuk Manifest V3 dan yang lebih baru, platform lain harus menggunakan callback.

submitJob()

Janji
chrome.printing.submitJob(
  request: SubmitJobRequest,
  callback?: function,
)
: Promise<SubmitJobResponse>

Mengirimkan tugas untuk dicetak. Jika ekstensi tidak tercantum dalam kebijakan PrintingAPIExtensionsAllowlist, pengguna akan diminta untuk menyetujui tugas cetak. Sebelum Chrome 120, fungsi ini tidak menampilkan promise.

Parameter

Hasil

  • Chrome 100+

    Promise hanya didukung untuk Manifest V3 dan yang lebih baru, platform lain harus menggunakan callback.

Acara

onJobStatusChanged

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

Peristiwa diaktifkan saat status tugas diubah. Peristiwa ini hanya diaktifkan untuk tugas yang dibuat oleh ekstensi ini.

Parameter

  • callback

    fungsi

    Parameter callback terlihat seperti:

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