{"id":19218890,"url":"https://github.com/openprinting/cups-filters","last_synced_at":"2025-05-16T05:07:32.268Z","repository":{"id":25780425,"uuid":"105824994","full_name":"OpenPrinting/cups-filters","owner":"OpenPrinting","description":"filters, backends, driverless utility, ... - Everything which CUPS 2.x needs to be used on non-Mac systems","archived":false,"fork":false,"pushed_at":"2025-03-19T07:52:45.000Z","size":251780,"stargazers_count":174,"open_issues_count":117,"forks_count":137,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-05-16T05:07:26.344Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenPrinting.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES-1.x.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-10-04T22:22:59.000Z","updated_at":"2025-04-22T13:38:26.000Z","dependencies_parsed_at":"2023-12-06T20:24:14.027Z","dependency_job_id":"ab08502a-3669-435a-86c3-100c9a1fe0de","html_url":"https://github.com/OpenPrinting/cups-filters","commit_stats":{"total_commits":8933,"total_committers":69,"mean_commits":"129.46376811594203","dds":"0.23407589835441622","last_synced_commit":"5a73330fbd0cde494d984141f9add1565aef8171"},"previous_names":[],"tags_count":194,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fcups-filters","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fcups-filters/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fcups-filters/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fcups-filters/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenPrinting","download_url":"https://codeload.github.com/OpenPrinting/cups-filters/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254471060,"owners_count":22076585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T14:28:38.098Z","updated_at":"2025-05-16T05:07:27.250Z","avatar_url":"https://github.com/OpenPrinting.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenPrinting CUPS Filters v2.0.1 - 2024-08-15\n\nLooking for compile instructions?  Read the file \"INSTALL\"\ninstead...\n\n\n## INTRODUCTION\n\nCUPS is a standards-based, open-source printing system used by Apple's\nMac OS® and other UNIX®-like operating systems, especially also\nLinux. CUPS uses the Internet Printing Protocol (\"IPP\") and provides\nSystem V and Berkeley command-line interfaces, a web interface, and a\nC API to manage printers and print jobs.\n\nThis package contains backends, filters, and other software that was\nonce part of the core CUPS distribution, but during the time when CUPS\nwas developed at Apple, Apple stopped maintaining these parts as they\nwere not needed by Mac OS.\n\nIn addition it contains more filters and software developed\nindependently of Apple, especially filters for the PDF-centric\nprinting workflow introduced by OpenPrinting.\n\nSince CUPS 1.6.0 cups-filters is required for using printer\ndrivers (and also driverless printing) with CUPS under Linux. This\nversion of cups-filters is only for CUPS 2.2.2 or newer. Please\nuse the cups-filters 1.x line for older CUPS versions.\n\nCUPS 3.x has a vastly changed architecture (what we call the New\nArchitecture for printing) being all-IPP, only supporting driverless\nIPP printers and no PPD files and classic CUPS drivers any more. It\nwill not use external filters any more and so will not need this\npackage. This package retro-fits the filter functions of\nlibcupsfilters and libppd to CUPS 2.x.\n\nFor compiling and using this package CUPS (2.2.2 or newer),\nlibcupsfilters 2.x, and libppd are needed. It is highly recommended,\nespecially if non-PDF printers are used, to have at least one of\nGhostscript (preferred), Poppler, or MuPDF installed.\n\nIt also needs gcc (C compiler), automake, autoconf, autopoint, and\nlibtool. On Debian, Ubuntu, and distributions derived from them you\ncould also install the \"build-essential\" package to auto-install most\nof these packages.\n\nIf Ghostscript is used (via the \"gsto...\" or the \"universal\" CUPS\nfilters), Ghostscript 10.00.0 is required (10.01.0 is highly\nrecommended) and it has to be built at least with the \"pdfwrite\",\n\"ps2write\", \"cups\", \"pwgraster\", \"appleraster\", \"pclm\", \"pclm8\",\n\"pdfimage24\", \"pdfimage8\", \"pxlcolor\", and \"pxlmono\" output\ndevices. libcups of CUPS 2.2.2 or newer is required to build\nGhostscript this way.\n\nIf you use MuPDF as PDF renderer make sure to use at least version\n1.15, as the older versions have bugs and so some files get not\nprinted correctly.\n\nCUPS, this package, and Ghostscript contain some rudimentary printer\ndrivers and especially the filters needed for driverless printing\n(currently PWG Raster, Apple Raster, PCLm, and PDF output formats, for\nprinters supporting IPP Everywhere, AirPrint, Wi-Fi Direct, and other\nstandards). See the links to the Printer Applications below and also\nhttp://www.openprinting.org/drivers/ for a comprehensive set of\nprinter drivers for Linux.\n\nReport bugs to\n\n    https://github.com/OpenPrinting/cups-filters/issues\n\nSee the \"COPYING\", \"LICENCE\", and \"NOTICE\" files for legal\ninformation. The license is the same as for CUPS, for a maximum of\ncompatibility.\n\n## LINKS\n\n### cups-filters\n\n* [Short history](https://openprinting.github.io/achievements/#cups-filters)\n* [cups-filters 2.x development](https://openprinting.github.io/current/#cups-filters-2x)\n* [PDF-based printing workflow](https://openprinting.github.io/achievements/#pdf-instead-of-postscript-as-standard-print-job-format)\n\n### The New Architecture of Printing and Scanning\n\n* [The New Architecture - What is it?](https://openprinting.github.io/current/#the-new-architecture-for-printing-and-scanning)\n* [Ubuntu Desktop Team Indaba on YouTube](https://www.youtube.com/watch?v=P22DOu_ahBo)\n\n\n## DOCUMENTATION FROM CUPS-FILTERS 1.x\n\nMost of this is still valid for the current version of cups-filters.\n\n### IMAGE PRINTING DEFAULT CHANGED TO \"SCALE TO FIT\"\n\nCompared to the PostScript-based original CUPS filters there is a\nchange of defaults: The imagetopdf and imagetoraster filters print in\n\"print-scaling=fit\" or \"scale-to-fit\" mode (image is scaled to fill\none page but nothing of the image being cut off) by default.\n\nThis is done to support photo printing via AirPrint. The photo apps on\nApple's iOS devices send print jobs as JPEG images and do not allow to\nset any options like \"print-scaling\" or the page size. With\n\"scale-to-fit\" mode set by default, the iOS photos come out on one\npage, as expected.\n\nTo get back to the old behavior, supply one of the options\n\"print-scaling=none\", \"nofitplot\", \"filplot=Off\", \"nofit-to-page\", or\n\"fit-to-page=Off\".\n\n### GHOSTSCRIPT RENDERING OF FILLED PATHS\n\nWhen Ghostscript is rendering PostScript or PDF files into a\nraster format the filled paths are ususally rendered with the\nany-part-of-pixel method as it is PostScript standard. On\nlow-resolution printers, like label printers with 203 dpi,\ngraphics output can get inaccurate and so for example bar codes do\nnot work any more. This problem can be solved by letting\nGhostscript use the center-of-pixel method.\n\nThis can be done by either supplying the option \"-o\ncenter-of-pixel\" or \"-o CenterOfPixel\" on the command line when\nprinting or by adding a \"CenterOfPixel\" option to the PPD file and\nset it to \"true\", for example by adding the following lines to the\nPPD file of the print queue (usually in /etc/cups/ppd/):\n\n    *OpenUI *CenterOfPixel/Center Of Pixel: PickOne\n    *OrderDependency: 20 AnySetup *CenterOfPixel\n    *DefaultCenterOfPixel: true\n    *CenterOfPixel true/true: \"\"\n    *CenterOfPixel false/false: \"\"\n    *CloseUI: *CenterOfPixel\n\nThis option can be used when the print queue uses the gstoraster\nfilter.\n\n### POSTSCRIPT PRINTING RENDERER AND RESOLUTION SELECTION\n\nIf you use CUPS with this package and a PostScript printer then\nthe included pdftops filter converts the print job data which is\nin PDF format into PostScript. By default, the PostScript is\ngenerated with Ghostscript's \"ps2write\" output device, which\ngenerates a DSC-conforming PostScript with compressed embedded\nfonts and compressed page content. This is resource-saving and\nleads to fast wire transfer of print jobs to the printer.\n\nUnfortunately, Ghostscript's PostScript output is not compatible\nwith some printers due to interpreter bugs in the printer and in\naddition, processing (by Ghostscript or by the printer's\ninterpreter) can get very slow with high printing resolutions when\nparts of the incoming PDF file are converted to bitmaps if they\ncontain graphical structures which are not supported by\nPostScript. The bitmap problem especially occurs on input files\nwith transparency, especially also the ones produced by Cairo\n(evince and many other GNOME/GTK applications) which unnecessarily\nintroduces transparency even if the input PDF has no transparency.\n\nTherefore there are two possibilities to configure pdftops at\nruntime:\n\n1. Selection of the renderer: Ghostscript, Poppler, pdftocairo,\nAdobe Reader, or MuPDF\n\nGhostscript has better color management and is generally optimized\nmore for printing. Poppler produces a PostScript which is\ncompatible with more buggy built-in PostScript interpreters of\nprinters and it leads to a somewhat quicker workflow when\ngraphical structures of the input PDF has to be turned into\nbitmaps. Adobe Reader is the PDF renderer from Adobe, the ones who\ncreated PDF and PostScript. pdftocairo is a good choice for the\nPDF output of Cairo (for example when printing from evince).  It\nis less resource-consuming when rasterizing graphical elements\nwhich cannot be represented in PostScript (like\ntransparency). Note that pdftocairo only supports PDF input using\nDeviceRGB, DeviceGray, RGB or sGray and is not capable of\ngenerating PostScript level 1. So its support is only experimental\nand distributions should not choose it as default.\n\nThe selection is done by the \"pdftops-renderer\" option, setting it\nto \"gs\", \"pdftops\", \"pdftocairo\", \"acroread\", \"mupdf\", or \"hybrid\":\n\nPer-job:           lpr -o pdftops-renderer=pdftops ...\nPer-queue default: lpadmin -p printer -o pdftops-renderer-default=gs\nRemove default:    lpadmin -p printer -R pdftops-renderer-default\n\nBy default, pdftops uses Ghostscript if this does not get changed\nat compile time, for example by the Linux distribution vendor.\n\nHybrid means Ghostscript for most printers, but Poppler's pdftops\nfor Brother, Minolta, and Konica Minolta. Printer make and model\ninformation comes from the PPD or via the \"make-and-model\" option.\n\n2. Limitation of the image rendering resolution\n\nIf graphical structures of the incoming PDF file have to be\nconverted to bitmaps due to limitations of PostScript, the\nconversion of the file by pdftops or the rendering by the printer\ncan get too slow if the bitmap resolution is too high or the\nprintout quality can degrade if the bitmap resolution is too low.\n\nBy default, pdftops tries to find out the actual printing\nresolution and sets the resolution for bitmap generation to the\nsame value. If it cannot find the printing resolution, it uses 300\ndpi. It never goes higher than a limit of 1440 dpi. Note that this\ndefault limit can get changed at compile time, for example by the\nLinux distribution vendor.\n\nThe resolution limit for bitmaps can be changed to a lower or\nhigher value, or be set to unlimited. This is done by the option\n\"pdftops-max-image-resolution\", setting it to the desired value\n(in dpi) or to zero for unlimited. It can be used per-job or as\nper-queue default as the \"pdftops-renderer\" option described\nabove.\n\nThe \"pdftops-max-image-resolution\" option is ignored when Adobe\nReader is selected as PDF renderer.\n\nPOSTSCRIPT PRINTING DEBUG MODE\n\nSometimes a PostScript printer's interpreter errors, crashes, or\nsomehow else misbehaves on Ghostscript's output. To find\nworkarounds (currently we have already workarounds for Brother and\nKyocera) it is much easier to work with uncompressed PostScript.\nTo get uncompressed PostScript as output, send a job with the\n\"psdebug\" option, with commands like the following:\n\n    lpr -P \u003cprinter\u003e -o psdebug \u003cfile\u003e\n    lp -d \u003cprinter\u003e -o psdebug \u003cfile\u003e\n\nIf you want to send your job out of a desktop application, run\n\n    lpoptions -p \u003cprinter\u003e -o psdebug\n\nto make \"psdebug\" a personal default setting for you.\n\nTo extract the PostScript output for a developer to analyse it,\nclone your print queue to a one which prints into a file:\n\n    cupsctl FileDevice=yes\n    lpadmin -p test -E -v file:/tmp/printout \\\n      -P /etc/cups/ppd/\u003cname of original queue\u003e.ppd\n\nand print into this queue as described above. The PostScript\noutput is in /tmp/printout after the job has completed.\n\nThis option does not change anything if Poppler's pdftops is used\nas renderer.\n\n### CUPS FILTERS FOR PDF AS STANDARD PRINT JOB FORMAT\n\nHere is documentation from the former CUPS add-on tarball with the\nfilters for the PDF-based printing workflow: imagetopdf, texttopdf,\npdftopdf, and pdftoraster\n\nThe original filters are from http://sourceforge.jp/projects/opfc/\n\nNOTE: the texttops filter shipping with this package is a simple\nwrapper script for backward compatibility with third-party PPD files\nand custom configurations. It is not referred to in the\ncupsfilters.convs file and therefore not used by the default\nconfiguration. Direct conversion of text to PostScript is deprecated\nin the PDF-based printing workflow. So do not use this filter when\ncreating new PPD files or custom configurations. The parameters for\nthis filter are the same as for texttopdf (see below) as the texttops\nfilter calls the texttopdf filter plus Ghostscript's pdf2ps.\n\n\n### Filters\n\n\n#### IMAGETOPDF\n\n1. INTRODUCTION\n\nThis program is \"imagetopdf\". \"imagetopdf\" is a CUPS filter which reads\na single image file, converts it into a PDF file and outputs it to stdout.\n\nThis program accepts the following image file format;\n\n    gif, png, jpeg, tiff, photocd, portable-anymap, portable-bitmap,\n    portable-graymap, portable-pixmap, sgi-rgb, sun-raster, xbitmap,\n    xpixmap, xwindowdump\n\nxbitmap, xpixmap and xwindowdump images are converted into png images by\nthe \"convert\" command. Other kinds of image file format can be supported\nif the \"convert\" command support them.\n\nOutput PDF file format conforms to PDF version 1.3 specification, and\ninput image is converted and contained in the output PDF file as a binary\nformat non-compression image.\n\n\"imagetopdf\" may outputs multiple pages if the input image exceeds page\nprintable area.\n\n2. COMMAND LINE\n\n\"imagetopdf\" is a CUPS filter, and the command line arguments, environment\nvariables and configuration files are in accordance with the CUPS filter\ninterface.\n\n    imagetopdf \u003cjob\u003e \u003cuser\u003e \u003ctitle\u003e \u003cnum-copies\u003e \u003coptions\u003e [\u003cfilename\u003e]\n\n\"imagetopdf\" ignores \u003cjob\u003e and \u003cuser\u003e.\n\u003ctitle\u003e is appended into the PDF dictionary as /Title.\n\u003cnum-copies\u003e specifies the number of document copies.\n\u003coptions\u003e is a CUPS option list.\n\u003cfilename\u003e is an input image file name.\n\nWhen omit the \u003cfilename\u003e, \"imagetopdf\" reads an image file from stdin.\n\n3. ENVIRONMENT VARIABLES\n\nThis program refers the following environment variable;\n\n   PPD:  PPD file name of the printer.\n\n4. COMMAND OPTIONS\n\n\"imagetopdf\" accepts the following CUPS standard options;\n\n    fitplot\n    mirror\n    PageSize\n    page-left, page-right, page-bottom, page-top\n    OutputOrder\n    Collate\n    sides\n    cupsEvenDuplex\n    position\n    scaling\n    ppi\n    natural-scaling\n    landscape\n    orientation-requested\n\nSee the CUPS documents for details of these options.\n\n5. KNOWN PROBLEMS\n\nProblem:\n  PBM and SUN raster images can not be printed.\nSolution:\n  Due to the CUPS libcupsimage library's bug. Update the CUPS on your system.\n  \n6. INFORMATION FOR DEVELOPERS\n\nFollowing information is for developers, not for driver users.\n\n6.1 Options handled by a printer or \"imagetopdf\"\n\nFollowing options are handled by a printer or \"imagetopdf\":\n\n    Collate, Copies, Duplex, OutputOrder\n\nWhich handles these options depends on following options and attributes:\n\n    Collate, Copies, Duplex, OutputOrder, cupsEvenDuplex, cupsManualCopies\n\n\"imagetopdf\" judges whether a printer can handle these options according to\nthe followings option settings in a PPD file.\n\n    Collate:\n      If Collate is defined, \"imagetopdf\" judges the printer supports Collate.\n    Copies:\n      If cupsManualCopies is defined as True, \"imagetopdf\" judges the printer\n      does not support Copies feature.\n　\n    Duplex:\n      If Duplex is defined, \"imagetopdf\" judges the printer supports Duplex.\n      If cupsEvenDuplex is True, Number of pages must be even.\n    OutputOrder:\n      If OutputOrder is defined, \"imagetopdf\" judges the printer supports\n      OutputOrder.\n\nIf the printer cannot handle these options, \"imagetopdf\" handles it.\n\nFollowing pseudo program describes how \"imagetopdf\" judges to handle\nthese options.\n\nVariables\n\nCopies: specified Copies\nDuplex: specified Duplex \nCollate: specified Collate\nOutputOrder: specified OutputOrder\nEvenDuplex: specified cupsEvenDuplex\npages: number of pages\nnumber_up: specified number-up\n\ndevice_copies: Copies passed to the printer\ndevice_duplex: Duplex passed to the printer\ndevice_collate: Collate passed to the printer\ndevice_outputorder: OutputOrder passed to the printer\n\nsoft_copies: copies by imagetopdf\n\n```\ndevice_copies = 1;\ndevice_duplex = False;\ndevice_collate = False;\ndevice_outputorder = False;\n\nif (Copies == 1) {\n  /* Collate is not needed. */\n  Collate = False;\n}\n\nif (!Duplex) {\n  /* EvenDuplex is not needed */\n  EvenDuplex = False;\n}\n\n\nif (Copies \u003e 1 \u0026\u0026 the printer can handle Copies) device_copies = Copies;\nif (Duplex \u0026\u0026 the printer can handle Duplex) {\n       device_duplex = True;\n} else {\n   /* imagetopdf cannot handle Duplex */\n}\nif (Collate \u0026\u0026 the printer can handle Collate) device_collate = True;\nif (OutputOrder == Reverse \u0026\u0026 the printer can handle OutputOrder)\n             device_outputorder = True;\n\nif (Collate \u0026\u0026 !device_collate) {\n   /* The printer cannot handle Collate.\n      So imagetopdf handle Copies */\n              device_copies = 1;\n}\n\nif (device_copies != Copies /* imagetopdf handle Copies */ \u0026\u0026 Duplex)\n    /* Make imagetopdf handle Collate, otherwise both paper side may have\n       same page */\n              Collate = True;\n              device_collate = False;\n}\n\nif (Duplex \u0026\u0026 Collate \u0026\u0026 !device_collate) {\n   /* Handle EvenDuplex, otherwise the last page has\n      the next copy's first page in the other side of the paper. */\n   EvenDuplex = True;\n}\n\nif (Duplex \u0026\u0026 OutputOrder == Reverse \u0026\u0026 !device_outputorder) {\n   /* Handle EvenDuplex, otherwise the first page's other side of paper\n      is empty. */\n   EvenDuplex = True;\n}\n\nsoft_copies = device_copies \u003e 1 ? 1 : Copies;\n```\n\n6.2 JCL\n\nWhen you print PDF files to a PostScript(PS) printer, you can specify\ndevice options in PS. In this case, you can write PS commands in a PPD file\nlike as follows.\n\n```\n*OpenUI *Resolution/Resolution : PickOne\n*DefaultResolution: 600\n*Resolution 300/300 dpi: \"\u003c\u003c/HWResolution[300 300]\u003e\u003esetpagedevice\"\n*Resolution 600/600 dpi: \"\u003c\u003c/HWResolution[600 600]\u003e\u003esetpagedevice\"\n*CloseUI: *Resolution\n```\n\nHowever, if options cannot be described in PS file, you can write JCLs\nas follows;\n\n```\n*JCLOpenUI *JCLFrameBufferSize/Frame Buffer Size: PickOne\n*DefaultJCLFrameBufferSize: Letter\n*OrderDependency: 20 JCLSetup *JCLFrameBufferSize\n*JCLFrameBufferSize Off: '@PJL SET PAGEPROTECT = OFF\u003c0A\u003e'\n*JCLFrameBufferSize Letter: '@PJL SET PAGEPROTECT = LTR\u003c0A\u003e'\n*JCLFrameBufferSize Legal: '@PJL SET PAGEPROTECT = LGL\u003c0A\u003e'\n*JCLCloseUI: *JCLFrameBufferSize\n```\n\nBecause PDF cannot specify device options in a PDF file, you have to define\nall the device options as JCLs.\n\nWhen a printer does not support PS or PDF, you can use Ghostscript (GS).\nIn this case, you can specify device options like a PS printer.\nIf you want to use the same printer and same PPD file for both PDF and PS\nprinting, when you print a PS file, you can specify that GS handles it,\nand when you print a PDF file, you can also specify that PDF filters handle\nit in the same PPD file. However in this case, previous methods is not\nappropriate to specify device options.\n\nSo, \"imagetopdf\" handles this case as follows;\n(In following pseudo program, JCL option is an option specified with JCLOpenUI)\n\n```\nif (Both JCLBegin and JCLToPSInterpreter are specified in the PPD file) {\n    output JCLs that marked JCL options.\n}\n\nif (pdftopdfJCLBegin attribute is specified in the PPD file) {\n    output it's value\n}\n\nif (Copies option is specified in the PPD file) {\n    mark Number of copies specified\n} else if (pdftopdfJCLCopies is specified in the PPD file) {\n    output JCL specified with JCLCopies\n}\n\nfor (each marked options) {\n    if (pdftopdfJCL\u003cmarked option's name\u003e is specified in the PPD file) {\n\toutput it's value as a JCL\n    } else if (pdftopdfJCLBegin attributes is specified in the PPD file) {\n\toutput \"\u003coption's name\u003e=\u003cmarked choice\u003e;\" as a JCL\n    }\n}\noutput NEWLINE\n```\n\nThus, if you want to use both PDF filters and GS by single PPD file,\nwhat you should do is to add the following line in the PPD file;\n\n```\n*pdftopdfJCLBegin: \"pdfto... jobInfo:\"\n```\n\nReplace \"pdfto...\" by the name of the actual filter to be called after\npdftopdf.\n\nNote:\n  If you specify JCLBegin, you have to specify JCLToPSInterpreter as well.\n\nNote:\n  When you need to specify the value which is different from the choosen\n  value based on the PPD into the jobInfo, you have to specify the values\n  with the key started by \"pdftopdfJCL\" string.\n\n  For example, if the page size is defined in a PPD file as following;\n\n      *OpenUI *PageSize/Page Size: PickOne\n      *DefaultPageSize: A4\n      *PageSize A4/A4:\n      *PageSize Letter/US Letter:\n      *CloseUI: *PageSize\n\n  if you choose the page size \"Letter\", the string \"PageSize=Letter;\" is\n  added to jobInfo. On the other hand, if the driver requires the different\n  value for the \"Letter\" size, for instance driver requires \"PS=LT;\"\n  instead of \"PageSize=Letter;\" as the jobInfo value, the PPD file has to\n  be defined as following;\n\n      *OpenUI *PageSize/Page Size: PickOne\n      *DefaultPageSize: A4\n      *PageSize A4/A4:\n      *pdftopdfJCLPageSize A4/A4: \"PS=A4;\"\n      *PageSize Letter/US Letter:\n      *pdftopdfJCLPageSize Letter/US Letter: \"PS=LT;\"\n      *CloseUI: *PageSize\n\n6.3 Temporally files location\n\n\"imagetopdf\" creates temporally files if needed. Temporary files are created\nin the location specified by TMPDIR environment variable. Default location\nis \"/tmp\".\n\n\n#### PDFTOPDF\n\nThe pdftopdf filter depends on libqpdf to read and write PDF files.\n\nIt replaces and imitates the pstops filter in the PDF-based workflow.\nA similar filter (which can serve as behavior reference)\nis called \"cgpdftopdf\" in OS X (not open source).\n\n\n##### Command line\n\npdftopdf follows the usual CUPS filter calling conventions, i.e.\n\n    pdftopdf \u003cjob\u003e \u003cuser\u003e \u003ctitle\u003e \u003cnum-copies\u003e \u003coptions\u003e [\u003cfilename\u003e]\n\ntogether with the environment variables \"PPD\" and \"CLASSIFICATION\".\n\nWhen omitting \u003cfilename\u003e, \"pdftopdf\" reads a PDF file from stdin.\nInternally this will write the data to a temporary file, because\nthe PDF format cannot be processed in a streaming fashion.\n\n\u003coptions\u003e are delimited by space; boolean type CUPS options can be set\nby only adding the option key, other types are provided as\npairs of key and value, \u003ckey\u003e=\u003cvalue\u003e.\n\npdftopdf processes the following standard command-line and/or PPD options:\n\n    Copies      # ppd will only override, when commandline parameter was 1\n    fitplot / fit-to-page / ipp-attribute-fidelity\n    landscape / orientation-requested\n    PageSize / page-size / MediaSize / media-size\n    page-left / page-right / page-bottom / page-top\n    media-top-margin / media-left-margin / media-right-margin /\n        media-bottom-margin\n    Duplex / JCLDuplex / EFDuplex / JD03Duplex / sides\n    number-up / number-up-layout\n    page-border\n    OutputOrder / OutputBin / DefaultOutputOrder / page-delivery\n    page-label\n    page-set\n    page-ranges\n    MirrorPrint / mirror\n    emit-jcl\n    position\n    Collate / multiple-document-handling / sheet-collate\n    cupsEvenDuplex\n    cupsManualCopies  # via ppd\n\nAdditional (non-standard) options\n\n1) Booklet printing\n\n    booklet=Off/On/Shuffle-Only\n\n\"On\" also tries to set DuplexTumble (two-sided-short-edge) and forces number-up=2\n\n    booklet-signature=(multiple of 4, or default: -1 to use \"all pages\")\n\n2) Page autorotate\n\npdftopdf automatically rotates pages to the same orientation,\ninstead of (e.g. fitplot) scaling them down unrotated.\nThis behavier can be controlled by\n\n    pdfAutorotate / nopdfAutorotate\n\nSpecifically, if a PDF file contains pages with page width greater than\npage height (a landscape page), such pages are automatically rotated\nanticlockwise by 90 degrees, unless the PPD file specifies\n\"*LandscapeOrientation: Minus90\". In this case, clockwise rotation is used.\nTo turn off the feature on a job-by-job basis use\n\n    lp -d \u003cprint_queue_name\u003e -o nopdfAutorotate \u003cdocument\u003e\n\nOn a per-queue basis use\n\n    -o nopdfAutorotate-default\n\nas an option to lpadmin.\n\nWhen the 'landscape' or 'orientation-requested=4' (or =5) option of CUPS is\ngiven, the pdfAutorotate processing will adjust and accordingly rotate the\nnon-landscape pages are rotated instead.\n\nNote: Some pages might end up 180 degree rotated (instead of 0 degree).\nThose should probably be rotated manually before binding the pages together.\n\n3) Method of flattening interactive PDF forms and annotations.\n\nSome PDF files (like application forms) contain interactive forms\nwhich the user can fill in inside a PDF viewer like evince. The filled\nin data is not integrated in each page of the PDF file but stored in\nan extra layer. Due to this the data gets lost when applying\nmanipulations like scaling or N-up to the pages. To prevent the loss\nof the data pdftopdf flattens the form before doing the\nmanipulations. This means the PDF will be converted into a static PDF\nfile with the data being integral part of the pages.\n\nThe same flattening is needed for annotations in PDF files.\n\nBy default the actual flattening work is done by QPDF, as QPDF is also\ndoing everything else in pdftopdf. This way no external utilities need\nto be called and so extra piping between processes and extra PDF\ninterpreter runs are avoided which makes the filtering process faster.\n\nAs we did not test the new QPDF-based form-flattening with thousands\nof PDF files yet and it has not been available to actual users yet it\nis possible that there are still some bugs. To give users a\npossibility to work around possible bugs in QPDF's form flattening, we\nhave introduced an option to get back to the old flattening by the\nexternal tools pdftocairo or Ghostscript.\n\nThe selection of the method is done by the \"pdftopdf-form-flattening\"\noption, setting it to \"auto\", \"qpdf\", \"pdftocairo\", \"ghostscript\",\n\"gs\", \"internal\" or \"external\":\n\nPer-job:           lpr -o pdftopdf-form-flattening=pdftocairo ...\nPer-queue default: lpadmin -p printer -o pdftopdf-form-flattening-default=gs\nRemove default:    lpadmin -p printer -R pdftopdf-form-flattening-default\n\nBy default, pdftopdf uses QPDF if the option is not supplied, also the\nsettings \"auto\" and \"internal\" make QPDF being used. \"external\"\nauto-selects from the two external utilities, trying pdftocairo at\nfirst and on failure Ghostscript. If the selected utility fails, the\nform stays unflattened and so the filled in data will possibly not get\nprinted.\n\n\n##### Native PDF Printer / JCL Support\n\nNote that for most modern native PDF printers JCL is not needed any\nmore as they are controlled via IPP. For these the PPD files get\nauto-generated by the support of CUPS and cups-filters for driverless\nIPP printing.\n\npdftopdf will emit JCL when provided with a PPD file that includes the\n\"*JCLToPDFInterpreter:\" keyword.\n\nThis enables for hardware copy generation and device collate; e.g. with PJL:\n\n    *JCLBegin:           \"\u003c1B\u003e%-12345X@PJL JOB\u003c0A\u003e\"\n    *JCLToPDFInterpreter: \"@PJL ENTER LANGUAGE = PDF \u003c0A\u003e\"\n    *JCLEnd:             \"\u003c1B\u003e%-12345X@PJL EOJ \u003c0A\u003e\u003c1B\u003e%-12345X\"\n\nFor each marked option, the prefixed \"pdftopdfJCL\u003coption name\u003e\" keywords\ncan also be used to send raw JCL strings for that option.\nThese keywords also include *pdftopdfJCLBegin and *pdftopdfJCLCopies,\nThis allows the use of the same PPD for PDF- and PS-based workflows,\nas pdftopdfJCL... will not be read in the PS case.\n\nWhen the PPD contains the \"Copies\" keyword, pdftopdf will detect the use\nof PJL and has special code which adds \"@PJL SET COPIES=...\",\nor \"@PJL SET QTY=...\", respectively.\n\nOther JCL code can be injected via \"*JCLOpenUI: ...\" ... \"*JCLCloseUI: ...\".\n\n\n##### Special PDF comments\n\npdftopdf adds comments to the pdf preamble that might esp. be of use\nto subsequent filters, e.g.\n\n  % This file was generated by pdftopdf\n  %%PDFTOPDFNumCopies : 1\n  %%PDFTOPDFCollate : false\n\nThe \"NumCopies\" and \"Collate\" values refer to the expected device/hardware\ncopies, i.e. when pdftopdf's soft-copy generation did not handle this options.\n\n\n##### Limitations\n\npdftopdf does not support functions that are not related to printing\nfeatures, including interactive features and document interchange features.\nMany of these operators and sections are just ignored.\nSome of these may be output, but those functions are not assured.\n\n\n##### Known issues\n\n- Borders, esp. in the \"number-up=1 fitplot=false\"-case might be drawn\n  at incorrect locations.\n\n- JCL documentation is sparse.\n  The imagetopdf or old pdftopdf documentation contains a tad more information.\n\n- Missing AcroForm-content might surprise users printing PDF files directly /\n  from the command-line (see the Limitations section, above).\n\n\n#### TEXTTOPDF\n\n\nThis implements a texttopdf filter, and is derived from cups' texttops.\n\n\n##### To configure\n\n- texttopdf uses CUPS_DATADIR/charset/pdf.utf-8 for font configuration\n  (when utf-8 was requested as charset). The font names given there are \n  used as fontconfig selectors; the best matching font, that is both \n  monospaced and in a supported format (TTC, TTF or OTF) will then be used.\n\n- As a special exception, all fontnames that start with a '.' or '/' are\n  considered filenames, and fontconfig is skipped; the name is used directly\n  for loading the font file.\n\n- Implementation note: TrueType Collections (.TTC) are internally handled\n  by appending '/' and the index of the font inside the collection to \n  the filename (e.g. to use the second font of uming.ttc, the filename \n  uming.ttc/1 must be given to the fontembed-library).\n  By appending the index-field returned from fontconfig, this is completely\n  transparent to the user (but currently not widely tested).\n\n- You may look at the two examples: pdf.utf-8.simple and pdf.utf-8.heavy.\n\n\n##### To use\n\nThe filter is called just like any other cups filter. Have a\nlook at test.sh for example. \n\n##### Known Issues\n\n- Text extraction does not work (at least for pdftotext from xpdf)\n  for the resulting pdfs.\n\n- OTF(CFF) embedding currently does not subset the fonts.\n\n- Text wrapping in pretty-printing mode does not respect double-wide\n  characters (CJK), and thus produce wrong results (wrap too late)\n  for lines where they occur.  The fix is not trivial, since all the\n  pretty-printing processing is done without knowledge of / prior to\n  the font configuration (which is where single or double width\n  code-ranges are specified).\n\n- The hebrew example in test5.pdf shows one of our limitations:\n  Compose glyphs are not composed with the primary glyph but printed\n  as separate glyphs.\n\n##### Further Info\n\nFont embedding is handled by libfontembed in the cupsfilters/fontembed\nsubdirectory.\n\nPlease report all bugs to\n\nhttps://github.com/OpenPrinting/cups-filters/issues\n\n\n#### PDFTORASTER\n\n\n##### 1. INTRODUCTION\n\n\"pdftoraster\" is a filter for CUPS. It reads PDF files, convert it and\noutput CUPS raster.\n\n\"pdftoraster\" does not support functions that are not related to printing\nfeatures, including interactive features and document interchange features.\nMany of these operators and sections are just ignored.\nSome of these may be output, but those functions are not assured.\nEncryption feature is not supported.\n\n\n##### 2. COMMAND LINE\n\n\"pdftoraster\" is a CUPS filter, and the command line arguments, environment\nvariables and configuration files are in accordance with the CUPS filter\ninterface.\n\n    pdftoraster \u003cjob\u003e \u003cuser\u003e \u003ctitle\u003e \u003cnum-copies\u003e \u003coptions\u003e [\u003cfilename\u003e]\n\n\"pdftoraster\" ignores \u003cjob\u003e and \u003cuser\u003e.\n\u003ctitle\u003e is appended into the PDF dictionary as /Title.\n\u003cnum-copies\u003e specifies the number of document copies.\n\u003coptions\u003e is a CUPS option list.\n\u003cfilename\u003e is an input PDF file name.\n\nWhen omit the \u003cfilename\u003e, \"pdftoraster\" reads a PDF file from the stdin,\nand save it as a temporary file.\n\n\n##### 3. ENVIRONMENT VARIABLES\n\nThis program refers the following environment variable;\n\nPPD:  PPD file name of the printer.\n\n\n##### 4. COMMAND OPTIONS\n\nSee CUPS documents for details.\n\n\n##### 5. INFORMATION FOR DEVELOPERS\n\nFollowing information is for developers, not for driver users.\n\n\n##### 5.1 Options handled by a printer or \"pdftoraster\"\n\n\"pdftopdf\" outputs the following special comments from the 4th line in the\ncreated PDF data.\n\n    %%PDFTOPDFNumCopies : \u003ccopies\u003e --- \u003ccopies\u003e specified Number of Copies\n    %%PDFTOPDFCollate : \u003ccollate\u003e --- \u003ccollate\u003e is true or false\n\n\"pdftoraster\" overrides the command line options by above two option's values.\n \n\n##### 5.2 Temporally files location\n\n\"pdftoraster\" creates temporally files if needed. Temporary files are created\nin the location specified by TMPDIR environment variable. Default location\nis \"/tmp\".\n\n\n#### PCLMTORASTER\n\n\n##### 1. INTRODUCTION\n\n\"pclmtoraster\" is a filter for pclm and raster-only pdf files.\nIt reads the raster graphics from each page using the QPDF API and converts\nit to CUPS/PWG Raster. This filter supports all PCLm files. PDF files with\nsingle page bitmap for each page and one of the following colorspaces with\n8 Bits-per-component are supported DeviceGray, DeviceRGB and DeviceCMYK.\n\n\n##### 2. ENVIRONMENT VARIABLES\n\nThis program refers the following environment variable;\n\n    PPD:  PPD file name of the printer.\n\n\n##### 3. COMMAND OPTIONS\n\nBi-Level output\n\n    print-color-mode=bi-level\n\nUse \"bi-level\" color mode to apply threshold dithering for 1 bit B/W outputs.\nBy default, ordered dithering is used.\n\nFor other options, see CUPS documents for more details.\n\n\n##### 4. INFORMATION FOR DEVELOPERS\n\nFollowing information is for developers, not for filter users.\n\n##### 4.1 Temporary files location\n\n\"pclmtoraster\" creates temporary files if needed. Temporary files are created\nin the location specified by TMPDIR environment variable. Default location\nis \"/tmp\".\n\n\n#### TEXTTOTEXT\n\nThis is a special filter for text-only printers (e. g. line printers,\ndaisy-wheel printers, POS printers, ...) or for using printers in\ntheir text mode (e. g. dot-matrix printers or otherwise unsupported\nprinters). It takes plain text (UTF-8-encoded as this is standard with\nCUPS) and not PDF as input.\n\nThe texttotext filter replaces the former textonly filter.\n\nIt is for the following use cases:\n\n- Using text-only printers, like line printers or daisy-wheel\n  printers. Note that only text can get printed in the way the printer\n  is designed. No support for graphics printing tricks like ASCII art\n  or printing pixels with the period character.\n\n- Fast and less resource-consuming text printing with dot-matrix\n  printers using the printer's text mode instead of converting the\n  text to PDF and printing the PDF in the printer's graphics mode,\n  which is slow, loud, and consumes much more ink.\n\n- POS printing. POS printers often print only text on roll paper. This\n  filter has a non-paginated mode which prints continuously, ignoring\n  page height definitions.\n\nThe filter has the following features:\n\n- Conversion of UTF-8 to most printer's encodings.\n\n- To each page size a number of lines and columns is assigned, after that\n  you only need to select the size of the paper in use.\n\n- At end of page you can optionally send a Form Feed or let the filter fill\n  up the rest of the page with blank lines.\n\n- New lines can be initiated by Line Feed, Carriage Return, or both.\n\n- Adjustable margins.\n\n- Adjustable width for tab stops.\n\n- Pagination can be turned off for roll paper or continuous printing in\n  general.\n\n- Wrapping or truncation of long lines\n\n- Support for most of CUPS' page management options (only with\n  pagination turned on): page-ranges, page-set, output-order, collate,\n  multiple copies.\n\nSetting up the printer\n\nIn the printer setup tool select the \"Generic Text-Only Printer\" (with\nlpadmin use \"-m drv:///cupsfilters.drv/textonly.ppd\"), then under the\n\"Installable Options\" adjust the following:\n\n- Which page sizes to use and how many lines and columns the printer\n  is capable to print on them. The default setting for lines and\n  columns assume 6 lines per inch and 10 columns per inch.\n\n- Whether to send a Form Feed character after each page. Sending a\n  Form Feed is highly recommended to get the content of each page\n  exactly onto the desired sheet. If the printer does not support Form\n  Feed characters, turn them off and make sure that you have adjusted\n  the correct number of lines for each page size, as the printer is\n  advancing pages by filling up the rest of the paper with blank\n  lines.\n\n- How the printer advancs to a new line. Most printers require both\n  Crriage Return and Line Feed (the DOS/Windows standard), but some\n  would also work with either Carriage Return or Line Feed.\n\n- The printer's encoding: Most text and dot-matrix printers (usually\n  older devices) do not understand CUPS' standard encoding UTF-8 but\n  instead, the use a simpler encoding (where each character is\n  represented by one byte). ASCII should always work, but does not\n  support letters with accents. So check the printer's manual what is\n  supported. You cannot only use the encodings suggested by the PPD\n  file, but any one-byte-per-character encoding which the \"iconv\"\n  utility supports (see \"iconv --list\" for a list of encodings).\n\nAlso note that text-only and dot-matrix printers often have a DIP\nswitch block which allows for some hardware configuration, like\nnewline characters, length of page, input encoding, ...\n\nOptions of the texttotext filter:\n\nTo be usually used when sending a job:\n\nPageSize: Paper format to be used. Make sure that the number of lines\nand columns printable on each paper size are correctly adjusted with\nthe appropriate setup option. The page height is ignore when\npagination is turned off. Possible values: Letter, Legal, Tabloid,\nLedger, A4, A3, FanFoldGerman, FanFoldGermanLegal, 11x14Rotated,\nLegalRotated, Custom1, Custom2, Custom3\n\nOverLongLines: What to do with lines longer that the width of the\npage: Truncate: Simply drop the extra characters; WrapAtWidth\n(default): Continue the line in the next line on the paper; WordWrap:\nAs WrapAtWidth, but do not cut in the middle of a word.\n\nTabWidth: Width of a tab stop. Can be any positive number.\n\nPagination: On: Text is divided in pages depending on the page size\nselection, with each page having the user-selected margins,\nrecommended for sheet paper; Off: Text is printed continuously,\nignoring page breaks and the height and upper and lower margins of the\ndestination page size, recommended for roll paper, POS, long lists on\ncontinuous paper, ... Note that with pagination turned off, multiple\ncopies, collate, page-ranges, page-set, and output-order are not\nsupported and therefore ignored.\n\npage-left, page-right, page-top, page-bottom: Width of the margins\nleft blank, counted in lines or columns. Top and bottom margins are\nignored when pagination is turned off. Can be any positive number or\nzero for no margin.\n\nTo be usually used when setting up the printer:\n\nPrinterEncoding: The printer's character encoding (code page). Any\nencoding which the iconv utility can generate (see \"iconv --list\") and\nwhich uses only one byte per character can be used. This should\nsupport practically any printer which is capable of printing\ntext. ASCII is the default setting. See the printer's manual for the\ncorrect encoding to use.\n\nNewlineCharacters: The characters sent on the end of a line, LineFeed\n(LF), Crriage Return (CR), or both Carriage Return and Line Feed\n(CRLF). Default is CRLF as most printers require this.\n\nSendFF: On: Send a Form Feed after each page, so that printer changes\nto the next sheet. Off: Do not send Form Feeds. To advance to the next\npage blank lines are printed to fill up the page (requires the number\nof limes for the selected page size correctly being set). When\npagination is off, Form Feeds are never sent.\n\nLetterAvailable, LegalAvailable, TabloidAvailable, LedgerAvailable,\nA4Available, A3Available, FanFoldGermanAvailable,\nFanFoldGermanLegalAvailable, 11x14RotatedAvailable,\nLegalRotatedAvailable, Custom1Available, Custom2Available,\nCustom3Available: On: Paper of this size is available; Off: This paper\nsize is not available.\n\nLetterNumLines, LegalNumLines, TabloidNumLines, LedgerNumLines,\nA4NumLines, A3NumLines, FanFoldGermanNumLines,\nFanFoldGermanLegalNumLines, 11x14RotatedNumLines,\nLegalRotatedNumLines, Custom1NumLines, Custom2NumLines,\nCustom3NumLines: Maximum number of text lines fitting on the paper\nsize. Default value is selected assuming 6 lines per inch. Can be any\npositive number.\n\nLetterNumColumns, LegalNumColumns, TabloidNumColumns,\nLedgerNumColumns, A4NumColumns, A3NumColumns, FanFoldGermanNumColumns,\nFanFoldGermanLegalNumColumns, 11x14RotatedNumColumns,\nLegalRotatedNumColumns, Custom1NumColumns, Custom2NumColumns,\nCustom3NumColumns: Maximum number of columns (characters) fitting on\nthe paper size. Default value is selected assuming 10 characters per\ninch. Can be any positive number.\n\nStandard CUPS options supported:\n\npage-ranges, page set, output-order, collate\n\nNote that these options and multiple copies are ignored when\npagination is turned off.\n\n\n#### BEH - Backend Error Handler wrapper backend\n\nA wrapper for CUPS backends to make error handling more configurable\n\nUsually, if a CUPS backend exits with an error status other than zero\n(for example if a printer is not turned on or not reachable on the\nnetwork), CUPS disables the print queue and one can only print again\nif a system administrator re-enables the queue manually. Even\nrestarting CUPS (or rebooting) does not re-enable disabled queues.\n\nFor system administrators this can get annoying, for newbie users who\nare not aware of this problem it looks like that CUPS is severely\nbroken. They remove and re-install print queues, getting on the nerves\nof distro install support, people, or even switch back to a\nproprietary operating system.\n\nNowadays CUPS allows some configurability to avoid this, setting the\nError Policy to \"retry-job\", but this does not allow to retry for\ninfinitely many times and generally does not allow to change the\nnumber of repetitions. It is also not possible to simply drop the job\nwithout disabling the queue when CUPS gives up repeating the job.\n\nThis script makes the handling of such backend errors more\nconfigurable, so that the problem can easily be worked around. The new\npossibilities are:\n\n - Let queues simply not being disabled. Simple approach, but job gets\n   lost.\n\n - Repeat a given number of times.\n\n - Repeat infinitely often, until the job gets finally through. This\n   is the standard of LPRng, and it eliminates loss of the job.\n\n - The interval between two attempts to run the backend can also be\n   configured.\n\n - Configuration is done independently for each print queue. So local\n   printers and network printers can be treated differently.\n\n\nUsage: \n\nActivate \"beh\" for your print queue(s) with command(s) like this:\n\n    lpadmin -p \u003cqueue name\u003e -E -v beh:/\u003cdd\u003e/\u003catt\u003e/\u003cdelay\u003e/\u003coriginaluri\u003e\n\nwith\n\n    \u003cqueue name\u003e:     The name of your print queue\n    \u003cdd\u003e:             Don't Disable, if \"1\", beh always exits with zero\n                      status, so the queue gets never disabled when the\n                      original backend exits with an error. \"0\" carries\n                      the error status of the last call of the backend\n                      (after \u003catt\u003e retries) on to CUPS, so the queue\n                      usually gets disabled.\n    \u003catt\u003e:            Attempts, number of attempts to recall the backend\n                      in case of an error. \"0\" means infinite retries. In\n                      this case \u003cdd\u003e gets meaningless.\n    \u003cdelay\u003e:          Delay between two attempts to call the beckend, to\n                      be given in seconds and as an integer number.\n                      Meaningless if \u003catt\u003e is one.\n    \u003coriginaluri\u003e:    The original URI, which your queue had before. Can \n                      be determined with \"lpstat -v\".\n\nAll parameters, especially, \u003cdd\u003e, \u003catt\u003e, and \u003cdelay\u003e have always to be\nspecified, even if one of them is meaningless due to the setting of\nthe others.\n\nbeh works with every backend except the \"hp\" backend of HPLIP, as the\n\"hp\" backend repeats failed jobs by itself.\n\nExample URIs:\n\n    beh:/1/3/5/socket://printer:9100\n\n      On the network printer with host name \"printer\" it is tried to\n      access 3 times with 5 second delays between the attempts. If the job\n      still fails, the queue is not disabled (and the job discarded).\n\n    beh:/0/10/60/socket://printer:9100\n\n      Retry 10 times in one minute intervals, disable the queue when still\n      not succeeding.\n\n    beh:/1/0/60/usb://Brother/HL-5040%20series\n\n      On a Brother HL-5040 on the USB try infinitely often until the\n      printer comes back, in intervals of one minute. This way the job\n      does not get lost when the printer is turned off and one can\n      intendedly delay printing by simply switching off the printer. The\n      ideal configuration for desktop printers and/or home users.\n\nOriginally this backend was written in Perl and part of the\nfoomatic-filters package. It was not overtaken into cups-filters\ntogether with foomatic-rip to avoid the introduction of a dependency\non Perl. Now it has been re-written in C and so it can be part of\ncups-filters without introducing new dependencies.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenprinting%2Fcups-filters","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenprinting%2Fcups-filters","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenprinting%2Fcups-filters/lists"}