diff --git a/hosts/servers/tule.nix b/hosts/servers/tule.nix new file mode 100644 index 00000000..2d5a129d --- /dev/null +++ b/hosts/servers/tule.nix @@ -0,0 +1,55 @@ +{ config, ... }: + +{ + imports = [ ../../hardware/virtualized.nix ]; + + networking.hostName = "tule"; + + ocf.network = { + enable = true; + lastOctet = 127; + }; + + ocf.acme.enable = true; + + ocf.printhost = { + enable = true; + mysqlPasswordFile = config.age.secrets.printhost-mysql-password.path; + wayoutPasswordFile = config.age.secrets.printhost-wayout-password.path; + redisPasswordFile = config.age.secrets.printhost-redis-password.path; + # TODO: change to "printhost.ocf.berkeley.edu" once tule replaces whiteout + printhostUrl = "printhost-dev.ocf.berkeley.edu"; + }; + + # Secrets — create with: agenix -e secrets/master-keyed/printhost/.age + age.secrets.printhost-mysql-password = { + rekeyFile = ../../secrets/master-keyed/printhost/mysql-password.age; + mode = "0440"; + group = "lp"; + }; + age.secrets.printhost-wayout-password = { + rekeyFile = ../../secrets/master-keyed/printhost/wayout-password.age; + mode = "0440"; + group = "lp"; + }; + age.secrets.printhost-redis-password = { + rekeyFile = ../../secrets/master-keyed/printhost/redis-password.age; + mode = "0440"; + group = "lp"; + }; + + # Postfix relay so ocflib can send mail via sendmail. + services.postfix = { + enable = true; + settings.main = { + mydomain = "ocf.berkeley.edu"; + myorigin = "ocf.berkeley.edu"; + mydestination = ""; + inet_interfaces = "loopback-only"; + relayhost = [ "smtp.ocf.berkeley.edu" ]; + sender_canonical_maps = "static:root@ocf.berkeley.edu"; + }; + }; + + system.stateVersion = "25.05"; +} diff --git a/modules/graphical/apps/browsers.nix b/modules/graphical/apps/browsers.nix index 01f25acf..865c2b77 100644 --- a/modules/graphical/apps/browsers.nix +++ b/modules/graphical/apps/browsers.nix @@ -94,6 +94,23 @@ in }; Preferences = { + "print.printer_color-double.print_paper_height" = { + Value = "279.4"; + Status = "default"; + }; + "print.printer_color-double.print_paper_id" = { + Value = "na_letter"; + Status = "default"; + }; + "print.printer_color-double.print_paper_size_unit" = { + Value = 1; + Status = "default"; + Type = "number"; + }; + "print.printer_color-double.print_paper_width" = { + Value = "215.9"; + Status = "default"; + }; "print.printer_color-single.print_paper_height" = { Value = "279.4"; Status = "default"; diff --git a/modules/printhost/conf/cups-files.conf b/modules/printhost/conf/cups-files.conf new file mode 100644 index 00000000..9fa455a1 --- /dev/null +++ b/modules/printhost/conf/cups-files.conf @@ -0,0 +1,4 @@ +SystemGroup ocfstaff opstaff + +ConfigFilePerm 0644 +LogFilePerm 0644 diff --git a/modules/printhost/conf/cupsd.conf b/modules/printhost/conf/cupsd.conf new file mode 100644 index 00000000..0fe1ba79 --- /dev/null +++ b/modules/printhost/conf/cupsd.conf @@ -0,0 +1,104 @@ +ServerName @cups-url@ +ServerAlias * + +SSLPort 443 + +# Temporary: enable debug logging +LogLevel debug2 + +LimitRequestBody 256m + +Browsing Off +BrowseLocalProtocols dnssd +HostNameLookups On +DefaultAuthType Basic + + + Order allow,deny + Allow from 169.229.226.0/24 + Allow from [2607:f140:8801::]/48 + Allow from 127.0.0.0/8 + Allow from [::1] + + + AuthType Default + Require user @SYSTEM + Order allow,deny + Allow from 169.229.226.0/24 + Allow from [2607:f140:8801::]/48 + Allow from 127.0.0.0/8 + Allow from [::1] + + + Encryption Required + Order allow,deny + Allow from 169.229.226.0/24 + Allow from [2607:f140:8801::]/48 + Allow from 127.0.0.0/8 + Allow from [::1] + + + AuthType Default + Require user @SYSTEM + Order allow,deny + Allow from 169.229.226.0/24 + Allow from [2607:f140:8801::]/48 + Allow from 127.0.0.0/8 + Allow from [::1] + + + + JobPrivateAccess all + JobPrivateValues none + + Require user @OWNER @SYSTEM + Order deny,allow + + + AuthType Default + Require user @SYSTEM + Order deny,allow + + + AuthType Default + Require user @SYSTEM + Order deny,allow + + + Require user @OWNER @SYSTEM + Order deny,allow + + + Order deny,allow + + + + + + AuthType Default + Order deny,allow + + + AuthType Default + Require user @OWNER @SYSTEM + Order deny,allow + + + AuthType Default + Require user @SYSTEM + Order deny,allow + + + AuthType Default + Require user @SYSTEM + Order deny,allow + + + AuthType Default + Require user @OWNER @SYSTEM + Order deny,allow + + + Order deny,allow + + diff --git a/modules/printhost/cups.nix b/modules/printhost/cups.nix new file mode 100644 index 00000000..badaad00 --- /dev/null +++ b/modules/printhost/cups.nix @@ -0,0 +1,263 @@ +{ + lib, + config, + pkgs, + ... +}: + +let + cfg = config.ocf.printhost; + + # Python environment for the enforcer quota script + pythonEnv = pkgs.python312.withPackages ( + ps: with ps; [ + ocflib + pycups + pymysql + requests + redis + ] + ); + + # enforcer-pc: reads %%Pages: from PostScript spool file. + # Uses explicit Nix store paths for head/tail/awk — these run as subprocesses + # of the backend, which inherits CUPS's restricted PATH. + enforcerPc = pkgs.writeShellScript "enforcer-pc" '' + set -euo pipefail + (${pkgs.coreutils}/bin/head -n20; ${pkgs.coreutils}/bin/tail -n20) < "$1" \ + | ${pkgs.gawk}/bin/awk '/^%%Pages: [0-9]+$/ {print $2}' + ''; + + # enforcer-size: reads %%DocumentMedia:/%%PageMedia: from PostScript spool file. + enforcerSize = pkgs.writeShellScript "enforcer-size" '' + set -euo pipefail + (${pkgs.coreutils}/bin/head -n20; ${pkgs.coreutils}/bin/tail -n20) < "$1" \ + | ${pkgs.gawk}/bin/awk ' + /^%%PageMedia:/ {print $2} + /^%%DocumentMedia:/ {print $2} + ' \ + | ${pkgs.coreutils}/bin/head -n1 + ''; + + # enforcer.py with @enforcer_pc@ and @enforcer_size@ paths substituted + enforcerScript = pkgs.replaceVars ./scripts/enforcer.py { + enforcer_pc = enforcerPc; + enforcer_size = enforcerSize; + }; + + # Wrapper that invokes enforcer.py with the right Python environment + enforcerBin = pkgs.writeShellScript "enforcer" '' + exec ${pythonEnv}/bin/python3 ${enforcerScript} "$@" + ''; + + # ocfps CUPS filter: PDF → rasterized PostScript via pdftops | pstops + ocfpsFilter = pkgs.replaceVars ./scripts/ocfps { + pdftops = "${pkgs.poppler-utils}/bin/pdftops"; + pstops = "${pkgs.cups}/lib/cups/filter/pstops"; + qpdf = "${pkgs.qpdf}/bin/qpdf"; + grep = "${pkgs.gnugrep}/bin/grep"; + awk = "${pkgs.gawk}/bin/awk"; + }; + + # Shell wrapper so the filter runs under the Nix-store bash rather than + # relying on bash being in PATH (CUPS filters run in a restricted env). + ocfpsBin = pkgs.writeShellScript "ocfps" '' + exec ${pkgs.bash}/bin/bash ${ocfpsFilter} "$@" + ''; + + # Package exposing ocfps at $out/lib/cups/filter/ocfps for services.printing.drivers + ocfCupsFilter = pkgs.runCommand "ocf-cups-filter" { } '' + install -Dm0755 ${ocfpsBin} $out/lib/cups/filter/ocfps + ''; + + # ocf-cups-backend with enforcer path and password file paths substituted. + # mysqlPasswordFile/wayoutPasswordFile/redisPasswordFile are paths to agenix secrets. + ocfBackendScript = pkgs.replaceVars ./scripts/ocf-cups-backend { + enforcer = enforcerBin; + mysqlPasswordFile = cfg.mysqlPasswordFile; + wayoutPasswordFile = cfg.wayoutPasswordFile; + redisPasswordFile = cfg.redisPasswordFile; + }; + + # Shell wrapper so the backend runs under the Nix-store python3 rather than + # relying on python3 being in PATH (CUPS backends run in a restricted env). + ocfBackendBin = pkgs.writeShellScript "ocfbackend" '' + exec ${pythonEnv}/bin/python3 ${ocfBackendScript} "$@" + ''; + + # Package exposing the backend at $out/lib/cups/backend/ocfbackend (mode 0700 + # so CUPS runs it as root, which is required for raw socket access to printers) + ocfCupsBackend = pkgs.runCommand "ocf-cups-backend" { } '' + install -Dm0700 ${ocfBackendBin} $out/lib/cups/backend/ocfbackend + ''; + + # PPD files package — all printers reference these at setup time + ppdDir = pkgs.runCommand "printhost-ppds" { } '' + install -Dm0644 ${./ppd/logjam-single.ppd} $out/share/ppd/logjam-single.ppd + install -Dm0644 ${./ppd/logjam-double.ppd} $out/share/ppd/logjam-double.ppd + install -Dm0644 ${./ppd/pagefault-single.ppd} $out/share/ppd/pagefault-single.ppd + install -Dm0644 ${./ppd/pagefault-double.ppd} $out/share/ppd/pagefault-double.ppd + install -Dm0644 ${./ppd/papercut-single.ppd} $out/share/ppd/papercut-single.ppd + install -Dm0644 ${./ppd/papercut-double.ppd} $out/share/ppd/papercut-double.ppd + install -Dm0644 ${./ppd/epson-single.ppd} $out/share/ppd/epson-single.ppd + install -Dm0644 ${./ppd/epson-double.ppd} $out/share/ppd/epson-double.ppd + ''; + +in +{ + config = lib.mkIf cfg.enable { + + services.printing = { + enable = true; + startWhenNeeded = false; + listenAddresses = [ + "*:80" + "*:631" + ]; + browsed.enable = false; + browsing = false; + stateless = true; + # Substitute the public hostname into ServerName + extraConf = lib.mkForce ( + lib.replaceStrings [ "@cups-url@" ] [ cfg.printhostUrl ] (builtins.readFile ./conf/cupsd.conf) + ); + extraFilesConf = builtins.readFile ./conf/cups-files.conf; + # Expose our custom filter and backend to cupsd + drivers = [ + ocfCupsFilter + ocfCupsBackend + ]; + }; + + systemd.services.cups.preStart = '' + # /var/lib/cups is a tmpfs (stateless = true), so this runs every boot. + # CUPS resolves its SSL cert by the machine's actual hostname, not ServerName, + # so we name the files after the host. The cert includes printhostUrl as a SAN + # so clients connecting to either hostname get a valid cert. + mkdir -p /var/lib/cups/ssl + cp /var/lib/acme/${config.networking.hostName}.ocf.berkeley.edu/fullchain.pem \ + /var/lib/cups/ssl/${config.networking.hostName}.ocf.berkeley.edu.crt + cp /var/lib/acme/${config.networking.hostName}.ocf.berkeley.edu/key.pem \ + /var/lib/cups/ssl/${config.networking.hostName}.ocf.berkeley.edu.key + cp /var/lib/acme/${config.networking.hostName}.ocf.berkeley.edu/fullchain.pem \ + "/var/lib/cups/ssl/${config.networking.hostName}.OCF.Berkeley.EDU.crt" + cp /var/lib/acme/${config.networking.hostName}.ocf.berkeley.edu/key.pem \ + "/var/lib/cups/ssl/${config.networking.hostName}.OCF.Berkeley.EDU.key" + + # Deny raw job submission (clients must go through filters) + echo '# deny printing raw jobs' > /etc/cups/raw.convs + echo '# deny printing raw jobs' > /etc/cups/raw.types + ''; + + # Declaratively configure all printers and classes on every boot. + # Runs after cups.service since /var/lib/cups is stateless. + systemd.services.cups-setup-printers = { + description = "Declaratively configure CUPS printers and classes"; + after = [ "cups.service" ]; + wants = [ "cups.service" ]; + wantedBy = [ "cups.service" ]; + partOf = [ "cups.service" ]; + path = [ config.services.printing.package ]; + serviceConfig.Type = "oneshot"; + script = '' + set -euo pipefail + + # Wait for cupsd socket to be ready + for i in $(seq 1 30); do + if lpstat -H >/dev/null 2>&1; then break; fi + sleep 2 + done + + # ── HP LaserJet printers (socket/9100 raw TCP) ────────────────────── + lpadmin -p logjam-single \ + -v ocfbackend:socket://169.229.226.92:9100 \ + -P ${ppdDir}/share/ppd/logjam-single.ppd \ + -D "HP LaserJet M806 single-sided" -L "OCF lab" \ + -E -o printer-is-shared=false + + lpadmin -p logjam-double \ + -v ocfbackend:socket://169.229.226.92:9100 \ + -P ${ppdDir}/share/ppd/logjam-double.ppd \ + -D "HP LaserJet M806 double-sided" -L "OCF lab" \ + -E -o printer-is-shared=false + + lpadmin -p pagefault-single \ + -v ocfbackend:socket://169.229.226.91:9100 \ + -P ${ppdDir}/share/ppd/pagefault-single.ppd \ + -D "HP LaserJet M806 single-sided" -L "OCF lab" \ + -E -o printer-is-shared=false + + lpadmin -p pagefault-double \ + -v ocfbackend:socket://169.229.226.91:9100 \ + -P ${ppdDir}/share/ppd/pagefault-double.ppd \ + -D "HP LaserJet M806 double-sided" -L "OCF lab" \ + -E -o printer-is-shared=false + + lpadmin -p papercut-single \ + -v ocfbackend:socket://169.229.226.93:9100 \ + -P ${ppdDir}/share/ppd/papercut-single.ppd \ + -D "HP LaserJet M806 single-sided" -L "OCF lab" \ + -E -o printer-is-shared=false + + lpadmin -p papercut-double \ + -v ocfbackend:socket://169.229.226.93:9100 \ + -P ${ppdDir}/share/ppd/papercut-double.ppd \ + -D "HP LaserJet M806 double-sided" -L "OCF lab" \ + -E -o printer-is-shared=false + + # ── Epson ET-5880 (IPP/S) ──────────────────────────────────────────── + lpadmin -p epson-single \ + -v ocfbackend:ipps://169.229.226.96/ipp/print \ + -P ${ppdDir}/share/ppd/epson-single.ppd \ + -D "Epson ET-5880 single-sided color" -L "OCF lab" \ + -E -o printer-is-shared=false + + lpadmin -p epson-double \ + -v ocfbackend:ipps://169.229.226.96/ipp/print \ + -P ${ppdDir}/share/ppd/epson-double.ppd \ + -D "Epson ET-5880 double-sided color" -L "OCF lab" \ + -E -o printer-is-shared=false + + # ── Classes ────────────────────────────────────────────────────────── + for p in logjam-double pagefault-double papercut-double; do + lpadmin -p "$p" -c double + done + lpadmin -p double -D "Double-sided printing" -L "OCF lab" \ + -P ${ppdDir}/share/ppd/logjam-double.ppd + + for p in logjam-single pagefault-single papercut-single; do + lpadmin -p "$p" -c single + done + lpadmin -p single -D "Single-sided printing" -L "OCF lab" \ + -P ${ppdDir}/share/ppd/logjam-single.ppd + + lpadmin -p epson-single -c color-single + lpadmin -p color-single -D "Single-sided color printing" -L "OCF lab" \ + -P ${ppdDir}/share/ppd/epson-single.ppd + + lpadmin -p epson-double -c color-double + lpadmin -p color-double -D "Double-sided color printing" -L "OCF lab" \ + -P ${ppdDir}/share/ppd/epson-double.ppd + + # Enable and accept jobs for all classes (shared with clients) + for cls in single double color-single color-double; do + cupsenable "$cls" + cupsaccept "$cls" + lpadmin -p "$cls" -o printer-is-shared=true + done + ''; + }; + + # prevent conflict with cups built in mDNS + services.avahi.enable = lib.mkForce false; + + networking.firewall = { + allowedTCPPorts = [ + 80 + 443 + 631 + ]; + allowedUDPPorts = [ 631 ]; + }; + }; +} diff --git a/modules/printhost/default.nix b/modules/printhost/default.nix new file mode 100644 index 00000000..7fd031f6 --- /dev/null +++ b/modules/printhost/default.nix @@ -0,0 +1,57 @@ +{ lib, config, ... }: + +{ + imports = [ + ./cups.nix + ./enforcer.nix + ./monitor.nix + ]; + + options.ocf.printhost = { + enable = lib.mkEnableOption "OCF print server"; + + mysqlPasswordFile = lib.mkOption { + type = lib.types.path; + description = "Path to file containing the MySQL password."; + }; + + wayoutPasswordFile = lib.mkOption { + type = lib.types.path; + description = "Path to file containing the wayout notification password."; + }; + + redisPasswordFile = lib.mkOption { + type = lib.types.path; + description = "Path to file containing the Redis broker password."; + }; + + printhostUrl = lib.mkOption { + type = lib.types.str; + description = "Public hostname for the print server (used as CUPS ServerName and TLS cert name)."; + default = "printhost.ocf.berkeley.edu"; + }; + }; + + config = lib.mkIf config.ocf.printhost.enable { + # cups user needs acme group to read /var/lib/acme certs in preStart + users.users."cups".extraGroups = [ "acme" ]; + # root needs lp group to run lpadmin in the printer setup service + users.users."root".extraGroups = [ "lp" ]; + + # Reload CUPS when the host's LE cert is renewed (cert lives at hostName path, + # printhost SAN is included as an extraCert below) + security.acme.certs."${config.networking.hostName}.ocf.berkeley.edu".reloadServices = [ + "cups.service" + ]; + + # Add printhostUrl and its .ocf.io variant as SANs on tule's cert + ocf.acme.extraCerts = + let + cfg = config.ocf.printhost; + in + [ + cfg.printhostUrl + (lib.replaceStrings [ ".ocf.berkeley.edu" ] [ ".ocf.io" ] cfg.printhostUrl) + ]; + }; +} diff --git a/modules/printhost/enforcer.nix b/modules/printhost/enforcer.nix new file mode 100644 index 00000000..2a4368e3 --- /dev/null +++ b/modules/printhost/enforcer.nix @@ -0,0 +1,83 @@ +{ + pkgs, + lib, + config, + ... +}: + +let + cfg = config.ocf.printhost; + + pythonEnv = pkgs.python312.withPackages ( + ps: with ps; [ + ocflib + pymysql + ] + ); + + privacyCleanupScript = pkgs.writeText "enforcer-privacy-cleanup.py" '' + import logging + import os + import sys + import pymysql + + logging.basicConfig( + level=logging.INFO, + format="%(message)s", + stream=sys.stderr, + ) + + logging.info("Starting privacy-cleanup run") + mysql_passwd = open(os.environ['ENFORCER_MYSQL_PASSWORD']).read().strip() + conn = pymysql.connect( + host='mysql.ocf.berkeley.edu', + user='ocfprinting', + password=mysql_passwd, + db='ocfprinting', + ) + with conn: + with conn.cursor() as c: + c.execute( + 'UPDATE jobs SET doc_name = NULL ' + 'WHERE time < DATE_SUB(NOW(), INTERVAL 14 DAY)' + ) + logging.info(f"Cleaned up {c.rowcount} job document titles") + conn.commit() + logging.info("Finishing privacy-cleanup run") + ''; + + privacyCleanupBin = pkgs.writeShellScript "enforcer-privacy-cleanup" '' + exec ${pythonEnv}/bin/python3 ${privacyCleanupScript} + ''; + +in +{ + config = lib.mkIf cfg.enable { + # ocflib hardcodes /usr/sbin/sendmail; on NixOS postfix provides it at + # /run/wrappers/bin/sendmail via security.wrappers. + systemd.tmpfiles.rules = [ + "L /usr/sbin/sendmail - - - - /run/wrappers/bin/sendmail" + ]; + + # Hourly job to NULL out doc_name for jobs older than 14 days (privacy). + systemd.services.enforcer-privacy-cleanup = { + description = "Remove old print job document titles for privacy"; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${privacyCleanupBin}"; + }; + environment = { + ENFORCER_MYSQL_PASSWORD = cfg.mysqlPasswordFile; + PYTHONUNBUFFERED = "1"; + }; + }; + + systemd.timers.enforcer-privacy-cleanup = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnBootSec = "1h"; + OnUnitActiveSec = "1h"; + }; + }; + }; +} diff --git a/modules/printhost/monitor.nix b/modules/printhost/monitor.nix new file mode 100644 index 00000000..27a8ada9 --- /dev/null +++ b/modules/printhost/monitor.nix @@ -0,0 +1,54 @@ +{ + pkgs, + lib, + config, + ... +}: + +let + cfg = config.ocf.printhost; + + pythonEnv = pkgs.python312.withPackages ( + ps: with ps; [ + pycups + prometheus-client + ] + ); + + monitorScriptPy = pkgs.writeTextFile { + name = "monitor-cups.py"; + text = builtins.readFile ./scripts/monitor-cups.py; + }; + + monitorBin = pkgs.writeShellScript "monitor-cups" '' + exec ${pythonEnv}/bin/python3 ${monitorScriptPy} "$@" + ''; + +in +{ + config = lib.mkIf cfg.enable { + + systemd.tmpfiles.rules = [ + "d /srv/prometheus 0755 root root -" + ]; + + systemd.services.monitor-cups = { + description = "CUPS metrics exporter for Prometheus"; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${monitorBin} /srv/prometheus/cups.prom"; + }; + environment = { + PYTHONUNBUFFERED = "1"; + }; + }; + + systemd.timers.monitor-cups = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnBootSec = "1min"; + OnUnitActiveSec = "1min"; + }; + }; + }; +} diff --git a/modules/printhost/ppd/epson-double.ppd b/modules/printhost/ppd/epson-double.ppd new file mode 100644 index 00000000..3f5f4f9c --- /dev/null +++ b/modules/printhost/ppd/epson-double.ppd @@ -0,0 +1,1404 @@ +*PPD-Adobe: "4.3" +*% ========================================= +*% Copyright(C) Seiko Epson Corporation 2020. +*% All rights reserved. +*% ========================================= +*% PPD for EPSON ET-5880 Series PS +*% Sep. 13, 2019 +*% ========================================= + +*FormatVersion: "4.3" +*FileVersion: "1.20" +*LanguageEncoding: ISOLatin1 +*LanguageVersion: English +*PCFileName: "EPET5880.PPD" +*PSVersion: "(3017.104) 0" +*Product: "(ET-5880 Series)" +*Product: "(EPSON ET-5880 Series)" +*ModelName: "EPSON ET-5880 Series PS" +*ShortNickName: "EPSON ET-5880 Series PS" +*NickName: "EPSON ET-5880 Series PS v3017.104" +*Manufacturer: "Epson" +*cupsLanguages: "fr es it de pt nl" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" +*cupsManualCopies: False + +*%***** Notes on order dependency ***** +*% 20 Input Tray Selection +*% 30 Image protect - used in conjunction with 50, Rendering Color +*% and depth, to validate page size vs. available frame buffer memory +*% 55 Color Quality - must follow 50 since color quality is only effective +*% when color mode is color +*% 70 Selectable Separations - Overrides color model specified in (50) so +*% it must follow it in the file +*% 100 Page Size - must be set after 30, 50, and 60 since these determine +*% the frame buffer memory size and thus, the allowable page sizes. + + +*UIConstraints: *InputSlot LC2 *PageSize A5.Transverse +*UIConstraints: *InputSlot LC2 *PageSize A6 +*UIConstraints: *InputSlot LC2 *PageSize B6 +*UIConstraints: *InputSlot LC2 *PageSize Env10 +*UIConstraints: *InputSlot LC2 *PageSize EnvDL +*UIConstraints: *InputSlot LC2 *PageSize EnvC6 +*UIConstraints: *InputSlot LC2 *PageRegion A5.Transverse +*UIConstraints: *InputSlot LC2 *PageRegion A6 +*UIConstraints: *InputSlot LC2 *PageRegion B6 +*UIConstraints: *InputSlot LC2 *PageRegion Env10 +*UIConstraints: *InputSlot LC2 *PageRegion EnvDL +*UIConstraints: *InputSlot LC2 *PageRegion EnvC6 +*UIConstraints: *Duplex DuplexTumble *PageSize Env10 +*UIConstraints: *Duplex DuplexTumble *PageSize EnvDL +*UIConstraints: *Duplex DuplexTumble *PageSize EnvC6 +*UIConstraints: *Duplex DuplexNoTumble *PageSize Env10 +*UIConstraints: *Duplex DuplexNoTumble *PageSize EnvDL +*UIConstraints: *Duplex DuplexNoTumble *PageSize EnvC6 +*UIConstraints: *Duplex DuplexTumble *PageRegion Env10 +*UIConstraints: *Duplex DuplexTumble *PageRegion EnvDL +*UIConstraints: *Duplex DuplexTumble *PageRegion EnvC6 +*UIConstraints: *Duplex DuplexNoTumble *PageRegion Env10 +*UIConstraints: *Duplex DuplexNoTumble *PageRegion EnvDL +*UIConstraints: *Duplex DuplexNoTumble *PageRegion EnvC6 +*UIConstraints: *InputSlot LC2 *MediaType MP-HW +*UIConstraints: *InputSlot LC2 *MediaType PGPP +*UIConstraints: *InputSlot LC2 *MediaType UGPP +*UIConstraints: *InputSlot LC2 *MediaType LCPP +*UIConstraints: *InputSlot LC2 *MediaType PSPP +*UIConstraints: *InputSlot LC2 *MediaType Thick +*UIConstraints: *InputSlot LC2 *MediaType Envelope +*UIConstraints: *InputSlot LC2 *MediaType ESF(PQIJP) +*UIConstraints: *Duplex DuplexTumble *MediaType Envelope +*UIConstraints: *Duplex DuplexTumble *MediaType UGPP +*UIConstraints: *Duplex DuplexTumble *MediaType PGPP +*UIConstraints: *Duplex DuplexTumble *MediaType PSPP +*UIConstraints: *Duplex DuplexTumble *MediaType LCPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType Envelope +*UIConstraints: *Duplex DuplexNoTumble *MediaType UGPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType PGPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType PSPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType LCPP +*UIConstraints: *Resolution 300dpi *MediaType MP-HW +*UIConstraints: *Resolution 300dpi *MediaType PGPP +*UIConstraints: *Resolution 300dpi *MediaType UGPP +*UIConstraints: *Resolution 300dpi *MediaType LCPP +*UIConstraints: *Resolution 300dpi *MediaType PSPP +*UIConstraints: *Resolution 300dpi *MediaType Envelope +*UIConstraints: *Resolution 300dpi *MediaType ESF(PQIJP) +*% ======= Reversed UI ========= +*UIConstraints: *PageSize A5.Transverse *InputSlot LC2 +*UIConstraints: *PageSize A6 *InputSlot LC2 +*UIConstraints: *PageSize B6 *InputSlot LC2 +*UIConstraints: *PageSize Env10 *InputSlot LC2 +*UIConstraints: *PageSize EnvDL *InputSlot LC2 +*UIConstraints: *PageSize EnvC6 *InputSlot LC2 +*UIConstraints: *PageRegion A5.Transverse *InputSlot LC2 +*UIConstraints: *PageRegion A6 *InputSlot LC2 +*UIConstraints: *PageRegion B6 *InputSlot LC2 +*UIConstraints: *PageRegion Env10 *InputSlot LC2 +*UIConstraints: *PageRegion EnvDL *InputSlot LC2 +*UIConstraints: *PageRegion EnvC6 *InputSlot LC2 +*UIConstraints: *PageSize Env10 *Duplex DuplexTumble +*UIConstraints: *PageSize EnvDL *Duplex DuplexTumble +*UIConstraints: *PageSize EnvC6 *Duplex DuplexTumble +*UIConstraints: *PageSize Env10 *Duplex DuplexNoTumble +*UIConstraints: *PageSize EnvDL *Duplex DuplexNoTumble +*UIConstraints: *PageSize EnvC6 *Duplex DuplexNoTumble +*UIConstraints: *PageRegion Env10 *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvDL *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvC6 *Duplex DuplexTumble +*UIConstraints: *PageRegion Env10 *Duplex DuplexNoTumble +*UIConstraints: *PageRegion EnvDL *Duplex DuplexNoTumble +*UIConstraints: *PageRegion EnvC6 *Duplex DuplexNoTumble +*UIConstraints: *MediaType MP-HW *InputSlot LC2 +*UIConstraints: *MediaType PGPP *InputSlot LC2 +*UIConstraints: *MediaType UGPP *InputSlot LC2 +*UIConstraints: *MediaType LCPP *InputSlot LC2 +*UIConstraints: *MediaType PSPP *InputSlot LC2 +*UIConstraints: *MediaType Thick *InputSlot LC2 +*UIConstraints: *MediaType Envelope *InputSlot LC2 +*UIConstraints: *MediaType ESF(PQIJP) *InputSlot LC2 +*UIConstraints: *MediaType Envelope *Duplex DuplexTumble +*UIConstraints: *MediaType UGPP *Duplex DuplexTumble +*UIConstraints: *MediaType PGPP *Duplex DuplexTumble +*UIConstraints: *MediaType PSPP *Duplex DuplexTumble +*UIConstraints: *MediaType LCPP *Duplex DuplexTumble +*UIConstraints: *MediaType Envelope *Duplex DuplexNoTumble +*UIConstraints: *MediaType UGPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType PGPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType PSPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType LCPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType MP-HW *Resolution 300dpi +*UIConstraints: *MediaType PGPP *Resolution 300dpi +*UIConstraints: *MediaType UGPP *Resolution 300dpi +*UIConstraints: *MediaType LCPP *Resolution 300dpi +*UIConstraints: *MediaType PSPP *Resolution 300dpi +*UIConstraints: *MediaType Envelope *Resolution 300dpi +*UIConstraints: *MediaType ESF(PQIJP) *Resolution 300dpi + + + +*%*********** Device Capabilities ************ +*LanguageLevel: "3" +*ColorDevice: True +*DefaultColorSpace: CMYK +*Throughput: "32" +*1284Modes Parallel: Compat Nibble ECP + + +*TTRasterizer: Type42 +*?TTRasterizer: " + save + 42 /FontType resourcestatus {pop pop (Type42)}{(No Type42)}ifelse = flush + restore + " +*End + + +*Protocols: TBCP + +*% *Protocols: BCP TBCP PJL +*% *JCLBegin: "<1B>%-12345X" +*% *JCLToPSInterpreter: "@PJL ENTER LANGUAGE = POSTSCRIPT <0A>" +*% *JCLEnd: "<1B>%-12345X" + +*FreeVM: "737179008" +*VMOption 256Meg: "737179008" +*FCacheSize 256Meg: 30515200 + + + +*SuggestedJobTimeout: "0" +*SuggestedWaitTimeout: "0" +*PrintPSErrors: True + + +*FileSystem: True +*?FileSystem: " + save false + (%disk?%) + { currentdevparams dup /Writeable known + { /Writeable get {pop true} if } { pop } ifelse + } 10 string /IODevice resourceforall + {(True)}{(False)} ifelse = flush + restore" +*End + + + +*%==== Missing StartJobPassword & SystemParamsPassword in PS === + + +*Password: "()" +*ExitServer: " + count 0 eq + { false } { true exch startjob } ifelse + not { + (WARNING: Cannot modify initial VM.) = + (Missing or invalid password.) = + (Please contact the author of this software.) = flush quit + } if +" +*End + + +*Reset: " + count 0 eq + { false } { true exch startjob } ifelse + not { + (WARNING: Cannot reset printer.) = + (Missing or invalid password.) = + (Please contact the author of this software.) = flush quit + } if + systemdict /quit get exec + (WARNING : Printer Reset Failed.) = flush +" +*End + + +*%Plus90|Minus90|Any +*LandscapeOrientation: Plus90 + + + +*%*************** Halftone Information *************** +*% ScreenFreq and ScreenAngle be here in case some +*% application trying to set halftone type to 1 + +*DefaultHalftoneType: 100 +*ScreenFreq: "150.0" +*ScreenAngle: "45.0" +*DefaultScreenProc: Dot +*ScreenProc Dot: " +{abs exch abs 2 copy add 1 gt {1 sub dup mul exch +1 sub dup mul add 1 sub } {dup mul exch dup mul +add 1 exch sub } ifelse } bind +" +*End +*ScreenProc Line: "{ pop } bind" +*ScreenProc Ellipse: "{ dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub } bind" + +*DefaultTransfer: Null +*Transfer Null: "{ }" +*Transfer Null.Inverse: "{ 1 exch sub } bind" + + +*%**************** Paper Handling ****************** + +*OpenUI *PageSize/Page Size: PickOne +*fr.Translation PageSize/Format papier: "" +*es.Translation PageSize/Tamaño Papel: "" +*it.Translation PageSize/Formato pagina: "" +*de.Translation PageSize/PapierFormat: "" +*pt.Translation PageSize/Formato de Papel: "" +*nl.Translation PageSize/Papierformaat: "" + +*OrderDependency: 100 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize A4/A4: "<> setpagedevice" +*fr.PageSize A4/A4: "" +*es.PageSize A4/A4: "" +*it.PageSize A4/A4: "" +*de.PageSize A4/A4: "" +*pt.PageSize A4/A4: "" +*nl.PageSize A4/A4: "" + +*PageSize A5.Transverse/A5: "<> setpagedevice" +*fr.PageSize A5.Transverse/A5: "" +*es.PageSize A5.Transverse/A5: "" +*it.PageSize A5.Transverse/A5: "" +*de.PageSize A5.Transverse/A5: "" +*pt.PageSize A5.Transverse/A5: "" +*nl.PageSize A5.Transverse/A5: "" + +*PageSize A6/A6: "<> setpagedevice" +*fr.PageSize A6/A6: "" +*es.PageSize A6/A6: "" +*it.PageSize A6/A6: "" +*de.PageSize A6/A6: "" +*pt.PageSize A6/A6: "" +*nl.PageSize A6/A6: "" + +*PageSize B5.Transverse/B5 JIS: "<> setpagedevice" +*fr.PageSize B5.Transverse/B5 JIS: "" +*es.PageSize B5.Transverse/B5 JIS: "" +*it.PageSize B5.Transverse/B5 JIS: "" +*de.PageSize B5.Transverse/B5 JIS: "" +*pt.PageSize B5.Transverse/B5 JIS: "" +*nl.PageSize B5.Transverse/B5 JIS: "" + +*PageSize B6/B6: "<> setpagedevice" +*fr.PageSize B6/B6: "" +*es.PageSize B6/B6: "" +*it.PageSize B6/B6: "" +*de.PageSize B6/B6: "" +*pt.PageSize B6/B6: "" +*nl.PageSize B6/B6: "" + +*PageSize Letter/Letter: "<> setpagedevice" +*fr.PageSize Letter/Letter: "" +*es.PageSize Letter/Carta: "" +*it.PageSize Letter/Letter: "" +*de.PageSize Letter/Letter: "" +*pt.PageSize Letter/Letter: "" +*nl.PageSize Letter/Letter: "" + +*PageSize 8.5x13in/8.5 x 13 in: "<> setpagedevice" +*fr.PageSize 8.5x13in/8.5 x 13 p.: "" +*es.PageSize 8.5x13in/8.5 x 13 pulg: "" +*it.PageSize 8.5x13in/8.5 x 13 pol.: "" +*de.PageSize 8.5x13in/8.5 x 13 Zoll: "" +*pt.PageSize 8.5x13in/8.5 x 13 pol: "" +*nl.PageSize 8.5x13in/8.5 x 13 in: "" + +*PageSize Legal/Legal: "<> setpagedevice" +*fr.PageSize Legal/Legal: "" +*es.PageSize Legal/Oficio: "" +*it.PageSize Legal/Legal: "" +*de.PageSize Legal/Legal: "" +*pt.PageSize Legal/Legal: "" +*nl.PageSize Legal/Legal: "" + +*PageSize Executive/Executive: "<> setpagedevice" +*fr.PageSize Executive/Executive: "" +*es.PageSize Executive/Ejecutivo: "" +*it.PageSize Executive/Executive: "" +*de.PageSize Executive/Executive: "" +*pt.PageSize Executive/Executive: "" +*nl.PageSize Executive/Executive: "" + +*PageSize Env10/COM10 Env: "<> setpagedevice" +*fr.PageSize Env10/COM10 Env: "" +*es.PageSize Env10/Sobre COM10: "" +*it.PageSize Env10/COM10 Env: "" +*de.PageSize Env10/COM10-Umschlag: "" +*pt.PageSize Env10/COM10 Env: "" +*nl.PageSize Env10/COM10 Env: "" + +*PageSize EnvDL/DL Env: "<> setpagedevice" +*fr.PageSize EnvDL/DL Env: "" +*es.PageSize EnvDL/Sobre DL: "" +*it.PageSize EnvDL/DL Env: "" +*de.PageSize EnvDL/DL-Umschlag: "" +*pt.PageSize EnvDL/DL Env: "" +*nl.PageSize EnvDL/DL Env: "" + +*PageSize EnvC6/C6 Env: "<> setpagedevice" +*fr.PageSize EnvC6/C6 Env: "" +*es.PageSize EnvC6/Sobre C6: "" +*it.PageSize EnvC6/C6 Env: "" +*de.PageSize EnvC6/C6-Umschlag: "" +*pt.PageSize EnvC6/C6 Env: "" +*nl.PageSize EnvC6/C6 Env: "" + + +*?PageSize: " +save + currentpagedevice /PageSize get aload pop + 2 copy gt {exch} if + (Unknown) + << + [595 842] (A4) + [420 595] (A5.Transverse) + [297 420] (A6) + [516 729] (B5.Transverse) + [363 516] (B6) + [612 792] (Letter) + [612 936] (8.5x13in) + [612 1008] (Legal) + [522 756] (Executive) + [297 684] (Env10) + [312 624] (EnvDL) + [323 459] (EnvC6) + >> + { exch aload pop 4 index sub abs 5 le exch + 5 index sub abs 5 le and + {exch pop exit} {pop} ifelse + } bind forall + = flush pop pop +restore +" +*End +*CloseUI: *PageSize + +*OpenUI *PageRegion/Page Size: PickOne +*fr.Translation PageRegion/Format papier: "" +*es.Translation PageRegion/Tamaño Papel: "" +*it.Translation PageRegion/Formato pagina: "" +*de.Translation PageRegion/PapierFormat: "" +*pt.Translation PageRegion/Formato de Papel: "" +*nl.Translation PageRegion/Papierformaat: "" + +*OrderDependency: 110 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion A4/A4: "<> setpagedevice" +*fr.PageRegion A4/A4: "" +*es.PageRegion A4/A4: "" +*it.PageRegion A4/A4: "" +*de.PageRegion A4/A4: "" +*pt.PageRegion A4/A4: "" +*nl.PageRegion A4/A4: "" + +*PageRegion A5.Transverse/A5: "<> setpagedevice" +*fr.PageRegion A5.Transverse/A5: "" +*es.PageRegion A5.Transverse/A5: "" +*it.PageRegion A5.Transverse/A5: "" +*de.PageRegion A5.Transverse/A5: "" +*pt.PageRegion A5.Transverse/A5: "" +*nl.PageRegion A5.Transverse/A5: "" + +*PageRegion A6/A6: "<> setpagedevice" +*fr.PageRegion A6/A6: "" +*es.PageRegion A6/A6: "" +*it.PageRegion A6/A6: "" +*de.PageRegion A6/A6: "" +*pt.PageRegion A6/A6: "" +*nl.PageRegion A6/A6: "" + +*PageRegion B5.Transverse/B5 JIS: "<> setpagedevice" +*fr.PageRegion B5.Transverse/B5 JIS: "" +*es.PageRegion B5.Transverse/B5 JIS: "" +*it.PageRegion B5.Transverse/B5 JIS: "" +*de.PageRegion B5.Transverse/B5 JIS: "" +*pt.PageRegion B5.Transverse/B5 JIS: "" +*nl.PageRegion B5.Transverse/B5 JIS: "" + +*PageRegion B6/B6: "<> setpagedevice" +*fr.PageRegion B6/B6: "" +*es.PageRegion B6/B6: "" +*it.PageRegion B6/B6: "" +*de.PageRegion B6/B6: "" +*pt.PageRegion B6/B6: "" +*nl.PageRegion B6/B6: "" + +*PageRegion Letter/Letter: "<> setpagedevice" +*fr.PageRegion Letter/Letter: "" +*es.PageRegion Letter/Carta: "" +*it.PageRegion Letter/Letter: "" +*de.PageRegion Letter/Letter: "" +*pt.PageRegion Letter/Letter: "" +*nl.PageRegion Letter/Letter: "" + +*PageRegion 8.5x13in/8.5 x 13 in: "<> setpagedevice" +*fr.PageRegion 8.5x13in/8.5 x 13 p.: "" +*es.PageRegion 8.5x13in/8.5 x 13 pulg: "" +*it.PageRegion 8.5x13in/8.5 x 13 pol.: "" +*de.PageRegion 8.5x13in/8.5 x 13 Zoll: "" +*pt.PageRegion 8.5x13in/8.5 x 13 pol: "" +*nl.PageRegion 8.5x13in/8.5 x 13 in: "" + +*PageRegion Legal/Legal: "<> setpagedevice" +*fr.PageRegion Legal/Legal: "" +*es.PageRegion Legal/Oficio: "" +*it.PageRegion Legal/Legal: "" +*de.PageRegion Legal/Legal: "" +*pt.PageRegion Legal/Legal: "" +*nl.PageRegion Legal/Legal: "" + +*PageRegion Executive/Executive: "<> setpagedevice" +*fr.PageRegion Executive/Executive: "" +*es.PageRegion Executive/Ejecutivo: "" +*it.PageRegion Executive/Executive: "" +*de.PageRegion Executive/Executive: "" +*pt.PageRegion Executive/Executive: "" +*nl.PageRegion Executive/Executive: "" + +*PageRegion Env10/COM10 Env: "<> setpagedevice" +*fr.PageRegion Env10/COM10 Env: "" +*es.PageRegion Env10/Sobre COM10: "" +*it.PageRegion Env10/COM10 Env: "" +*de.PageRegion Env10/COM10-Umschlag: "" +*pt.PageRegion Env10/COM10 Env: "" +*nl.PageRegion Env10/COM10 Env: "" + +*PageRegion EnvDL/DL Env: "<> setpagedevice" +*fr.PageRegion EnvDL/DL Env: "" +*es.PageRegion EnvDL/Sobre DL: "" +*it.PageRegion EnvDL/DL Env: "" +*de.PageRegion EnvDL/DL-Umschlag: "" +*pt.PageRegion EnvDL/DL Env: "" +*nl.PageRegion EnvDL/DL Env: "" + +*PageRegion EnvC6/C6 Env: "<> setpagedevice" +*fr.PageRegion EnvC6/C6 Env: "" +*es.PageRegion EnvC6/Sobre C6: "" +*it.PageRegion EnvC6/C6 Env: "" +*de.PageRegion EnvC6/C6-Umschlag: "" +*pt.PageRegion EnvC6/C6 Env: "" +*nl.PageRegion EnvC6/C6 Env: "" + +*CloseUI: *PageRegion + +*DefaultImageableArea: Letter +*ImageableArea A4/A4: "8.40 8.40 586.80 833.52" +*fr.ImageableArea A4/A4: "" +*es.ImageableArea A4/A4: "" +*it.ImageableArea A4/A4: "" +*de.ImageableArea A4/A4: "" +*pt.ImageableArea A4/A4: "" +*nl.ImageableArea A4/A4: "" + +*ImageableArea A5.Transverse/A5: "8.40 8.40 411.12 586.80" +*fr.ImageableArea A5.Transverse/A5: "" +*es.ImageableArea A5.Transverse/A5: "" +*it.ImageableArea A5.Transverse/A5: "" +*de.ImageableArea A5.Transverse/A5: "" +*pt.ImageableArea A5.Transverse/A5: "" +*nl.ImageableArea A5.Transverse/A5: "" + +*ImageableArea A6/A6: "8.40 8.40 289.20 411.12" +*fr.ImageableArea A6/A6: "" +*es.ImageableArea A6/A6: "" +*it.ImageableArea A6/A6: "" +*de.ImageableArea A6/A6: "" +*pt.ImageableArea A6/A6: "" +*nl.ImageableArea A6/A6: "" + +*ImageableArea B5.Transverse/B5 JIS: "8.40 8.40 507.60 720.24" +*fr.ImageableArea B5.Transverse/B5 JIS: "" +*es.ImageableArea B5.Transverse/B5 JIS: "" +*it.ImageableArea B5.Transverse/B5 JIS: "" +*de.ImageableArea B5.Transverse/B5 JIS: "" +*pt.ImageableArea B5.Transverse/B5 JIS: "" +*nl.ImageableArea B5.Transverse/B5 JIS: "" + +*ImageableArea B6/B6: "8.40 8.40 354.24 507.36" +*fr.ImageableArea B6/B6: "" +*es.ImageableArea B6/B6: "" +*it.ImageableArea B6/B6: "" +*de.ImageableArea B6/B6: "" +*pt.ImageableArea B6/B6: "" +*nl.ImageableArea B6/B6: "" + +*ImageableArea Letter/Letter: "8.40 8.40 603.60 783.60" +*fr.ImageableArea Letter/Letter: "" +*es.ImageableArea Letter/Carta: "" +*it.ImageableArea Letter/Letter: "" +*de.ImageableArea Letter/Letter: "" +*pt.ImageableArea Letter/Letter: "" +*nl.ImageableArea Letter/Letter: "" + +*ImageableArea 8.5x13in/8.5 x 13 in: "8.40 8.40 603.60 927.60" +*fr.ImageableArea 8.5x13in/8.5 x 13 p.: "" +*es.ImageableArea 8.5x13in/8.5 x 13 pulg: "" +*it.ImageableArea 8.5x13in/8.5 x 13 pol.: "" +*de.ImageableArea 8.5x13in/8.5 x 13 Zoll: "" +*pt.ImageableArea 8.5x13in/8.5 x 13 pol: "" +*nl.ImageableArea 8.5x13in/8.5 x 13 in: "" + +*ImageableArea Legal/Legal: "8.40 8.40 603.60 999.60" +*fr.ImageableArea Legal/Legal: "" +*es.ImageableArea Legal/Oficio: "" +*it.ImageableArea Legal/Legal: "" +*de.ImageableArea Legal/Legal: "" +*pt.ImageableArea Legal/Legal: "" +*nl.ImageableArea Legal/Legal: "" + +*ImageableArea Executive/Executive: "8.40 8.40 513.60 747.60" +*fr.ImageableArea Executive/Executive: "" +*es.ImageableArea Executive/Ejecutivo: "" +*it.ImageableArea Executive/Executive: "" +*de.ImageableArea Executive/Executive: "" +*pt.ImageableArea Executive/Executive: "" +*nl.ImageableArea Executive/Executive: "" + +*ImageableArea Env10/COM10 Env: "8.40 8.40 288.48 675.60" +*fr.ImageableArea Env10/COM10 Env: "" +*es.ImageableArea Env10/Sobre COM10: "" +*it.ImageableArea Env10/COM10 Env: "" +*de.ImageableArea Env10/COM10-Umschlag: "" +*pt.ImageableArea Env10/COM10 Env: "" +*nl.ImageableArea Env10/COM10 Env: "" + +*ImageableArea EnvDL/DL Env: "8.40 8.40 303.36 615.12" +*fr.ImageableArea EnvDL/DL Env: "" +*es.ImageableArea EnvDL/Sobre DL: "" +*it.ImageableArea EnvDL/DL Env: "" +*de.ImageableArea EnvDL/DL-Umschlag: "" +*pt.ImageableArea EnvDL/DL Env: "" +*nl.ImageableArea EnvDL/DL Env: "" + +*ImageableArea EnvC6/C6 Env: "8.40 8.40 314.64 450.72" +*fr.ImageableArea EnvC6/C6 Env: "" +*es.ImageableArea EnvC6/Sobre C6: "" +*it.ImageableArea EnvC6/C6 Env: "" +*de.ImageableArea EnvC6/C6-Umschlag: "" +*pt.ImageableArea EnvC6/C6 Env: "" +*nl.ImageableArea EnvC6/C6 Env: "" + +*?ImageableArea: " + save + /pr {10 string cvs print ( ) print} def + /prnl {10 string cvs = flush} def + /upperright {100 mul floor 100 div} bind def + /lowerleft {100 mul ceiling 100 div} bind def + /prall {2 {lowerleft pr} repeat upperright pr upperright prnl} def + newpath clippath pathbbox exch 4 2 roll exch prall + restore +" +*End + +*DefaultPaperDimension: Letter +*PaperDimension A4/A4: "595.20 841.92" +*fr.PaperDimension A4/A4: "" +*es.PaperDimension A4/A4: "" +*it.PaperDimension A4/A4: "" +*de.PaperDimension A4/A4: "" +*pt.PaperDimension A4/A4: "" +*nl.PaperDimension A4/A4: "" + +*PaperDimension A5.Transverse/A5: "419.52 595.20" +*fr.PaperDimension A5.Transverse/A5: "" +*es.PaperDimension A5.Transverse/A5: "" +*it.PaperDimension A5.Transverse/A5: "" +*de.PaperDimension A5.Transverse/A5: "" +*pt.PaperDimension A5.Transverse/A5: "" +*nl.PaperDimension A5.Transverse/A5: "" + +*PaperDimension A6/A6: "297.60 419.52" +*fr.PaperDimension A6/A6: "" +*es.PaperDimension A6/A6: "" +*it.PaperDimension A6/A6: "" +*de.PaperDimension A6/A6: "" +*pt.PaperDimension A6/A6: "" +*nl.PaperDimension A6/A6: "" + +*PaperDimension B5.Transverse/B5 JIS: "516.00 728.64" +*fr.PaperDimension B5.Transverse/B5 JIS: "" +*es.PaperDimension B5.Transverse/B5 JIS: "" +*it.PaperDimension B5.Transverse/B5 JIS: "" +*de.PaperDimension B5.Transverse/B5 JIS: "" +*pt.PaperDimension B5.Transverse/B5 JIS: "" +*nl.PaperDimension B5.Transverse/B5 JIS: "" + +*PaperDimension B6/B6: "362.64 515.76" +*fr.PaperDimension B6/B6: "" +*es.PaperDimension B6/B6: "" +*it.PaperDimension B6/B6: "" +*de.PaperDimension B6/B6: "" +*pt.PaperDimension B6/B6: "" +*nl.PaperDimension B6/B6: "" + +*PaperDimension Letter/Letter: "612.00 792.00" +*fr.PaperDimension Letter/Letter: "" +*es.PaperDimension Letter/Carta: "" +*it.PaperDimension Letter/Letter: "" +*de.PaperDimension Letter/Letter: "" +*pt.PaperDimension Letter/Letter: "" +*nl.PaperDimension Letter/Letter: "" + +*PaperDimension 8.5x13in/8.5 x 13 in: "612.00 936.00" +*fr.PaperDimension 8.5x13in/8.5 x 13 p.: "" +*es.PaperDimension 8.5x13in/8.5 x 13 pulg: "" +*it.PaperDimension 8.5x13in/8.5 x 13 pol.: "" +*de.PaperDimension 8.5x13in/8.5 x 13 Zoll: "" +*pt.PaperDimension 8.5x13in/8.5 x 13 pol: "" +*nl.PaperDimension 8.5x13in/8.5 x 13 in: "" + +*PaperDimension Legal/Legal: "612.00 1008.00" +*fr.PaperDimension Legal/Legal: "" +*es.PaperDimension Legal/Oficio: "" +*it.PaperDimension Legal/Legal: "" +*de.PaperDimension Legal/Legal: "" +*pt.PaperDimension Legal/Legal: "" +*nl.PaperDimension Legal/Legal: "" + +*PaperDimension Executive/Executive: "522.00 756.00" +*fr.PaperDimension Executive/Executive: "" +*es.PaperDimension Executive/Ejecutivo: "" +*it.PaperDimension Executive/Executive: "" +*de.PaperDimension Executive/Executive: "" +*pt.PaperDimension Executive/Executive: "" +*nl.PaperDimension Executive/Executive: "" + +*PaperDimension Env10/COM10 Env: "296.88 684.00" +*fr.PaperDimension Env10/COM10 Env: "" +*es.PaperDimension Env10/Sobre COM10: "" +*it.PaperDimension Env10/COM10 Env: "" +*de.PaperDimension Env10/COM10-Umschlag: "" +*pt.PaperDimension Env10/COM10 Env: "" +*nl.PaperDimension Env10/COM10 Env: "" + +*PaperDimension EnvDL/DL Env: "311.76 623.52" +*fr.PaperDimension EnvDL/DL Env: "" +*es.PaperDimension EnvDL/Sobre DL: "" +*it.PaperDimension EnvDL/DL Env: "" +*de.PaperDimension EnvDL/DL-Umschlag: "" +*pt.PaperDimension EnvDL/DL Env: "" +*nl.PaperDimension EnvDL/DL Env: "" + +*PaperDimension EnvC6/C6 Env: "323.04 459.12" +*fr.PaperDimension EnvC6/C6 Env: "" +*es.PaperDimension EnvC6/Sobre C6: "" +*it.PaperDimension EnvC6/C6 Env: "" +*de.PaperDimension EnvC6/C6-Umschlag: "" +*pt.PaperDimension EnvC6/C6 Env: "" +*nl.PaperDimension EnvC6/C6 Env: "" + + + + +*% ====== Custom PageSize ====== + +*HWMargins: 8.40 8.40 8.40 8.40 +*LeadingEdge Long: "" +*LeadingEdge Short: "" +*DefaultLeadingEdge: Long +*MaxMediaWidth: "612" +*MaxMediaHeight: "3401" +*NonUIOrderDependency: 160 AnySetup *CustomPageSize +*CustomPageSize True: " +pop pop +<< /Orientation 3 -1 roll dup 2 mod 0 eq {1 add} {1 sub} ifelse + /PageSize [7 -2 roll] +>> setpagedevice" +*End +*ParamCustomPageSize Width: 1 points 182 612 +*ParamCustomPageSize Height: 2 points 360 3401 +*ParamCustomPageSize Orientation: 3 int 0 3 +*ParamCustomPageSize WidthOffset: 4 points 0 0 +*ParamCustomPageSize HeightOffset: 5 points 0 0 + + +*% ==== MediaType ==== +*% Should be after PageSize code +*% Must be after InputSlot +*OpenGroup: EPQualitySettings/Quality +*fr.Translation EPQualitySettings/Qualité: "" +*es.Translation EPQualitySettings/ResoluciÓn: "" +*it.Translation EPQualitySettings/Qualità: "" +*de.Translation EPQualitySettings/Qualität: "" +*pt.Translation EPQualitySettings/Resolução: "" +*nl.Translation EPQualitySettings/Afdrukkwaliteit: "" + +*OpenUI *MediaType/MediaType: PickOne +*fr.Translation MediaType/Type de papier: "" +*es.Translation MediaType/Tipo Papel: "" +*it.Translation MediaType/Tipo supporto: "" +*de.Translation MediaType/Druckmedium: "" +*pt.Translation MediaType/Tipo de Papel: "" +*nl.Translation MediaType/Afdrukmateriaal: "" + +*OrderDependency: 150 AnySetup *MediaType +*DefaultMediaType: Plain +*MediaType Unspecified/Unspecified: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Unspecified/Non spécifié: "" +*es.MediaType Unspecified/Sin especificar: "" +*it.MediaType Unspecified/Non specificato: "" +*de.MediaType Unspecified/Undefiniert: "" +*pt.MediaType Unspecified/Não especificado: "" +*nl.MediaType Unspecified/Onbepaald: "" + +*MediaType Plain/Plain: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Plain/Ordinaire: "" +*es.MediaType Plain/llano: "" +*it.MediaType Plain/Comune: "" +*de.MediaType Plain/Normalpapier: "" +*pt.MediaType Plain/planície: "" +*nl.MediaType Plain/Gewoon: "" + +*MediaType Letterhead/Letterhead: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Letterhead/En tête: "" +*es.MediaType Letterhead/Encabezado: "" +*it.MediaType Letterhead/Intestata: "" +*de.MediaType Letterhead/Letterhead: "" +*pt.MediaType Letterhead/Timbrado: "" +*nl.MediaType Letterhead/Briefhoofd: "" + +*MediaType Recycled/Recycled: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Recycled/Recyclé : "" +*es.MediaType Recycled/Reciclado: "" +*it.MediaType Recycled/Riciclata: "" +*de.MediaType Recycled/Recycling Papier: "" +*pt.MediaType Recycled/Reciclado: "" +*nl.MediaType Recycled/Gerecycleerd: "" + +*MediaType Color/Color: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Color/Couleur: "" +*es.MediaType Color/Color: "" +*it.MediaType Color/Colore: "" +*de.MediaType Color/Farbe: "" +*pt.MediaType Color/Cor: "" +*nl.MediaType Color/Kleur: "" + +*MediaType Preprinted/Preprinted: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Preprinted/Pré-imprimé: "" +*es.MediaType Preprinted/Preimpreso: "" +*it.MediaType Preprinted/Prestamp: "" +*de.MediaType Preprinted/Vordruck: "" +*pt.MediaType Preprinted/Pré-imp: "" +*nl.MediaType Preprinted/Preprinted: "" + +*MediaType BrighterColors/High quality plain paper: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType BrighterColors/Papier ordinaire haute qualité: "" +*es.MediaType BrighterColors/Papel normal de alta calidad: "" +*it.MediaType BrighterColors/Carta comune di alta qualità: "" +*de.MediaType BrighterColors/Hochwertiges Normalpapier: "" +*pt.MediaType BrighterColors/Papel normal de alta qualidade: "" +*nl.MediaType BrighterColors/Normaal papier van hoge kwaliteit: "" + +*MediaType Thick/Thick paper: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Thick/Papier-épais: "" +*es.MediaType Thick/Papel grueso: "" +*it.MediaType Thick/Carta spessa: "" +*de.MediaType Thick/Dickes-Papier: "" +*pt.MediaType Thick/Papel espesso: "" +*nl.MediaType Thick/Dik-papier: "" + +*MediaType MP-HW/Epson Matte: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType MP-HW/Epson Matte: "" +*es.MediaType MP-HW/Epson Matte: "" +*it.MediaType MP-HW/Epson Matte: "" +*de.MediaType MP-HW/Epson Matte: "" +*pt.MediaType MP-HW/Epson Matte: "" +*nl.MediaType MP-HW/Epson Matte: "" + +*MediaType PGPP/Epson Premium Glossy: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType PGPP/Epson Premium Glossy: "" +*es.MediaType PGPP/Epson Premium Glossy: "" +*it.MediaType PGPP/Epson Premium Glossy: "" +*de.MediaType PGPP/Epson Premium Glossy: "" +*pt.MediaType PGPP/Epson Premium Glossy: "" +*nl.MediaType PGPP/Epson Premium Glossy: "" + +*MediaType UGPP/Epson Ultra Glossy: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType UGPP/Epson Ultra Glossy: "" +*es.MediaType UGPP/Epson Ultra Glossy: "" +*it.MediaType UGPP/Epson Ultra Glossy: "" +*de.MediaType UGPP/Epson Ultra Glossy: "" +*pt.MediaType UGPP/Epson Ultra Glossy: "" +*nl.MediaType UGPP/Epson Ultra Glossy: "" + +*MediaType LCPP/Photo Paper Glossy: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType LCPP/Photo Paper Glossy: "" +*es.MediaType LCPP/Photo Paper Glossy: "" +*it.MediaType LCPP/Photo Paper Glossy: "" +*de.MediaType LCPP/Photo Paper Glossy: "" +*pt.MediaType LCPP/Photo Paper Glossy: "" +*nl.MediaType LCPP/Photo Paper Glossy: "" + +*MediaType PSPP/Epson Premium Semigloss: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType PSPP/Epson Premium Semigloss: "" +*es.MediaType PSPP/Epson Premium Semigloss: "" +*it.MediaType PSPP/Epson Premium Semigloss: "" +*de.MediaType PSPP/Epson Premium Semigloss: "" +*pt.MediaType PSPP/Epson Premium Semigloss: "" +*nl.MediaType PSPP/Epson Premium Semigloss: "" + +*MediaType Envelope/Envelope: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Envelope/Enveloppe: "" +*es.MediaType Envelope/Sobre: "" +*it.MediaType Envelope/Busta: "" +*de.MediaType Envelope/Briefumschlag: "" +*pt.MediaType Envelope/Envelope: "" +*nl.MediaType Envelope/Enveloppe: "" + +*MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*es.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*it.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*de.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*pt.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*nl.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" + +*?MediaType: " + save + currentpagedevice /MediaType get dup + null eq { pop (Plain) } if = flush + restore +" +*End +*CloseUI: *MediaType +*CloseGroup: EPQualitySettings + + +*%************* Input Sources ************** +*% InputSlot must be before MediaType +*% We need to ensure MediaType is set to +*% Plain or ManualFeed will fail setting +*% to false. So reset here - WDS. + +*RequiresPageRegion All: True + +*OpenUI *InputSlot/InputSlot: PickOne +*fr.Translation InputSlot/Source papier: "" +*es.Translation InputSlot/Bandeja Entrada: "" +*it.Translation InputSlot/Vassoio ingresso: "" +*de.Translation InputSlot/Papierzufuhr: "" +*pt.Translation InputSlot/Sistema Alim.: "" +*nl.Translation InputSlot/Invoersleuf: "" + +*OrderDependency: 20 AnySetup *InputSlot +*DefaultInputSlot: Auto + +*InputSlot Auto/Auto Select: "" +*End +*fr.InputSlot Auto/Automatique: "" +*es.InputSlot Auto/Auto Selecci??ムn: "" +*it.InputSlot Auto/Selezione automatica: "" +*de.InputSlot Auto/Automatische Auswahl: "" +*pt.InputSlot Auto/Sele??????o autom???tica: "" +*nl.InputSlot Auto/Automatisch selecteren: "" + +*InputSlot ASF/Paper Tray: " + mark { + << /ManualFeed false /MediaPosition 0 >> setpagedevice + } stopped cleartomark +" +*End +*fr.InputSlot ASF/Bac díalimentation: "" +*es.InputSlot ASF/Bandeja de papel: "" +*it.InputSlot ASF/Vassoio carta: "" +*de.InputSlot ASF/Papierfach: "" +*pt.InputSlot ASF/Tabuleiro de papel: "" +*nl.InputSlot ASF/Papierlade: "" + +*InputSlot LC1/Paper Cassette 1: " + mark { + << /ManualFeed false /MediaPosition 1 >> setpagedevice + } stopped cleartomark +" +*End +*fr.InputSlot LC1/Bac papier 1: "" +*es.InputSlot LC1/Cassette de papel 1: "" +*it.InputSlot LC1/Cassetto carta 1: "" +*de.InputSlot LC1/Papierkassette 1: "" +*pt.InputSlot LC1/Alimentador de papel 1: "" +*nl.InputSlot LC1/Papiercassette 1: "" + +*InputSlot LC2/Paper Cassette 2: " + mark { + << /ManualFeed false /MediaPosition 2 >> setpagedevice + } stopped cleartomark +" +*End +*fr.InputSlot LC2/Bac papier 2: "" +*es.InputSlot LC2/Cassette de papel 2: "" +*it.InputSlot LC2/Cassetto carta 2: "" +*de.InputSlot LC2/Papierkassette 2: "" +*pt.InputSlot LC2/Alimentador de papel 2: "" +*nl.InputSlot LC2/Papiercassette 2: "" + +*?InputSlot: " + save + currentpagedevice dup /ManualFeed get + {pop (Manual)} + { + /MediaPosition get dup null eq {pop (Auto)} + {[(ASF) (LC1) (LC2)] exch get} ifelse + } ifelse = flush + restore + " +*End +*CloseUI: *InputSlot + + + +*%============ Be here as adviced ============ +*DefaultOutputOrder: Normal + +*OpenUI *Duplex/Duplex: PickOne +*fr.Translation Duplex/Duplex (Recto Verso): "" +*es.Translation Duplex/Dúplex: "" +*it.Translation Duplex/Duplex: "" +*de.Translation Duplex/Duplex: "" +*pt.Translation Duplex/Dúplex: "" +*nl.Translation Duplex/Duplex: "" + +*DefaultDuplex: DuplexNoTumble +*OrderDependency: 180 AnySetup *Duplex +*Duplex None/Simplex: "<> setpagedevice" +*fr.Duplex None/Simplex: "" +*es.Duplex None/Simple: "" +*it.Duplex None/Simplex: "" +*de.Duplex None/Simplex: "" +*pt.Duplex None/Simples: "" +*nl.Duplex None/Simplex: "" + +*Duplex DuplexTumble/Short Edge Binding: " + <> setpagedevice +" +*End +*fr.Duplex DuplexTumble/Reliure côté court: "" +*es.Duplex DuplexTumble/Encuadernar lado corto: "" +*it.Duplex DuplexTumble/Rilegatura lato corto: "" +*de.Duplex DuplexTumble/Bindung kurze Seite: "" +*pt.Duplex DuplexTumble/União Margem Curta: "" +*nl.Duplex DuplexTumble/Korte zijde binden: "" + +*Duplex DuplexNoTumble/Long Edge Binding: " + <> setpagedevice +" +*End +*fr.Duplex DuplexNoTumble/Reliure côté long: "" +*es.Duplex DuplexNoTumble/Encuadernar lado largo: "" +*it.Duplex DuplexNoTumble/Rilegatura lato lungo: "" +*de.Duplex DuplexNoTumble/Bindung lange Seite: "" +*pt.Duplex DuplexNoTumble/União Margem Longa: "" +*nl.Duplex DuplexNoTumble/Lange zijde binden: "" + +*?Duplex: " + save + currentpagedevice dup /Duplex 2 copy known + {get {/Tumble get {(DuplexTumble)}{(DuplexNoTumble)} ifelse} + {pop (None)} ifelse} {pop pop pop (None)}ifelse = flush + restore +" +*End +*CloseUI: *Duplex + + + +*%********** Printer Features ************** + + +*%******** ColorMode - Must preceed ColorQuality ******** +*OpenGroup: EPColorSettings/Color +*fr.Translation EPColorSettings/Paramètre Couleur: "" +*es.Translation EPColorSettings/Ajuste del color: "" +*it.Translation EPColorSettings/Impostazione colore: "" +*de.Translation EPColorSettings/Farbeinstellung: "" +*pt.Translation EPColorSettings/Definição de Cor: "" +*nl.Translation EPColorSettings/Kleurinstelling: "" + +*OpenUI *EPRendering/Color Mode: PickOne +*fr.Translation EPRendering/Coloration: "" +*es.Translation EPRendering/Color: "" +*it.Translation EPRendering/Modo colore: "" +*de.Translation EPRendering/Farbmodus: "" +*pt.Translation EPRendering/Modo de Cores: "" +*nl.Translation EPRendering/Kleuring: "" + +*DefaultEPRendering: RGB +*OrderDependency: 60 AnySetup *EPRendering +*EPRendering None/Monochrome: " + <> + setpagedevice" +*End +*fr.EPRendering None/Monochrome: "" +*es.EPRendering None/Negro: "" +*it.EPRendering None/Mono: "" +*de.EPRendering None/Monochrom: "" +*pt.EPRendering None/Monocromático: "" +*nl.EPRendering None/monochroom: "" + +*EPRendering RGB/Color: " + <> + setpagedevice" +*End +*fr.EPRendering RGB/Couleur: "" +*es.EPRendering RGB/Color: "" +*it.EPRendering RGB/Colore: "" +*de.EPRendering RGB/Farbe: "" +*pt.EPRendering RGB/Cor: "" +*nl.EPRendering RGB/Kleur: "" + +*?EPRendering: " + save + <> + currentpagedevice /ProcessColorModel get 2 copy known + { + get + } + { + pop pop (RGB) + }ifelse = flush + restore +" +*End +*CloseUI: *EPRendering +*CloseGroup: EPColorSettings + + +*%*************** Resolution options *************** +*OpenGroup: EPQualitySettings/Quality +*fr.Translation EPQualitySettings/Qualité: "" +*es.Translation EPQualitySettings/ResoluciÓn: "" +*it.Translation EPQualitySettings/Qualità: "" +*de.Translation EPQualitySettings/Qualität: "" +*pt.Translation EPQualitySettings/Resolução: "" +*nl.Translation EPQualitySettings/Afdrukkwaliteit: "" + +*OpenUI *Resolution/Print Quality: PickOne +*fr.Translation Resolution/Qualité d'impression: "" +*es.Translation Resolution/Modo Gráfico: "" +*it.Translation Resolution/Qualité: "" +*de.Translation Resolution/Qualität: "" +*pt.Translation Resolution/Modo Gráfico: "" +*nl.Translation Resolution/Afdrukkwaliteit: "" + +*OrderDependency: 40 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 1200dpi/Maximum: "mark { + << + /DeviceRenderingInfo <> + /HWResolution [1200.0 1200.0] + >> setpagedevice + } stopped cleartomark" +*End +*fr.Resolution 1200dpi/Maximum: "" +*es.Resolution 1200dpi/Máximo: "" +*it.Resolution 1200dpi/Massimo: "" +*de.Resolution 1200dpi/Maximal: "" +*pt.Resolution 1200dpi/Máximo: "" +*nl.Resolution 1200dpi/Maximale: "" + +*Resolution 600dpi/Fine: "mark { + << + /DeviceRenderingInfo <> + /HWResolution [600.0 600.0] + >> setpagedevice + } stopped cleartomark" +*End +*fr.Resolution 600dpi/Fin: "" +*es.Resolution 600dpi/Fino: "" +*it.Resolution 600dpi/Fine: "" +*de.Resolution 600dpi/Fein: "" +*pt.Resolution 600dpi/Óptima: "" +*nl.Resolution 600dpi/Fijn: "" + +*Resolution 300dpi/Fast: "mark { + << + /DeviceRenderingInfo <> + /HWResolution [300.0 300.0] + >> setpagedevice + } stopped cleartomark" +*End +*fr.Resolution 300dpi/Rapide: "" +*es.Resolution 300dpi/Rápida: "" +*it.Resolution 300dpi/Alta: "" +*de.Resolution 300dpi/Schnell: "" +*pt.Resolution 300dpi/Rápida: "" +*nl.Resolution 300dpi/Snel: "" + +*?Resolution: " + currentpagedevice /HWResolution get 0 get cvi + dup 300 eq + { pop (300dpi) } + {600 eq { (600dpi) }{ (1200dpi) } ifelse} ifelse + = flush " +*End +*CloseUI: *Resolution +*CloseGroup: EPQualitySettings + + +*%========== Press Simulations ========== +*OpenGroup: EPColorSettings/Color +*fr.Translation EPColorSettings/Paramètre Couleur: "" +*es.Translation EPColorSettings/Ajuste del color: "" +*it.Translation EPColorSettings/Impostazione colore: "" +*de.Translation EPColorSettings/Farbeinstellung: "" +*pt.Translation EPColorSettings/Definição de Cor: "" +*nl.Translation EPColorSettings/Kleurinstelling: "" + +*OpenUI *EPPressSimulation/Press Simulation: PickOne +*fr.Translation EPPressSimulation/Simulation presse: "" +*es.Translation EPPressSimulation/Simulación de imprenta: "" +*it.Translation EPPressSimulation/Simulazione stampa: "" +*de.Translation EPPressSimulation/Simulation Druckmaschine: "" +*pt.Translation EPPressSimulation/Simulação de Imprensa: "" +*nl.Translation EPPressSimulation/Perssimulatie: "" + +*DefaultEPPressSimulation: 6 +*OrderDependency: 130 AnySetup *EPPressSimulation +*EPPressSimulation 6/Auto: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 6/Auto: "" +*es.EPPressSimulation 6/Auto: "" +*it.EPPressSimulation 6/Auto: "" +*de.EPPressSimulation 6/Auto: "" +*pt.EPPressSimulation 6/Auto: "" +*nl.EPPressSimulation 6/Automatisch: "" + +*EPPressSimulation 4/Japan Color 2001: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 4/Japan Color 2001: "" +*es.EPPressSimulation 4/Japan Color 2001: "" +*it.EPPressSimulation 4/Japan Color 2001: "" +*de.EPPressSimulation 4/Japan Color 2001: "" +*pt.EPPressSimulation 4/Japan Color 2001: "" +*nl.EPPressSimulation 4/Japan Color 2001: "" + +*EPPressSimulation 2/SWOP: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 2/SWOP: "" +*es.EPPressSimulation 2/SWOP: "" +*it.EPPressSimulation 2/SWOP: "" +*de.EPPressSimulation 2/SWOP: "" +*pt.EPPressSimulation 2/SWOP: "" +*nl.EPPressSimulation 2/SWOP: "" + +*EPPressSimulation 3/Euroscale: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 3/Euroscale: "" +*es.EPPressSimulation 3/Euroscale: "" +*it.EPPressSimulation 3/Euroscale: "" +*de.EPPressSimulation 3/Euroscale: "" +*pt.EPPressSimulation 3/Euroscale: "" +*nl.EPPressSimulation 3/Euroscale: "" + +*EPPressSimulation 5/JMPA: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 5/JMPA: "" +*es.EPPressSimulation 5/JMPA: "" +*it.EPPressSimulation 5/JMPA: "" +*de.EPPressSimulation 5/JMPA: "" +*pt.EPPressSimulation 5/JMPA: "" +*nl.EPPressSimulation 5/JMPA: "" + +*EPPressSimulation 0/Off: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 0/Non: "" +*es.EPPressSimulation 0/Desactivado: "" +*it.EPPressSimulation 0/Off: "" +*de.EPPressSimulation 0/Aus: "" +*pt.EPPressSimulation 0/Não: "" +*nl.EPPressSimulation 0/Uit: "" + +*?EPPressSimulation: " + save + currentpagedevice /DeviceRenderingInfo 2 copy known + {get /PressType 2 copy known {get dup 0 eq {pop (None)}if} + {pop pop (Unknown)} ifelse}{pop pop (Unknown)} ifelse = flush + restore +" +*End +*CloseUI: *EPPressSimulation +*CloseGroup: EPColorSettings + + +*OpenGroup: EPOtherSettings/Others +*fr.Translation EPOtherSettings/Autres: "" +*es.Translation EPOtherSettings/Otros: "" +*it.Translation EPOtherSettings/Altro: "" +*de.Translation EPOtherSettings/Sonstiges: "" +*pt.Translation EPOtherSettings/Outros: "" +*nl.Translation EPOtherSettings/Overig: "" + +*OpenUI *EPToner/Ink Save Mode: Boolean +*fr.Translation EPToner/Ink Save Mode: "" +*es.Translation EPToner/Ink Save Mode: "" +*it.Translation EPToner/Ink Save Mode: "" +*de.Translation EPToner/Ink Save Mode: "" +*pt.Translation EPToner/Ink Save Mode: "" +*nl.Translation EPToner/Ink Save Mode: "" + +*OrderDependency: 210 AnySetup *EPToner +*DefaultEPToner: False +*EPToner False/Off: " + mark { + <>>> setpagedevice + }stopped cleartomark" +*End +*fr.EPToner False/Non: "" +*es.EPToner False/Desactivado: "" +*it.EPToner False/Off: "" +*de.EPToner False/Aus: "" +*pt.EPToner False/Não: "" +*nl.EPToner False/Uit: "" + +*EPToner True/On: " + mark { + <>>> setpagedevice + }stopped cleartomark" +*End +*fr.EPToner True/Oui: "" +*es.EPToner True/Activado: "" +*it.EPToner True/On: "" +*de.EPToner True/Ein: "" +*pt.EPToner True/Sim: "" +*nl.EPToner True/Aan: "" + +*?EPToner: " + save + currentpagedevice /PostRenderingEnhanceDetails get + /TonerSaver get 1 eq {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *EPToner +*CloseGroup: EPOtherSettings + + + +*%************** Font Information *************** + +*DefaultFont: Courier +*Font Courier: Standard "(004.000)" Standard Disk +*Font Courier-Bold: Standard "(004.000)" Standard Disk +*Font Courier-BoldOblique: Standard "(004.000)" Standard Disk +*Font Courier-Oblique: Standard "(004.000)" Standard Disk + +*% Printer Messages (verbatim from printer): +*Message: "%%[ exitserver: permanent state may be changed ]%%" +*Message: "%%[ Flushing: rest of job (to end-of-file) will be ignored ]%%" +*Message: "\FontName\ not found, using Courier" + +*% Printer Error (format: %%[ PrinterError: ]%%) +*%PrinterError: "cover open" +*%PrinterError: "cassette open" + + + +*% Status (format: %%[ status: ] %%) +*Status: "idle" +*Status: "processing" +*Status: "printing" +*%Status: "PrinterError: cover open" +*%Status: "PrinterError: cassette open" + + + +*% Input Sources (format: %%[ status: ; source: ]%% ) +*Source: "Ethernet" +*Source: "USB" + + + +*DefaultColorSep: ProcessBlack.134lpi.300x300dpi + +*ColorSepScreenAngle ProcessCyan.106lpi.300x300dpi/106 lpi / 300 dpi: "45" +*ColorSepScreenAngle ProcessMagenta.134lpi.300x300dpi/134 lpi / 300 dpi: "26" +*ColorSepScreenAngle ProcessYellow.150lpi.300x300dpi/150 lpi / 300 dpi: "0" +*ColorSepScreenAngle ProcessBlack.134lpi.300x300dpi/134 lpi / 300 dpi: "63" +*ColorSepScreenAngle ProcessRed.134lpi.300x300dpi/134 lpi / 300 dpi: "63" +*ColorSepScreenAngle ProcessGreen.134lpi.300x300dpi/134 lpi / 300 dpi: "63" +*ColorSepScreenAngle ProcessBlue.134lpi.300x300dpi/134 lpi / 300 dpi: "63" + +*ColorSepScreenFreq ProcessCyan.106lpi.300x300dpi/106 lpi / 300 dpi: "106" +*ColorSepScreenFreq ProcessMagenta.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessYellow.150lpi.300x300dpi/150 lpi / 300 dpi: "150" +*ColorSepScreenFreq ProcessBlack.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessRed.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessGreen.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessBlue.134lpi.300x300dpi/134 lpi / 300 dpi: "134" + +*ColorSepScreenAngle ProcessCyan.141lpi.600x600dpi/141 lpi / 600 dpi: "45" +*ColorSepScreenAngle ProcessMagenta.145lpi.600x600dpi/145 lpi / 600 dpi: "14" +*ColorSepScreenAngle ProcessYellow.150lpi.600x600dpi/150 lpi / 600 dpi: "0" +*ColorSepScreenAngle ProcessBlack.145lpi.600x600dpi/145 lpi / 600 dpi: "75" +*ColorSepScreenAngle ProcessRed.145lpi.600x600dpi/145 lpi / 600 dpi: "75" +*ColorSepScreenAngle ProcessGreen.145lpi.600x600dpi/145 lpi / 600 dpi: "75" +*ColorSepScreenAngle ProcessBlue.145lpi.600x600dpi/145 lpi / 600 dpi: "75" + +*ColorSepScreenFreq ProcessCyan.141lpi.600x600dpi/141 lpi / 600 dpi: "141" +*ColorSepScreenFreq ProcessMagenta.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessYellow.150lpi.600x600dpi/150 lpi / 600 dpi: "150" +*ColorSepScreenFreq ProcessBlack.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessRed.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessGreen.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessBlue.145lpi.600x600dpi/145 lpi / 600 dpi: "145" + + diff --git a/modules/printhost/ppd/epson-single.ppd b/modules/printhost/ppd/epson-single.ppd new file mode 100644 index 00000000..0b276b62 --- /dev/null +++ b/modules/printhost/ppd/epson-single.ppd @@ -0,0 +1,1404 @@ +*PPD-Adobe: "4.3" +*% ========================================= +*% Copyright(C) Seiko Epson Corporation 2020. +*% All rights reserved. +*% ========================================= +*% PPD for EPSON ET-5880 Series PS +*% Sep. 13, 2019 +*% ========================================= + +*FormatVersion: "4.3" +*FileVersion: "1.20" +*LanguageEncoding: ISOLatin1 +*LanguageVersion: English +*PCFileName: "EPET5880.PPD" +*PSVersion: "(3017.104) 0" +*Product: "(ET-5880 Series)" +*Product: "(EPSON ET-5880 Series)" +*ModelName: "EPSON ET-5880 Series PS" +*ShortNickName: "EPSON ET-5880 Series PS" +*NickName: "EPSON ET-5880 Series PS v3017.104" +*Manufacturer: "Epson" +*cupsLanguages: "fr es it de pt nl" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" +*cupsManualCopies: False + +*%***** Notes on order dependency ***** +*% 20 Input Tray Selection +*% 30 Image protect - used in conjunction with 50, Rendering Color +*% and depth, to validate page size vs. available frame buffer memory +*% 55 Color Quality - must follow 50 since color quality is only effective +*% when color mode is color +*% 70 Selectable Separations - Overrides color model specified in (50) so +*% it must follow it in the file +*% 100 Page Size - must be set after 30, 50, and 60 since these determine +*% the frame buffer memory size and thus, the allowable page sizes. + + +*UIConstraints: *InputSlot LC2 *PageSize A5.Transverse +*UIConstraints: *InputSlot LC2 *PageSize A6 +*UIConstraints: *InputSlot LC2 *PageSize B6 +*UIConstraints: *InputSlot LC2 *PageSize Env10 +*UIConstraints: *InputSlot LC2 *PageSize EnvDL +*UIConstraints: *InputSlot LC2 *PageSize EnvC6 +*UIConstraints: *InputSlot LC2 *PageRegion A5.Transverse +*UIConstraints: *InputSlot LC2 *PageRegion A6 +*UIConstraints: *InputSlot LC2 *PageRegion B6 +*UIConstraints: *InputSlot LC2 *PageRegion Env10 +*UIConstraints: *InputSlot LC2 *PageRegion EnvDL +*UIConstraints: *InputSlot LC2 *PageRegion EnvC6 +*UIConstraints: *Duplex DuplexTumble *PageSize Env10 +*UIConstraints: *Duplex DuplexTumble *PageSize EnvDL +*UIConstraints: *Duplex DuplexTumble *PageSize EnvC6 +*UIConstraints: *Duplex DuplexNoTumble *PageSize Env10 +*UIConstraints: *Duplex DuplexNoTumble *PageSize EnvDL +*UIConstraints: *Duplex DuplexNoTumble *PageSize EnvC6 +*UIConstraints: *Duplex DuplexTumble *PageRegion Env10 +*UIConstraints: *Duplex DuplexTumble *PageRegion EnvDL +*UIConstraints: *Duplex DuplexTumble *PageRegion EnvC6 +*UIConstraints: *Duplex DuplexNoTumble *PageRegion Env10 +*UIConstraints: *Duplex DuplexNoTumble *PageRegion EnvDL +*UIConstraints: *Duplex DuplexNoTumble *PageRegion EnvC6 +*UIConstraints: *InputSlot LC2 *MediaType MP-HW +*UIConstraints: *InputSlot LC2 *MediaType PGPP +*UIConstraints: *InputSlot LC2 *MediaType UGPP +*UIConstraints: *InputSlot LC2 *MediaType LCPP +*UIConstraints: *InputSlot LC2 *MediaType PSPP +*UIConstraints: *InputSlot LC2 *MediaType Thick +*UIConstraints: *InputSlot LC2 *MediaType Envelope +*UIConstraints: *InputSlot LC2 *MediaType ESF(PQIJP) +*UIConstraints: *Duplex DuplexTumble *MediaType Envelope +*UIConstraints: *Duplex DuplexTumble *MediaType UGPP +*UIConstraints: *Duplex DuplexTumble *MediaType PGPP +*UIConstraints: *Duplex DuplexTumble *MediaType PSPP +*UIConstraints: *Duplex DuplexTumble *MediaType LCPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType Envelope +*UIConstraints: *Duplex DuplexNoTumble *MediaType UGPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType PGPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType PSPP +*UIConstraints: *Duplex DuplexNoTumble *MediaType LCPP +*UIConstraints: *Resolution 300dpi *MediaType MP-HW +*UIConstraints: *Resolution 300dpi *MediaType PGPP +*UIConstraints: *Resolution 300dpi *MediaType UGPP +*UIConstraints: *Resolution 300dpi *MediaType LCPP +*UIConstraints: *Resolution 300dpi *MediaType PSPP +*UIConstraints: *Resolution 300dpi *MediaType Envelope +*UIConstraints: *Resolution 300dpi *MediaType ESF(PQIJP) +*% ======= Reversed UI ========= +*UIConstraints: *PageSize A5.Transverse *InputSlot LC2 +*UIConstraints: *PageSize A6 *InputSlot LC2 +*UIConstraints: *PageSize B6 *InputSlot LC2 +*UIConstraints: *PageSize Env10 *InputSlot LC2 +*UIConstraints: *PageSize EnvDL *InputSlot LC2 +*UIConstraints: *PageSize EnvC6 *InputSlot LC2 +*UIConstraints: *PageRegion A5.Transverse *InputSlot LC2 +*UIConstraints: *PageRegion A6 *InputSlot LC2 +*UIConstraints: *PageRegion B6 *InputSlot LC2 +*UIConstraints: *PageRegion Env10 *InputSlot LC2 +*UIConstraints: *PageRegion EnvDL *InputSlot LC2 +*UIConstraints: *PageRegion EnvC6 *InputSlot LC2 +*UIConstraints: *PageSize Env10 *Duplex DuplexTumble +*UIConstraints: *PageSize EnvDL *Duplex DuplexTumble +*UIConstraints: *PageSize EnvC6 *Duplex DuplexTumble +*UIConstraints: *PageSize Env10 *Duplex DuplexNoTumble +*UIConstraints: *PageSize EnvDL *Duplex DuplexNoTumble +*UIConstraints: *PageSize EnvC6 *Duplex DuplexNoTumble +*UIConstraints: *PageRegion Env10 *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvDL *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvC6 *Duplex DuplexTumble +*UIConstraints: *PageRegion Env10 *Duplex DuplexNoTumble +*UIConstraints: *PageRegion EnvDL *Duplex DuplexNoTumble +*UIConstraints: *PageRegion EnvC6 *Duplex DuplexNoTumble +*UIConstraints: *MediaType MP-HW *InputSlot LC2 +*UIConstraints: *MediaType PGPP *InputSlot LC2 +*UIConstraints: *MediaType UGPP *InputSlot LC2 +*UIConstraints: *MediaType LCPP *InputSlot LC2 +*UIConstraints: *MediaType PSPP *InputSlot LC2 +*UIConstraints: *MediaType Thick *InputSlot LC2 +*UIConstraints: *MediaType Envelope *InputSlot LC2 +*UIConstraints: *MediaType ESF(PQIJP) *InputSlot LC2 +*UIConstraints: *MediaType Envelope *Duplex DuplexTumble +*UIConstraints: *MediaType UGPP *Duplex DuplexTumble +*UIConstraints: *MediaType PGPP *Duplex DuplexTumble +*UIConstraints: *MediaType PSPP *Duplex DuplexTumble +*UIConstraints: *MediaType LCPP *Duplex DuplexTumble +*UIConstraints: *MediaType Envelope *Duplex DuplexNoTumble +*UIConstraints: *MediaType UGPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType PGPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType PSPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType LCPP *Duplex DuplexNoTumble +*UIConstraints: *MediaType MP-HW *Resolution 300dpi +*UIConstraints: *MediaType PGPP *Resolution 300dpi +*UIConstraints: *MediaType UGPP *Resolution 300dpi +*UIConstraints: *MediaType LCPP *Resolution 300dpi +*UIConstraints: *MediaType PSPP *Resolution 300dpi +*UIConstraints: *MediaType Envelope *Resolution 300dpi +*UIConstraints: *MediaType ESF(PQIJP) *Resolution 300dpi + + + +*%*********** Device Capabilities ************ +*LanguageLevel: "3" +*ColorDevice: True +*DefaultColorSpace: CMYK +*Throughput: "32" +*1284Modes Parallel: Compat Nibble ECP + + +*TTRasterizer: Type42 +*?TTRasterizer: " + save + 42 /FontType resourcestatus {pop pop (Type42)}{(No Type42)}ifelse = flush + restore + " +*End + + +*Protocols: TBCP + +*% *Protocols: BCP TBCP PJL +*% *JCLBegin: "<1B>%-12345X" +*% *JCLToPSInterpreter: "@PJL ENTER LANGUAGE = POSTSCRIPT <0A>" +*% *JCLEnd: "<1B>%-12345X" + +*FreeVM: "737179008" +*VMOption 256Meg: "737179008" +*FCacheSize 256Meg: 30515200 + + + +*SuggestedJobTimeout: "0" +*SuggestedWaitTimeout: "0" +*PrintPSErrors: True + + +*FileSystem: True +*?FileSystem: " + save false + (%disk?%) + { currentdevparams dup /Writeable known + { /Writeable get {pop true} if } { pop } ifelse + } 10 string /IODevice resourceforall + {(True)}{(False)} ifelse = flush + restore" +*End + + + +*%==== Missing StartJobPassword & SystemParamsPassword in PS === + + +*Password: "()" +*ExitServer: " + count 0 eq + { false } { true exch startjob } ifelse + not { + (WARNING: Cannot modify initial VM.) = + (Missing or invalid password.) = + (Please contact the author of this software.) = flush quit + } if +" +*End + + +*Reset: " + count 0 eq + { false } { true exch startjob } ifelse + not { + (WARNING: Cannot reset printer.) = + (Missing or invalid password.) = + (Please contact the author of this software.) = flush quit + } if + systemdict /quit get exec + (WARNING : Printer Reset Failed.) = flush +" +*End + + +*%Plus90|Minus90|Any +*LandscapeOrientation: Plus90 + + + +*%*************** Halftone Information *************** +*% ScreenFreq and ScreenAngle be here in case some +*% application trying to set halftone type to 1 + +*DefaultHalftoneType: 100 +*ScreenFreq: "150.0" +*ScreenAngle: "45.0" +*DefaultScreenProc: Dot +*ScreenProc Dot: " +{abs exch abs 2 copy add 1 gt {1 sub dup mul exch +1 sub dup mul add 1 sub } {dup mul exch dup mul +add 1 exch sub } ifelse } bind +" +*End +*ScreenProc Line: "{ pop } bind" +*ScreenProc Ellipse: "{ dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub } bind" + +*DefaultTransfer: Null +*Transfer Null: "{ }" +*Transfer Null.Inverse: "{ 1 exch sub } bind" + + +*%**************** Paper Handling ****************** + +*OpenUI *PageSize/Page Size: PickOne +*fr.Translation PageSize/Format papier: "" +*es.Translation PageSize/Tamaño Papel: "" +*it.Translation PageSize/Formato pagina: "" +*de.Translation PageSize/PapierFormat: "" +*pt.Translation PageSize/Formato de Papel: "" +*nl.Translation PageSize/Papierformaat: "" + +*OrderDependency: 100 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize A4/A4: "<> setpagedevice" +*fr.PageSize A4/A4: "" +*es.PageSize A4/A4: "" +*it.PageSize A4/A4: "" +*de.PageSize A4/A4: "" +*pt.PageSize A4/A4: "" +*nl.PageSize A4/A4: "" + +*PageSize A5.Transverse/A5: "<> setpagedevice" +*fr.PageSize A5.Transverse/A5: "" +*es.PageSize A5.Transverse/A5: "" +*it.PageSize A5.Transverse/A5: "" +*de.PageSize A5.Transverse/A5: "" +*pt.PageSize A5.Transverse/A5: "" +*nl.PageSize A5.Transverse/A5: "" + +*PageSize A6/A6: "<> setpagedevice" +*fr.PageSize A6/A6: "" +*es.PageSize A6/A6: "" +*it.PageSize A6/A6: "" +*de.PageSize A6/A6: "" +*pt.PageSize A6/A6: "" +*nl.PageSize A6/A6: "" + +*PageSize B5.Transverse/B5 JIS: "<> setpagedevice" +*fr.PageSize B5.Transverse/B5 JIS: "" +*es.PageSize B5.Transverse/B5 JIS: "" +*it.PageSize B5.Transverse/B5 JIS: "" +*de.PageSize B5.Transverse/B5 JIS: "" +*pt.PageSize B5.Transverse/B5 JIS: "" +*nl.PageSize B5.Transverse/B5 JIS: "" + +*PageSize B6/B6: "<> setpagedevice" +*fr.PageSize B6/B6: "" +*es.PageSize B6/B6: "" +*it.PageSize B6/B6: "" +*de.PageSize B6/B6: "" +*pt.PageSize B6/B6: "" +*nl.PageSize B6/B6: "" + +*PageSize Letter/Letter: "<> setpagedevice" +*fr.PageSize Letter/Letter: "" +*es.PageSize Letter/Carta: "" +*it.PageSize Letter/Letter: "" +*de.PageSize Letter/Letter: "" +*pt.PageSize Letter/Letter: "" +*nl.PageSize Letter/Letter: "" + +*PageSize 8.5x13in/8.5 x 13 in: "<> setpagedevice" +*fr.PageSize 8.5x13in/8.5 x 13 p.: "" +*es.PageSize 8.5x13in/8.5 x 13 pulg: "" +*it.PageSize 8.5x13in/8.5 x 13 pol.: "" +*de.PageSize 8.5x13in/8.5 x 13 Zoll: "" +*pt.PageSize 8.5x13in/8.5 x 13 pol: "" +*nl.PageSize 8.5x13in/8.5 x 13 in: "" + +*PageSize Legal/Legal: "<> setpagedevice" +*fr.PageSize Legal/Legal: "" +*es.PageSize Legal/Oficio: "" +*it.PageSize Legal/Legal: "" +*de.PageSize Legal/Legal: "" +*pt.PageSize Legal/Legal: "" +*nl.PageSize Legal/Legal: "" + +*PageSize Executive/Executive: "<> setpagedevice" +*fr.PageSize Executive/Executive: "" +*es.PageSize Executive/Ejecutivo: "" +*it.PageSize Executive/Executive: "" +*de.PageSize Executive/Executive: "" +*pt.PageSize Executive/Executive: "" +*nl.PageSize Executive/Executive: "" + +*PageSize Env10/COM10 Env: "<> setpagedevice" +*fr.PageSize Env10/COM10 Env: "" +*es.PageSize Env10/Sobre COM10: "" +*it.PageSize Env10/COM10 Env: "" +*de.PageSize Env10/COM10-Umschlag: "" +*pt.PageSize Env10/COM10 Env: "" +*nl.PageSize Env10/COM10 Env: "" + +*PageSize EnvDL/DL Env: "<> setpagedevice" +*fr.PageSize EnvDL/DL Env: "" +*es.PageSize EnvDL/Sobre DL: "" +*it.PageSize EnvDL/DL Env: "" +*de.PageSize EnvDL/DL-Umschlag: "" +*pt.PageSize EnvDL/DL Env: "" +*nl.PageSize EnvDL/DL Env: "" + +*PageSize EnvC6/C6 Env: "<> setpagedevice" +*fr.PageSize EnvC6/C6 Env: "" +*es.PageSize EnvC6/Sobre C6: "" +*it.PageSize EnvC6/C6 Env: "" +*de.PageSize EnvC6/C6-Umschlag: "" +*pt.PageSize EnvC6/C6 Env: "" +*nl.PageSize EnvC6/C6 Env: "" + + +*?PageSize: " +save + currentpagedevice /PageSize get aload pop + 2 copy gt {exch} if + (Unknown) + << + [595 842] (A4) + [420 595] (A5.Transverse) + [297 420] (A6) + [516 729] (B5.Transverse) + [363 516] (B6) + [612 792] (Letter) + [612 936] (8.5x13in) + [612 1008] (Legal) + [522 756] (Executive) + [297 684] (Env10) + [312 624] (EnvDL) + [323 459] (EnvC6) + >> + { exch aload pop 4 index sub abs 5 le exch + 5 index sub abs 5 le and + {exch pop exit} {pop} ifelse + } bind forall + = flush pop pop +restore +" +*End +*CloseUI: *PageSize + +*OpenUI *PageRegion/Page Size: PickOne +*fr.Translation PageRegion/Format papier: "" +*es.Translation PageRegion/Tamaño Papel: "" +*it.Translation PageRegion/Formato pagina: "" +*de.Translation PageRegion/PapierFormat: "" +*pt.Translation PageRegion/Formato de Papel: "" +*nl.Translation PageRegion/Papierformaat: "" + +*OrderDependency: 110 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion A4/A4: "<> setpagedevice" +*fr.PageRegion A4/A4: "" +*es.PageRegion A4/A4: "" +*it.PageRegion A4/A4: "" +*de.PageRegion A4/A4: "" +*pt.PageRegion A4/A4: "" +*nl.PageRegion A4/A4: "" + +*PageRegion A5.Transverse/A5: "<> setpagedevice" +*fr.PageRegion A5.Transverse/A5: "" +*es.PageRegion A5.Transverse/A5: "" +*it.PageRegion A5.Transverse/A5: "" +*de.PageRegion A5.Transverse/A5: "" +*pt.PageRegion A5.Transverse/A5: "" +*nl.PageRegion A5.Transverse/A5: "" + +*PageRegion A6/A6: "<> setpagedevice" +*fr.PageRegion A6/A6: "" +*es.PageRegion A6/A6: "" +*it.PageRegion A6/A6: "" +*de.PageRegion A6/A6: "" +*pt.PageRegion A6/A6: "" +*nl.PageRegion A6/A6: "" + +*PageRegion B5.Transverse/B5 JIS: "<> setpagedevice" +*fr.PageRegion B5.Transverse/B5 JIS: "" +*es.PageRegion B5.Transverse/B5 JIS: "" +*it.PageRegion B5.Transverse/B5 JIS: "" +*de.PageRegion B5.Transverse/B5 JIS: "" +*pt.PageRegion B5.Transverse/B5 JIS: "" +*nl.PageRegion B5.Transverse/B5 JIS: "" + +*PageRegion B6/B6: "<> setpagedevice" +*fr.PageRegion B6/B6: "" +*es.PageRegion B6/B6: "" +*it.PageRegion B6/B6: "" +*de.PageRegion B6/B6: "" +*pt.PageRegion B6/B6: "" +*nl.PageRegion B6/B6: "" + +*PageRegion Letter/Letter: "<> setpagedevice" +*fr.PageRegion Letter/Letter: "" +*es.PageRegion Letter/Carta: "" +*it.PageRegion Letter/Letter: "" +*de.PageRegion Letter/Letter: "" +*pt.PageRegion Letter/Letter: "" +*nl.PageRegion Letter/Letter: "" + +*PageRegion 8.5x13in/8.5 x 13 in: "<> setpagedevice" +*fr.PageRegion 8.5x13in/8.5 x 13 p.: "" +*es.PageRegion 8.5x13in/8.5 x 13 pulg: "" +*it.PageRegion 8.5x13in/8.5 x 13 pol.: "" +*de.PageRegion 8.5x13in/8.5 x 13 Zoll: "" +*pt.PageRegion 8.5x13in/8.5 x 13 pol: "" +*nl.PageRegion 8.5x13in/8.5 x 13 in: "" + +*PageRegion Legal/Legal: "<> setpagedevice" +*fr.PageRegion Legal/Legal: "" +*es.PageRegion Legal/Oficio: "" +*it.PageRegion Legal/Legal: "" +*de.PageRegion Legal/Legal: "" +*pt.PageRegion Legal/Legal: "" +*nl.PageRegion Legal/Legal: "" + +*PageRegion Executive/Executive: "<> setpagedevice" +*fr.PageRegion Executive/Executive: "" +*es.PageRegion Executive/Ejecutivo: "" +*it.PageRegion Executive/Executive: "" +*de.PageRegion Executive/Executive: "" +*pt.PageRegion Executive/Executive: "" +*nl.PageRegion Executive/Executive: "" + +*PageRegion Env10/COM10 Env: "<> setpagedevice" +*fr.PageRegion Env10/COM10 Env: "" +*es.PageRegion Env10/Sobre COM10: "" +*it.PageRegion Env10/COM10 Env: "" +*de.PageRegion Env10/COM10-Umschlag: "" +*pt.PageRegion Env10/COM10 Env: "" +*nl.PageRegion Env10/COM10 Env: "" + +*PageRegion EnvDL/DL Env: "<> setpagedevice" +*fr.PageRegion EnvDL/DL Env: "" +*es.PageRegion EnvDL/Sobre DL: "" +*it.PageRegion EnvDL/DL Env: "" +*de.PageRegion EnvDL/DL-Umschlag: "" +*pt.PageRegion EnvDL/DL Env: "" +*nl.PageRegion EnvDL/DL Env: "" + +*PageRegion EnvC6/C6 Env: "<> setpagedevice" +*fr.PageRegion EnvC6/C6 Env: "" +*es.PageRegion EnvC6/Sobre C6: "" +*it.PageRegion EnvC6/C6 Env: "" +*de.PageRegion EnvC6/C6-Umschlag: "" +*pt.PageRegion EnvC6/C6 Env: "" +*nl.PageRegion EnvC6/C6 Env: "" + +*CloseUI: *PageRegion + +*DefaultImageableArea: Letter +*ImageableArea A4/A4: "8.40 8.40 586.80 833.52" +*fr.ImageableArea A4/A4: "" +*es.ImageableArea A4/A4: "" +*it.ImageableArea A4/A4: "" +*de.ImageableArea A4/A4: "" +*pt.ImageableArea A4/A4: "" +*nl.ImageableArea A4/A4: "" + +*ImageableArea A5.Transverse/A5: "8.40 8.40 411.12 586.80" +*fr.ImageableArea A5.Transverse/A5: "" +*es.ImageableArea A5.Transverse/A5: "" +*it.ImageableArea A5.Transverse/A5: "" +*de.ImageableArea A5.Transverse/A5: "" +*pt.ImageableArea A5.Transverse/A5: "" +*nl.ImageableArea A5.Transverse/A5: "" + +*ImageableArea A6/A6: "8.40 8.40 289.20 411.12" +*fr.ImageableArea A6/A6: "" +*es.ImageableArea A6/A6: "" +*it.ImageableArea A6/A6: "" +*de.ImageableArea A6/A6: "" +*pt.ImageableArea A6/A6: "" +*nl.ImageableArea A6/A6: "" + +*ImageableArea B5.Transverse/B5 JIS: "8.40 8.40 507.60 720.24" +*fr.ImageableArea B5.Transverse/B5 JIS: "" +*es.ImageableArea B5.Transverse/B5 JIS: "" +*it.ImageableArea B5.Transverse/B5 JIS: "" +*de.ImageableArea B5.Transverse/B5 JIS: "" +*pt.ImageableArea B5.Transverse/B5 JIS: "" +*nl.ImageableArea B5.Transverse/B5 JIS: "" + +*ImageableArea B6/B6: "8.40 8.40 354.24 507.36" +*fr.ImageableArea B6/B6: "" +*es.ImageableArea B6/B6: "" +*it.ImageableArea B6/B6: "" +*de.ImageableArea B6/B6: "" +*pt.ImageableArea B6/B6: "" +*nl.ImageableArea B6/B6: "" + +*ImageableArea Letter/Letter: "8.40 8.40 603.60 783.60" +*fr.ImageableArea Letter/Letter: "" +*es.ImageableArea Letter/Carta: "" +*it.ImageableArea Letter/Letter: "" +*de.ImageableArea Letter/Letter: "" +*pt.ImageableArea Letter/Letter: "" +*nl.ImageableArea Letter/Letter: "" + +*ImageableArea 8.5x13in/8.5 x 13 in: "8.40 8.40 603.60 927.60" +*fr.ImageableArea 8.5x13in/8.5 x 13 p.: "" +*es.ImageableArea 8.5x13in/8.5 x 13 pulg: "" +*it.ImageableArea 8.5x13in/8.5 x 13 pol.: "" +*de.ImageableArea 8.5x13in/8.5 x 13 Zoll: "" +*pt.ImageableArea 8.5x13in/8.5 x 13 pol: "" +*nl.ImageableArea 8.5x13in/8.5 x 13 in: "" + +*ImageableArea Legal/Legal: "8.40 8.40 603.60 999.60" +*fr.ImageableArea Legal/Legal: "" +*es.ImageableArea Legal/Oficio: "" +*it.ImageableArea Legal/Legal: "" +*de.ImageableArea Legal/Legal: "" +*pt.ImageableArea Legal/Legal: "" +*nl.ImageableArea Legal/Legal: "" + +*ImageableArea Executive/Executive: "8.40 8.40 513.60 747.60" +*fr.ImageableArea Executive/Executive: "" +*es.ImageableArea Executive/Ejecutivo: "" +*it.ImageableArea Executive/Executive: "" +*de.ImageableArea Executive/Executive: "" +*pt.ImageableArea Executive/Executive: "" +*nl.ImageableArea Executive/Executive: "" + +*ImageableArea Env10/COM10 Env: "8.40 8.40 288.48 675.60" +*fr.ImageableArea Env10/COM10 Env: "" +*es.ImageableArea Env10/Sobre COM10: "" +*it.ImageableArea Env10/COM10 Env: "" +*de.ImageableArea Env10/COM10-Umschlag: "" +*pt.ImageableArea Env10/COM10 Env: "" +*nl.ImageableArea Env10/COM10 Env: "" + +*ImageableArea EnvDL/DL Env: "8.40 8.40 303.36 615.12" +*fr.ImageableArea EnvDL/DL Env: "" +*es.ImageableArea EnvDL/Sobre DL: "" +*it.ImageableArea EnvDL/DL Env: "" +*de.ImageableArea EnvDL/DL-Umschlag: "" +*pt.ImageableArea EnvDL/DL Env: "" +*nl.ImageableArea EnvDL/DL Env: "" + +*ImageableArea EnvC6/C6 Env: "8.40 8.40 314.64 450.72" +*fr.ImageableArea EnvC6/C6 Env: "" +*es.ImageableArea EnvC6/Sobre C6: "" +*it.ImageableArea EnvC6/C6 Env: "" +*de.ImageableArea EnvC6/C6-Umschlag: "" +*pt.ImageableArea EnvC6/C6 Env: "" +*nl.ImageableArea EnvC6/C6 Env: "" + +*?ImageableArea: " + save + /pr {10 string cvs print ( ) print} def + /prnl {10 string cvs = flush} def + /upperright {100 mul floor 100 div} bind def + /lowerleft {100 mul ceiling 100 div} bind def + /prall {2 {lowerleft pr} repeat upperright pr upperright prnl} def + newpath clippath pathbbox exch 4 2 roll exch prall + restore +" +*End + +*DefaultPaperDimension: Letter +*PaperDimension A4/A4: "595.20 841.92" +*fr.PaperDimension A4/A4: "" +*es.PaperDimension A4/A4: "" +*it.PaperDimension A4/A4: "" +*de.PaperDimension A4/A4: "" +*pt.PaperDimension A4/A4: "" +*nl.PaperDimension A4/A4: "" + +*PaperDimension A5.Transverse/A5: "419.52 595.20" +*fr.PaperDimension A5.Transverse/A5: "" +*es.PaperDimension A5.Transverse/A5: "" +*it.PaperDimension A5.Transverse/A5: "" +*de.PaperDimension A5.Transverse/A5: "" +*pt.PaperDimension A5.Transverse/A5: "" +*nl.PaperDimension A5.Transverse/A5: "" + +*PaperDimension A6/A6: "297.60 419.52" +*fr.PaperDimension A6/A6: "" +*es.PaperDimension A6/A6: "" +*it.PaperDimension A6/A6: "" +*de.PaperDimension A6/A6: "" +*pt.PaperDimension A6/A6: "" +*nl.PaperDimension A6/A6: "" + +*PaperDimension B5.Transverse/B5 JIS: "516.00 728.64" +*fr.PaperDimension B5.Transverse/B5 JIS: "" +*es.PaperDimension B5.Transverse/B5 JIS: "" +*it.PaperDimension B5.Transverse/B5 JIS: "" +*de.PaperDimension B5.Transverse/B5 JIS: "" +*pt.PaperDimension B5.Transverse/B5 JIS: "" +*nl.PaperDimension B5.Transverse/B5 JIS: "" + +*PaperDimension B6/B6: "362.64 515.76" +*fr.PaperDimension B6/B6: "" +*es.PaperDimension B6/B6: "" +*it.PaperDimension B6/B6: "" +*de.PaperDimension B6/B6: "" +*pt.PaperDimension B6/B6: "" +*nl.PaperDimension B6/B6: "" + +*PaperDimension Letter/Letter: "612.00 792.00" +*fr.PaperDimension Letter/Letter: "" +*es.PaperDimension Letter/Carta: "" +*it.PaperDimension Letter/Letter: "" +*de.PaperDimension Letter/Letter: "" +*pt.PaperDimension Letter/Letter: "" +*nl.PaperDimension Letter/Letter: "" + +*PaperDimension 8.5x13in/8.5 x 13 in: "612.00 936.00" +*fr.PaperDimension 8.5x13in/8.5 x 13 p.: "" +*es.PaperDimension 8.5x13in/8.5 x 13 pulg: "" +*it.PaperDimension 8.5x13in/8.5 x 13 pol.: "" +*de.PaperDimension 8.5x13in/8.5 x 13 Zoll: "" +*pt.PaperDimension 8.5x13in/8.5 x 13 pol: "" +*nl.PaperDimension 8.5x13in/8.5 x 13 in: "" + +*PaperDimension Legal/Legal: "612.00 1008.00" +*fr.PaperDimension Legal/Legal: "" +*es.PaperDimension Legal/Oficio: "" +*it.PaperDimension Legal/Legal: "" +*de.PaperDimension Legal/Legal: "" +*pt.PaperDimension Legal/Legal: "" +*nl.PaperDimension Legal/Legal: "" + +*PaperDimension Executive/Executive: "522.00 756.00" +*fr.PaperDimension Executive/Executive: "" +*es.PaperDimension Executive/Ejecutivo: "" +*it.PaperDimension Executive/Executive: "" +*de.PaperDimension Executive/Executive: "" +*pt.PaperDimension Executive/Executive: "" +*nl.PaperDimension Executive/Executive: "" + +*PaperDimension Env10/COM10 Env: "296.88 684.00" +*fr.PaperDimension Env10/COM10 Env: "" +*es.PaperDimension Env10/Sobre COM10: "" +*it.PaperDimension Env10/COM10 Env: "" +*de.PaperDimension Env10/COM10-Umschlag: "" +*pt.PaperDimension Env10/COM10 Env: "" +*nl.PaperDimension Env10/COM10 Env: "" + +*PaperDimension EnvDL/DL Env: "311.76 623.52" +*fr.PaperDimension EnvDL/DL Env: "" +*es.PaperDimension EnvDL/Sobre DL: "" +*it.PaperDimension EnvDL/DL Env: "" +*de.PaperDimension EnvDL/DL-Umschlag: "" +*pt.PaperDimension EnvDL/DL Env: "" +*nl.PaperDimension EnvDL/DL Env: "" + +*PaperDimension EnvC6/C6 Env: "323.04 459.12" +*fr.PaperDimension EnvC6/C6 Env: "" +*es.PaperDimension EnvC6/Sobre C6: "" +*it.PaperDimension EnvC6/C6 Env: "" +*de.PaperDimension EnvC6/C6-Umschlag: "" +*pt.PaperDimension EnvC6/C6 Env: "" +*nl.PaperDimension EnvC6/C6 Env: "" + + + + +*% ====== Custom PageSize ====== + +*HWMargins: 8.40 8.40 8.40 8.40 +*LeadingEdge Long: "" +*LeadingEdge Short: "" +*DefaultLeadingEdge: Long +*MaxMediaWidth: "612" +*MaxMediaHeight: "3401" +*NonUIOrderDependency: 160 AnySetup *CustomPageSize +*CustomPageSize True: " +pop pop +<< /Orientation 3 -1 roll dup 2 mod 0 eq {1 add} {1 sub} ifelse + /PageSize [7 -2 roll] +>> setpagedevice" +*End +*ParamCustomPageSize Width: 1 points 182 612 +*ParamCustomPageSize Height: 2 points 360 3401 +*ParamCustomPageSize Orientation: 3 int 0 3 +*ParamCustomPageSize WidthOffset: 4 points 0 0 +*ParamCustomPageSize HeightOffset: 5 points 0 0 + + +*% ==== MediaType ==== +*% Should be after PageSize code +*% Must be after InputSlot +*OpenGroup: EPQualitySettings/Quality +*fr.Translation EPQualitySettings/Qualité: "" +*es.Translation EPQualitySettings/ResoluciÓn: "" +*it.Translation EPQualitySettings/Qualità: "" +*de.Translation EPQualitySettings/Qualität: "" +*pt.Translation EPQualitySettings/Resolução: "" +*nl.Translation EPQualitySettings/Afdrukkwaliteit: "" + +*OpenUI *MediaType/MediaType: PickOne +*fr.Translation MediaType/Type de papier: "" +*es.Translation MediaType/Tipo Papel: "" +*it.Translation MediaType/Tipo supporto: "" +*de.Translation MediaType/Druckmedium: "" +*pt.Translation MediaType/Tipo de Papel: "" +*nl.Translation MediaType/Afdrukmateriaal: "" + +*OrderDependency: 150 AnySetup *MediaType +*DefaultMediaType: Plain +*MediaType Unspecified/Unspecified: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Unspecified/Non spécifié: "" +*es.MediaType Unspecified/Sin especificar: "" +*it.MediaType Unspecified/Non specificato: "" +*de.MediaType Unspecified/Undefiniert: "" +*pt.MediaType Unspecified/Não especificado: "" +*nl.MediaType Unspecified/Onbepaald: "" + +*MediaType Plain/Plain: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Plain/Ordinaire: "" +*es.MediaType Plain/llano: "" +*it.MediaType Plain/Comune: "" +*de.MediaType Plain/Normalpapier: "" +*pt.MediaType Plain/planície: "" +*nl.MediaType Plain/Gewoon: "" + +*MediaType Letterhead/Letterhead: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Letterhead/En tête: "" +*es.MediaType Letterhead/Encabezado: "" +*it.MediaType Letterhead/Intestata: "" +*de.MediaType Letterhead/Letterhead: "" +*pt.MediaType Letterhead/Timbrado: "" +*nl.MediaType Letterhead/Briefhoofd: "" + +*MediaType Recycled/Recycled: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Recycled/Recyclé : "" +*es.MediaType Recycled/Reciclado: "" +*it.MediaType Recycled/Riciclata: "" +*de.MediaType Recycled/Recycling Papier: "" +*pt.MediaType Recycled/Reciclado: "" +*nl.MediaType Recycled/Gerecycleerd: "" + +*MediaType Color/Color: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Color/Couleur: "" +*es.MediaType Color/Color: "" +*it.MediaType Color/Colore: "" +*de.MediaType Color/Farbe: "" +*pt.MediaType Color/Cor: "" +*nl.MediaType Color/Kleur: "" + +*MediaType Preprinted/Preprinted: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Preprinted/Pré-imprimé: "" +*es.MediaType Preprinted/Preimpreso: "" +*it.MediaType Preprinted/Prestamp: "" +*de.MediaType Preprinted/Vordruck: "" +*pt.MediaType Preprinted/Pré-imp: "" +*nl.MediaType Preprinted/Preprinted: "" + +*MediaType BrighterColors/High quality plain paper: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType BrighterColors/Papier ordinaire haute qualité: "" +*es.MediaType BrighterColors/Papel normal de alta calidad: "" +*it.MediaType BrighterColors/Carta comune di alta qualità: "" +*de.MediaType BrighterColors/Hochwertiges Normalpapier: "" +*pt.MediaType BrighterColors/Papel normal de alta qualidade: "" +*nl.MediaType BrighterColors/Normaal papier van hoge kwaliteit: "" + +*MediaType Thick/Thick paper: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Thick/Papier-épais: "" +*es.MediaType Thick/Papel grueso: "" +*it.MediaType Thick/Carta spessa: "" +*de.MediaType Thick/Dickes-Papier: "" +*pt.MediaType Thick/Papel espesso: "" +*nl.MediaType Thick/Dik-papier: "" + +*MediaType MP-HW/Epson Matte: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType MP-HW/Epson Matte: "" +*es.MediaType MP-HW/Epson Matte: "" +*it.MediaType MP-HW/Epson Matte: "" +*de.MediaType MP-HW/Epson Matte: "" +*pt.MediaType MP-HW/Epson Matte: "" +*nl.MediaType MP-HW/Epson Matte: "" + +*MediaType PGPP/Epson Premium Glossy: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType PGPP/Epson Premium Glossy: "" +*es.MediaType PGPP/Epson Premium Glossy: "" +*it.MediaType PGPP/Epson Premium Glossy: "" +*de.MediaType PGPP/Epson Premium Glossy: "" +*pt.MediaType PGPP/Epson Premium Glossy: "" +*nl.MediaType PGPP/Epson Premium Glossy: "" + +*MediaType UGPP/Epson Ultra Glossy: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType UGPP/Epson Ultra Glossy: "" +*es.MediaType UGPP/Epson Ultra Glossy: "" +*it.MediaType UGPP/Epson Ultra Glossy: "" +*de.MediaType UGPP/Epson Ultra Glossy: "" +*pt.MediaType UGPP/Epson Ultra Glossy: "" +*nl.MediaType UGPP/Epson Ultra Glossy: "" + +*MediaType LCPP/Photo Paper Glossy: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType LCPP/Photo Paper Glossy: "" +*es.MediaType LCPP/Photo Paper Glossy: "" +*it.MediaType LCPP/Photo Paper Glossy: "" +*de.MediaType LCPP/Photo Paper Glossy: "" +*pt.MediaType LCPP/Photo Paper Glossy: "" +*nl.MediaType LCPP/Photo Paper Glossy: "" + +*MediaType PSPP/Epson Premium Semigloss: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType PSPP/Epson Premium Semigloss: "" +*es.MediaType PSPP/Epson Premium Semigloss: "" +*it.MediaType PSPP/Epson Premium Semigloss: "" +*de.MediaType PSPP/Epson Premium Semigloss: "" +*pt.MediaType PSPP/Epson Premium Semigloss: "" +*nl.MediaType PSPP/Epson Premium Semigloss: "" + +*MediaType Envelope/Envelope: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType Envelope/Enveloppe: "" +*es.MediaType Envelope/Sobre: "" +*it.MediaType Envelope/Busta: "" +*de.MediaType Envelope/Briefumschlag: "" +*pt.MediaType Envelope/Envelope: "" +*nl.MediaType Envelope/Enveloppe: "" + +*MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "mark { + <> setpagedevice + } stopped cleartomark" +*End +*fr.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*es.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*it.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*de.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*pt.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" +*nl.MediaType ESF(PQIJP)/Photo Quality Ink Jet Paper: "" + +*?MediaType: " + save + currentpagedevice /MediaType get dup + null eq { pop (Plain) } if = flush + restore +" +*End +*CloseUI: *MediaType +*CloseGroup: EPQualitySettings + + +*%************* Input Sources ************** +*% InputSlot must be before MediaType +*% We need to ensure MediaType is set to +*% Plain or ManualFeed will fail setting +*% to false. So reset here - WDS. + +*RequiresPageRegion All: True + +*OpenUI *InputSlot/InputSlot: PickOne +*fr.Translation InputSlot/Source papier: "" +*es.Translation InputSlot/Bandeja Entrada: "" +*it.Translation InputSlot/Vassoio ingresso: "" +*de.Translation InputSlot/Papierzufuhr: "" +*pt.Translation InputSlot/Sistema Alim.: "" +*nl.Translation InputSlot/Invoersleuf: "" + +*OrderDependency: 20 AnySetup *InputSlot +*DefaultInputSlot: Auto + +*InputSlot Auto/Auto Select: "" +*End +*fr.InputSlot Auto/Automatique: "" +*es.InputSlot Auto/Auto Selecci??ムn: "" +*it.InputSlot Auto/Selezione automatica: "" +*de.InputSlot Auto/Automatische Auswahl: "" +*pt.InputSlot Auto/Sele??????o autom???tica: "" +*nl.InputSlot Auto/Automatisch selecteren: "" + +*InputSlot ASF/Paper Tray: " + mark { + << /ManualFeed false /MediaPosition 0 >> setpagedevice + } stopped cleartomark +" +*End +*fr.InputSlot ASF/Bac díalimentation: "" +*es.InputSlot ASF/Bandeja de papel: "" +*it.InputSlot ASF/Vassoio carta: "" +*de.InputSlot ASF/Papierfach: "" +*pt.InputSlot ASF/Tabuleiro de papel: "" +*nl.InputSlot ASF/Papierlade: "" + +*InputSlot LC1/Paper Cassette 1: " + mark { + << /ManualFeed false /MediaPosition 1 >> setpagedevice + } stopped cleartomark +" +*End +*fr.InputSlot LC1/Bac papier 1: "" +*es.InputSlot LC1/Cassette de papel 1: "" +*it.InputSlot LC1/Cassetto carta 1: "" +*de.InputSlot LC1/Papierkassette 1: "" +*pt.InputSlot LC1/Alimentador de papel 1: "" +*nl.InputSlot LC1/Papiercassette 1: "" + +*InputSlot LC2/Paper Cassette 2: " + mark { + << /ManualFeed false /MediaPosition 2 >> setpagedevice + } stopped cleartomark +" +*End +*fr.InputSlot LC2/Bac papier 2: "" +*es.InputSlot LC2/Cassette de papel 2: "" +*it.InputSlot LC2/Cassetto carta 2: "" +*de.InputSlot LC2/Papierkassette 2: "" +*pt.InputSlot LC2/Alimentador de papel 2: "" +*nl.InputSlot LC2/Papiercassette 2: "" + +*?InputSlot: " + save + currentpagedevice dup /ManualFeed get + {pop (Manual)} + { + /MediaPosition get dup null eq {pop (Auto)} + {[(ASF) (LC1) (LC2)] exch get} ifelse + } ifelse = flush + restore + " +*End +*CloseUI: *InputSlot + + + +*%============ Be here as adviced ============ +*DefaultOutputOrder: Normal + +*OpenUI *Duplex/Duplex: PickOne +*fr.Translation Duplex/Duplex (Recto Verso): "" +*es.Translation Duplex/Dúplex: "" +*it.Translation Duplex/Duplex: "" +*de.Translation Duplex/Duplex: "" +*pt.Translation Duplex/Dúplex: "" +*nl.Translation Duplex/Duplex: "" + +*DefaultDuplex: None +*OrderDependency: 180 AnySetup *Duplex +*Duplex None/Simplex: "<> setpagedevice" +*fr.Duplex None/Simplex: "" +*es.Duplex None/Simple: "" +*it.Duplex None/Simplex: "" +*de.Duplex None/Simplex: "" +*pt.Duplex None/Simples: "" +*nl.Duplex None/Simplex: "" + +*Duplex DuplexTumble/Short Edge Binding: " + <> setpagedevice +" +*End +*fr.Duplex DuplexTumble/Reliure côté court: "" +*es.Duplex DuplexTumble/Encuadernar lado corto: "" +*it.Duplex DuplexTumble/Rilegatura lato corto: "" +*de.Duplex DuplexTumble/Bindung kurze Seite: "" +*pt.Duplex DuplexTumble/União Margem Curta: "" +*nl.Duplex DuplexTumble/Korte zijde binden: "" + +*Duplex DuplexNoTumble/Long Edge Binding: " + <> setpagedevice +" +*End +*fr.Duplex DuplexNoTumble/Reliure côté long: "" +*es.Duplex DuplexNoTumble/Encuadernar lado largo: "" +*it.Duplex DuplexNoTumble/Rilegatura lato lungo: "" +*de.Duplex DuplexNoTumble/Bindung lange Seite: "" +*pt.Duplex DuplexNoTumble/União Margem Longa: "" +*nl.Duplex DuplexNoTumble/Lange zijde binden: "" + +*?Duplex: " + save + currentpagedevice dup /Duplex 2 copy known + {get {/Tumble get {(DuplexTumble)}{(DuplexNoTumble)} ifelse} + {pop (None)} ifelse} {pop pop pop (None)}ifelse = flush + restore +" +*End +*CloseUI: *Duplex + + + +*%********** Printer Features ************** + + +*%******** ColorMode - Must preceed ColorQuality ******** +*OpenGroup: EPColorSettings/Color +*fr.Translation EPColorSettings/Paramètre Couleur: "" +*es.Translation EPColorSettings/Ajuste del color: "" +*it.Translation EPColorSettings/Impostazione colore: "" +*de.Translation EPColorSettings/Farbeinstellung: "" +*pt.Translation EPColorSettings/Definição de Cor: "" +*nl.Translation EPColorSettings/Kleurinstelling: "" + +*OpenUI *EPRendering/Color Mode: PickOne +*fr.Translation EPRendering/Coloration: "" +*es.Translation EPRendering/Color: "" +*it.Translation EPRendering/Modo colore: "" +*de.Translation EPRendering/Farbmodus: "" +*pt.Translation EPRendering/Modo de Cores: "" +*nl.Translation EPRendering/Kleuring: "" + +*DefaultEPRendering: RGB +*OrderDependency: 60 AnySetup *EPRendering +*EPRendering None/Monochrome: " + <> + setpagedevice" +*End +*fr.EPRendering None/Monochrome: "" +*es.EPRendering None/Negro: "" +*it.EPRendering None/Mono: "" +*de.EPRendering None/Monochrom: "" +*pt.EPRendering None/Monocromático: "" +*nl.EPRendering None/monochroom: "" + +*EPRendering RGB/Color: " + <> + setpagedevice" +*End +*fr.EPRendering RGB/Couleur: "" +*es.EPRendering RGB/Color: "" +*it.EPRendering RGB/Colore: "" +*de.EPRendering RGB/Farbe: "" +*pt.EPRendering RGB/Cor: "" +*nl.EPRendering RGB/Kleur: "" + +*?EPRendering: " + save + <> + currentpagedevice /ProcessColorModel get 2 copy known + { + get + } + { + pop pop (RGB) + }ifelse = flush + restore +" +*End +*CloseUI: *EPRendering +*CloseGroup: EPColorSettings + + +*%*************** Resolution options *************** +*OpenGroup: EPQualitySettings/Quality +*fr.Translation EPQualitySettings/Qualité: "" +*es.Translation EPQualitySettings/ResoluciÓn: "" +*it.Translation EPQualitySettings/Qualità: "" +*de.Translation EPQualitySettings/Qualität: "" +*pt.Translation EPQualitySettings/Resolução: "" +*nl.Translation EPQualitySettings/Afdrukkwaliteit: "" + +*OpenUI *Resolution/Print Quality: PickOne +*fr.Translation Resolution/Qualité d'impression: "" +*es.Translation Resolution/Modo Gráfico: "" +*it.Translation Resolution/Qualité: "" +*de.Translation Resolution/Qualität: "" +*pt.Translation Resolution/Modo Gráfico: "" +*nl.Translation Resolution/Afdrukkwaliteit: "" + +*OrderDependency: 40 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 1200dpi/Maximum: "mark { + << + /DeviceRenderingInfo <> + /HWResolution [1200.0 1200.0] + >> setpagedevice + } stopped cleartomark" +*End +*fr.Resolution 1200dpi/Maximum: "" +*es.Resolution 1200dpi/Máximo: "" +*it.Resolution 1200dpi/Massimo: "" +*de.Resolution 1200dpi/Maximal: "" +*pt.Resolution 1200dpi/Máximo: "" +*nl.Resolution 1200dpi/Maximale: "" + +*Resolution 600dpi/Fine: "mark { + << + /DeviceRenderingInfo <> + /HWResolution [600.0 600.0] + >> setpagedevice + } stopped cleartomark" +*End +*fr.Resolution 600dpi/Fin: "" +*es.Resolution 600dpi/Fino: "" +*it.Resolution 600dpi/Fine: "" +*de.Resolution 600dpi/Fein: "" +*pt.Resolution 600dpi/Óptima: "" +*nl.Resolution 600dpi/Fijn: "" + +*Resolution 300dpi/Fast: "mark { + << + /DeviceRenderingInfo <> + /HWResolution [300.0 300.0] + >> setpagedevice + } stopped cleartomark" +*End +*fr.Resolution 300dpi/Rapide: "" +*es.Resolution 300dpi/Rápida: "" +*it.Resolution 300dpi/Alta: "" +*de.Resolution 300dpi/Schnell: "" +*pt.Resolution 300dpi/Rápida: "" +*nl.Resolution 300dpi/Snel: "" + +*?Resolution: " + currentpagedevice /HWResolution get 0 get cvi + dup 300 eq + { pop (300dpi) } + {600 eq { (600dpi) }{ (1200dpi) } ifelse} ifelse + = flush " +*End +*CloseUI: *Resolution +*CloseGroup: EPQualitySettings + + +*%========== Press Simulations ========== +*OpenGroup: EPColorSettings/Color +*fr.Translation EPColorSettings/Paramètre Couleur: "" +*es.Translation EPColorSettings/Ajuste del color: "" +*it.Translation EPColorSettings/Impostazione colore: "" +*de.Translation EPColorSettings/Farbeinstellung: "" +*pt.Translation EPColorSettings/Definição de Cor: "" +*nl.Translation EPColorSettings/Kleurinstelling: "" + +*OpenUI *EPPressSimulation/Press Simulation: PickOne +*fr.Translation EPPressSimulation/Simulation presse: "" +*es.Translation EPPressSimulation/Simulación de imprenta: "" +*it.Translation EPPressSimulation/Simulazione stampa: "" +*de.Translation EPPressSimulation/Simulation Druckmaschine: "" +*pt.Translation EPPressSimulation/Simulação de Imprensa: "" +*nl.Translation EPPressSimulation/Perssimulatie: "" + +*DefaultEPPressSimulation: 6 +*OrderDependency: 130 AnySetup *EPPressSimulation +*EPPressSimulation 6/Auto: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 6/Auto: "" +*es.EPPressSimulation 6/Auto: "" +*it.EPPressSimulation 6/Auto: "" +*de.EPPressSimulation 6/Auto: "" +*pt.EPPressSimulation 6/Auto: "" +*nl.EPPressSimulation 6/Automatisch: "" + +*EPPressSimulation 4/Japan Color 2001: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 4/Japan Color 2001: "" +*es.EPPressSimulation 4/Japan Color 2001: "" +*it.EPPressSimulation 4/Japan Color 2001: "" +*de.EPPressSimulation 4/Japan Color 2001: "" +*pt.EPPressSimulation 4/Japan Color 2001: "" +*nl.EPPressSimulation 4/Japan Color 2001: "" + +*EPPressSimulation 2/SWOP: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 2/SWOP: "" +*es.EPPressSimulation 2/SWOP: "" +*it.EPPressSimulation 2/SWOP: "" +*de.EPPressSimulation 2/SWOP: "" +*pt.EPPressSimulation 2/SWOP: "" +*nl.EPPressSimulation 2/SWOP: "" + +*EPPressSimulation 3/Euroscale: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 3/Euroscale: "" +*es.EPPressSimulation 3/Euroscale: "" +*it.EPPressSimulation 3/Euroscale: "" +*de.EPPressSimulation 3/Euroscale: "" +*pt.EPPressSimulation 3/Euroscale: "" +*nl.EPPressSimulation 3/Euroscale: "" + +*EPPressSimulation 5/JMPA: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 5/JMPA: "" +*es.EPPressSimulation 5/JMPA: "" +*it.EPPressSimulation 5/JMPA: "" +*de.EPPressSimulation 5/JMPA: "" +*pt.EPPressSimulation 5/JMPA: "" +*nl.EPPressSimulation 5/JMPA: "" + +*EPPressSimulation 0/Off: " + <>>> setpagedevice" +*End +*fr.EPPressSimulation 0/Non: "" +*es.EPPressSimulation 0/Desactivado: "" +*it.EPPressSimulation 0/Off: "" +*de.EPPressSimulation 0/Aus: "" +*pt.EPPressSimulation 0/Não: "" +*nl.EPPressSimulation 0/Uit: "" + +*?EPPressSimulation: " + save + currentpagedevice /DeviceRenderingInfo 2 copy known + {get /PressType 2 copy known {get dup 0 eq {pop (None)}if} + {pop pop (Unknown)} ifelse}{pop pop (Unknown)} ifelse = flush + restore +" +*End +*CloseUI: *EPPressSimulation +*CloseGroup: EPColorSettings + + +*OpenGroup: EPOtherSettings/Others +*fr.Translation EPOtherSettings/Autres: "" +*es.Translation EPOtherSettings/Otros: "" +*it.Translation EPOtherSettings/Altro: "" +*de.Translation EPOtherSettings/Sonstiges: "" +*pt.Translation EPOtherSettings/Outros: "" +*nl.Translation EPOtherSettings/Overig: "" + +*OpenUI *EPToner/Ink Save Mode: Boolean +*fr.Translation EPToner/Ink Save Mode: "" +*es.Translation EPToner/Ink Save Mode: "" +*it.Translation EPToner/Ink Save Mode: "" +*de.Translation EPToner/Ink Save Mode: "" +*pt.Translation EPToner/Ink Save Mode: "" +*nl.Translation EPToner/Ink Save Mode: "" + +*OrderDependency: 210 AnySetup *EPToner +*DefaultEPToner: False +*EPToner False/Off: " + mark { + <>>> setpagedevice + }stopped cleartomark" +*End +*fr.EPToner False/Non: "" +*es.EPToner False/Desactivado: "" +*it.EPToner False/Off: "" +*de.EPToner False/Aus: "" +*pt.EPToner False/Não: "" +*nl.EPToner False/Uit: "" + +*EPToner True/On: " + mark { + <>>> setpagedevice + }stopped cleartomark" +*End +*fr.EPToner True/Oui: "" +*es.EPToner True/Activado: "" +*it.EPToner True/On: "" +*de.EPToner True/Ein: "" +*pt.EPToner True/Sim: "" +*nl.EPToner True/Aan: "" + +*?EPToner: " + save + currentpagedevice /PostRenderingEnhanceDetails get + /TonerSaver get 1 eq {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *EPToner +*CloseGroup: EPOtherSettings + + + +*%************** Font Information *************** + +*DefaultFont: Courier +*Font Courier: Standard "(004.000)" Standard Disk +*Font Courier-Bold: Standard "(004.000)" Standard Disk +*Font Courier-BoldOblique: Standard "(004.000)" Standard Disk +*Font Courier-Oblique: Standard "(004.000)" Standard Disk + +*% Printer Messages (verbatim from printer): +*Message: "%%[ exitserver: permanent state may be changed ]%%" +*Message: "%%[ Flushing: rest of job (to end-of-file) will be ignored ]%%" +*Message: "\FontName\ not found, using Courier" + +*% Printer Error (format: %%[ PrinterError: ]%%) +*%PrinterError: "cover open" +*%PrinterError: "cassette open" + + + +*% Status (format: %%[ status: ] %%) +*Status: "idle" +*Status: "processing" +*Status: "printing" +*%Status: "PrinterError: cover open" +*%Status: "PrinterError: cassette open" + + + +*% Input Sources (format: %%[ status: ; source: ]%% ) +*Source: "Ethernet" +*Source: "USB" + + + +*DefaultColorSep: ProcessBlack.134lpi.300x300dpi + +*ColorSepScreenAngle ProcessCyan.106lpi.300x300dpi/106 lpi / 300 dpi: "45" +*ColorSepScreenAngle ProcessMagenta.134lpi.300x300dpi/134 lpi / 300 dpi: "26" +*ColorSepScreenAngle ProcessYellow.150lpi.300x300dpi/150 lpi / 300 dpi: "0" +*ColorSepScreenAngle ProcessBlack.134lpi.300x300dpi/134 lpi / 300 dpi: "63" +*ColorSepScreenAngle ProcessRed.134lpi.300x300dpi/134 lpi / 300 dpi: "63" +*ColorSepScreenAngle ProcessGreen.134lpi.300x300dpi/134 lpi / 300 dpi: "63" +*ColorSepScreenAngle ProcessBlue.134lpi.300x300dpi/134 lpi / 300 dpi: "63" + +*ColorSepScreenFreq ProcessCyan.106lpi.300x300dpi/106 lpi / 300 dpi: "106" +*ColorSepScreenFreq ProcessMagenta.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessYellow.150lpi.300x300dpi/150 lpi / 300 dpi: "150" +*ColorSepScreenFreq ProcessBlack.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessRed.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessGreen.134lpi.300x300dpi/134 lpi / 300 dpi: "134" +*ColorSepScreenFreq ProcessBlue.134lpi.300x300dpi/134 lpi / 300 dpi: "134" + +*ColorSepScreenAngle ProcessCyan.141lpi.600x600dpi/141 lpi / 600 dpi: "45" +*ColorSepScreenAngle ProcessMagenta.145lpi.600x600dpi/145 lpi / 600 dpi: "14" +*ColorSepScreenAngle ProcessYellow.150lpi.600x600dpi/150 lpi / 600 dpi: "0" +*ColorSepScreenAngle ProcessBlack.145lpi.600x600dpi/145 lpi / 600 dpi: "75" +*ColorSepScreenAngle ProcessRed.145lpi.600x600dpi/145 lpi / 600 dpi: "75" +*ColorSepScreenAngle ProcessGreen.145lpi.600x600dpi/145 lpi / 600 dpi: "75" +*ColorSepScreenAngle ProcessBlue.145lpi.600x600dpi/145 lpi / 600 dpi: "75" + +*ColorSepScreenFreq ProcessCyan.141lpi.600x600dpi/141 lpi / 600 dpi: "141" +*ColorSepScreenFreq ProcessMagenta.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessYellow.150lpi.600x600dpi/150 lpi / 600 dpi: "150" +*ColorSepScreenFreq ProcessBlack.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessRed.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessGreen.145lpi.600x600dpi/145 lpi / 600 dpi: "145" +*ColorSepScreenFreq ProcessBlue.145lpi.600x600dpi/145 lpi / 600 dpi: "145" + + diff --git a/modules/printhost/ppd/logjam-double.ppd b/modules/printhost/ppd/logjam-double.ppd new file mode 100644 index 00000000..808d681a --- /dev/null +++ b/modules/printhost/ppd/logjam-double.ppd @@ -0,0 +1,242 @@ +*PPD-Adobe: "4.3" +*% ================================= +*% Copyright 1992-2009 Hewlett-Packard Company +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- please see www.opensource.org] +*% +*%%%% Created by the CUPS PPD Compiler CUPS v1.6.2. +*% Copyright (c) 2012-2013 Hewlett-Packard Development Company, L.P. + + +*FormatVersion: "4.3" +*FileVersion: "19.10" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "HPP00034.PPD" +*Product: "(HP LaserJet M806)" +*Manufacturer: "HP" +*PSVersion: "(3010.107) 3" +*LanguageLevel: "3" + + +*%%% OCF-relevant stuff + +*ModelName: "HP LaserJet M806" +*ShortNickName: "HP LaserJet M806 (ocf)" +*NickName: "HP LaserJet M806 (ocf)" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" + +*% Duplexing options + +*cupsEvenDuplex: False +*cupsManualCopies: False + +*OpenUI *Duplex/Two-Sided: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: DuplexNoTumble +*Duplex DuplexNoTumble/Long-Edge Binding: "<> setpagedevice" +*CloseUI: *Duplex + +*%%% The rest is straight from the stock driver + +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "55" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*Protocols: TBCP +*HPAccountingInfo: "1" +*HPJobAttirubtesEncoding: "UTF8" +*HPConstraintsSchemeVersion: "2" +*cupsCommands: "ReportLevels" +*cupsSNMPSupplies: False +*cupsIPPSupplies: False +*cupsMarkerName black/Black: "" +*cupsMarkerName maintenancekit/Maintenance Kit: "" +*HPEarlyWarmUp: True +*cupsMediaQualifier2: "Duplex" +*cupsMinSize .DuplexTumble.False: "419.5 595.0" +*cupsMinSize .DuplexNoTumble.False: "419.5 595.0" +*RequiresPageRegion All: True +*HPPaperSizeFeedEdge Letter: "eitherRightUp" +*cupsUIResolver PageSizeVsDuplex: "*PageSize Letter *Duplex None" +*cupsUIResolver DuplexerVsDuplex: "*Duplex None" +*cupsUIConstraints DuplexerVsDuplex: "*HPOption_Duplexer False *Duplex" +*HPManDupTumbleFirstSides: False +*HPGuidePageExtraTumble: True +*HPManualFeedPrintsOnBottom: False +*HPEasyColor: True +*HPEasyColorJPEGArtifactReduction: True +*HPEasyColorPhotoEnhancement: True +*HPEasyColorAdjustColor: True +*HPEasyColorReduceImageThreshold: "1.5" +*cupsUIResolver MediaTypeVsDuplex: "*Duplex None *MediaType Unspecified" +*DefaultResolution: 600dpi +*HPCustomJobName Title/Job Name: "" +*HPCustomJobName Range: "1 15" +*HPCustomJobName Type: "string" +*HPCustomUserName Title/User Name: "" +*HPCustomUserName Range: "1 15" +*HPCustomUserName Type: "string" +*HPSupportedUnicodeRanges: "0x0020 0xffff" +*cupsVersion: 1.5 +*cupsModelNumber: 0 +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12 12 600 780" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*MaxMediaWidth: "885.599975585938" +*MaxMediaHeight: "1333" +*HWMargins: 12 12 12 12 +*OpenUI *InputSlot/Paper Feed: PickOne +*OrderDependency: 40 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic: " + <> setpagedevice" +*End +*InputSlot Tray2/Tray 2: "<> setpagedevice" +*InputSlot Tray3/Tray 3: "<> setpagedevice" +*CloseUI: *InputSlot +*OpenGroup: InstallableOptions/Installable Options +*OpenUI *HPOption_Duplexer/Duplex Unit: Boolean +*OrderDependency: 0 AnySetup *HPOption_Duplexer +*DefaultHPOption_Duplexer: True +*HPOption_Duplexer True/On: "" +*HPOption_Duplexer False/Off: "" +*?HPOption_Duplexer: " + save + currentpagedevice /Duplex known + {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *HPOption_Duplexer +*CloseGroup: InstallableOptions +*OpenGroup: HPPaperQualityPanel/Paper/Quality +*OpenUI *HPPrintQuality/Print Quality: PickOne +*OrderDependency: 5 DocumentSetup *HPPrintQuality +*DefaultHPPrintQuality: FastRes1200 +*HPPrintQuality FastRes1200/FastRes 1200: "<> setpagedevice" +*HPPrintQuality 600dpi/600 dpi: "<> setpagedevice" +*HPPrintQuality ProRes1200/ProRes 1200: "<> setpagedevice" +*CloseUI: *HPPrintQuality +*CloseGroup: HPPaperQualityPanel +*DefaultFont: Courier +*Font Albertus-ExtraBold: Standard "(001.001)" Standard ROM +*Font Albertus-Medium: Standard "(001.001)" Standard ROM +*Font AntiqueOlive: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.001)" Standard ROM +*Font Arial: Standard "(001.001)" Standard ROM +*Font Arial-Bold: Standard "(001.001)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.001)" Standard ROM +*Font Arial-Italic: Standard "(001.001)" Standard ROM +*Font AvantGarde-Book: Standard "(001.001)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.001)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.001)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.001)" Standard ROM +*Font Bookman-Demi: Standard "(001.001)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.001)" Standard ROM +*Font Bookman-Light: Standard "(001.001)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.001)" Standard ROM +*Font BookmanCE-Demi: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-DemiItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-Light: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-LightItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font CGOmega: Standard "(001.001)" Standard ROM +*Font CGOmega-Bold: Standard "(001.001)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGOmega-Italic: Standard "(001.001)" Standard ROM +*Font CGTimes: Standard "(001.001)" Standard ROM +*Font CGTimes-Bold: Standard "(001.001)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGTimes-Italic: Standard "(001.001)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Coronet: Standard "(001.001)" Standard ROM +*Font Courier: Standard "(001.001)" Standard ROM +*Font Courier-Bold: Standard "(001.001)" Standard ROM +*Font Courier-BoldOblique: Standard "(001.001)" Standard ROM +*Font Courier-Oblique: Standard "(001.001)" Standard ROM +*Font CourierHP: Standard "(001.001)" Standard ROM +*Font CourierHP-Bold: Standard "(001.001)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.001)" Standard ROM +*Font CourierHP-Italic: Standard "(001.001)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.001)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.001)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.001)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.001)" Standard ROM +*Font Helvetica: Standard "(001.001)" Standard ROM +*Font Helvetica-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.001)" Standard ROM +*Font LetterGothic: Standard "(001.001)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.001)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.001)" Standard ROM +*Font Marigold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.001)" Standard ROM +*Font Palatino-Bold: Standard "(001.001)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.001)" Standard ROM +*Font Palatino-Italic: Standard "(001.001)" Standard ROM +*Font Palatino-Roman: Standard "(001.001)" Standard ROM +*Font Symbol: Special "(001.001)" Special ROM +*Font SymbolMT: Standard "(001.001)" Standard ROM +*Font Times-Bold: Standard "(001.001)" Standard ROM +*Font Times-BoldItalic: Standard "(001.001)" Standard ROM +*Font Times-Italic: Standard "(001.001)" Standard ROM +*Font Times-Roman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.001)" Standard ROM +*Font Univers-Bold: Standard "(001.001)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.001)" Standard ROM +*Font Univers-Medium: Standard "(001.001)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.001)" Standard ROM +*Font Wingdings-Regular: Special "(001.001)" Special ROM +*Font Wingdings-Regular: Standard "(001.001)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.001)" Standard ROM +*Font ZapfDingbats: Special "(001.001)" Special ROM diff --git a/modules/printhost/ppd/logjam-single.ppd b/modules/printhost/ppd/logjam-single.ppd new file mode 100644 index 00000000..06a5a15b --- /dev/null +++ b/modules/printhost/ppd/logjam-single.ppd @@ -0,0 +1,242 @@ +*PPD-Adobe: "4.3" +*% ================================= +*% Copyright 1992-2009 Hewlett-Packard Company +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- please see www.opensource.org] +*% +*%%%% Created by the CUPS PPD Compiler CUPS v1.6.2. +*% Copyright (c) 2012-2013 Hewlett-Packard Development Company, L.P. + + +*FormatVersion: "4.3" +*FileVersion: "19.10" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "HPP00034.PPD" +*Product: "(HP LaserJet M806)" +*Manufacturer: "HP" +*PSVersion: "(3010.107) 3" +*LanguageLevel: "3" + + +*%%% OCF-relevant stuff + +*ModelName: "HP LaserJet M806" +*ShortNickName: "HP LaserJet M806 (ocf)" +*NickName: "HP LaserJet M806 (ocf)" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" + +*% Duplexing options + +*cupsEvenDuplex: False +*cupsManualCopies: False + +*OpenUI *Duplex/Two-Sided: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: None +*%Duplex None/Off: "<> setpagedevice" +*CloseUI: *Duplex + +*%%% The rest is straight from the stock driver + +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "55" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*Protocols: TBCP +*HPAccountingInfo: "1" +*HPJobAttirubtesEncoding: "UTF8" +*HPConstraintsSchemeVersion: "2" +*cupsCommands: "ReportLevels" +*cupsSNMPSupplies: False +*cupsIPPSupplies: False +*cupsMarkerName black/Black: "" +*cupsMarkerName maintenancekit/Maintenance Kit: "" +*HPEarlyWarmUp: True +*cupsMediaQualifier2: "Duplex" +*cupsMinSize .DuplexTumble.False: "419.5 595.0" +*cupsMinSize .DuplexNoTumble.False: "419.5 595.0" +*RequiresPageRegion All: True +*HPPaperSizeFeedEdge Letter: "eitherRightUp" +*cupsUIResolver PageSizeVsDuplex: "*PageSize Letter *Duplex None" +*cupsUIResolver DuplexerVsDuplex: "*Duplex None" +*cupsUIConstraints DuplexerVsDuplex: "*HPOption_Duplexer False *Duplex" +*HPManDupTumbleFirstSides: False +*HPGuidePageExtraTumble: True +*HPManualFeedPrintsOnBottom: False +*HPEasyColor: True +*HPEasyColorJPEGArtifactReduction: True +*HPEasyColorPhotoEnhancement: True +*HPEasyColorAdjustColor: True +*HPEasyColorReduceImageThreshold: "1.5" +*cupsUIResolver MediaTypeVsDuplex: "*Duplex None *MediaType Unspecified" +*DefaultResolution: 600dpi +*HPCustomJobName Title/Job Name: "" +*HPCustomJobName Range: "1 15" +*HPCustomJobName Type: "string" +*HPCustomUserName Title/User Name: "" +*HPCustomUserName Range: "1 15" +*HPCustomUserName Type: "string" +*HPSupportedUnicodeRanges: "0x0020 0xffff" +*cupsVersion: 1.5 +*cupsModelNumber: 0 +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12 12 600 780" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*MaxMediaWidth: "885.599975585938" +*MaxMediaHeight: "1333" +*HWMargins: 12 12 12 12 +*OpenUI *InputSlot/Paper Feed: PickOne +*OrderDependency: 40 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic: " + <> setpagedevice" +*End +*InputSlot Tray2/Tray 2: "<> setpagedevice" +*InputSlot Tray3/Tray 3: "<> setpagedevice" +*CloseUI: *InputSlot +*OpenGroup: InstallableOptions/Installable Options +*OpenUI *HPOption_Duplexer/Duplex Unit: Boolean +*OrderDependency: 0 AnySetup *HPOption_Duplexer +*DefaultHPOption_Duplexer: True +*HPOption_Duplexer True/On: "" +*HPOption_Duplexer False/Off: "" +*?HPOption_Duplexer: " + save + currentpagedevice /Duplex known + {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *HPOption_Duplexer +*CloseGroup: InstallableOptions +*OpenGroup: HPPaperQualityPanel/Paper/Quality +*OpenUI *HPPrintQuality/Print Quality: PickOne +*OrderDependency: 5 DocumentSetup *HPPrintQuality +*DefaultHPPrintQuality: FastRes1200 +*HPPrintQuality FastRes1200/FastRes 1200: "<> setpagedevice" +*HPPrintQuality 600dpi/600 dpi: "<> setpagedevice" +*HPPrintQuality ProRes1200/ProRes 1200: "<> setpagedevice" +*CloseUI: *HPPrintQuality +*CloseGroup: HPPaperQualityPanel +*DefaultFont: Courier +*Font Albertus-ExtraBold: Standard "(001.001)" Standard ROM +*Font Albertus-Medium: Standard "(001.001)" Standard ROM +*Font AntiqueOlive: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.001)" Standard ROM +*Font Arial: Standard "(001.001)" Standard ROM +*Font Arial-Bold: Standard "(001.001)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.001)" Standard ROM +*Font Arial-Italic: Standard "(001.001)" Standard ROM +*Font AvantGarde-Book: Standard "(001.001)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.001)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.001)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.001)" Standard ROM +*Font Bookman-Demi: Standard "(001.001)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.001)" Standard ROM +*Font Bookman-Light: Standard "(001.001)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.001)" Standard ROM +*Font BookmanCE-Demi: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-DemiItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-Light: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-LightItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font CGOmega: Standard "(001.001)" Standard ROM +*Font CGOmega-Bold: Standard "(001.001)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGOmega-Italic: Standard "(001.001)" Standard ROM +*Font CGTimes: Standard "(001.001)" Standard ROM +*Font CGTimes-Bold: Standard "(001.001)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGTimes-Italic: Standard "(001.001)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Coronet: Standard "(001.001)" Standard ROM +*Font Courier: Standard "(001.001)" Standard ROM +*Font Courier-Bold: Standard "(001.001)" Standard ROM +*Font Courier-BoldOblique: Standard "(001.001)" Standard ROM +*Font Courier-Oblique: Standard "(001.001)" Standard ROM +*Font CourierHP: Standard "(001.001)" Standard ROM +*Font CourierHP-Bold: Standard "(001.001)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.001)" Standard ROM +*Font CourierHP-Italic: Standard "(001.001)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.001)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.001)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.001)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.001)" Standard ROM +*Font Helvetica: Standard "(001.001)" Standard ROM +*Font Helvetica-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.001)" Standard ROM +*Font LetterGothic: Standard "(001.001)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.001)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.001)" Standard ROM +*Font Marigold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.001)" Standard ROM +*Font Palatino-Bold: Standard "(001.001)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.001)" Standard ROM +*Font Palatino-Italic: Standard "(001.001)" Standard ROM +*Font Palatino-Roman: Standard "(001.001)" Standard ROM +*Font Symbol: Special "(001.001)" Special ROM +*Font SymbolMT: Standard "(001.001)" Standard ROM +*Font Times-Bold: Standard "(001.001)" Standard ROM +*Font Times-BoldItalic: Standard "(001.001)" Standard ROM +*Font Times-Italic: Standard "(001.001)" Standard ROM +*Font Times-Roman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.001)" Standard ROM +*Font Univers-Bold: Standard "(001.001)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.001)" Standard ROM +*Font Univers-Medium: Standard "(001.001)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.001)" Standard ROM +*Font Wingdings-Regular: Special "(001.001)" Special ROM +*Font Wingdings-Regular: Standard "(001.001)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.001)" Standard ROM +*Font ZapfDingbats: Special "(001.001)" Special ROM diff --git a/modules/printhost/ppd/pagefault-double.ppd b/modules/printhost/ppd/pagefault-double.ppd new file mode 100644 index 00000000..808d681a --- /dev/null +++ b/modules/printhost/ppd/pagefault-double.ppd @@ -0,0 +1,242 @@ +*PPD-Adobe: "4.3" +*% ================================= +*% Copyright 1992-2009 Hewlett-Packard Company +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- please see www.opensource.org] +*% +*%%%% Created by the CUPS PPD Compiler CUPS v1.6.2. +*% Copyright (c) 2012-2013 Hewlett-Packard Development Company, L.P. + + +*FormatVersion: "4.3" +*FileVersion: "19.10" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "HPP00034.PPD" +*Product: "(HP LaserJet M806)" +*Manufacturer: "HP" +*PSVersion: "(3010.107) 3" +*LanguageLevel: "3" + + +*%%% OCF-relevant stuff + +*ModelName: "HP LaserJet M806" +*ShortNickName: "HP LaserJet M806 (ocf)" +*NickName: "HP LaserJet M806 (ocf)" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" + +*% Duplexing options + +*cupsEvenDuplex: False +*cupsManualCopies: False + +*OpenUI *Duplex/Two-Sided: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: DuplexNoTumble +*Duplex DuplexNoTumble/Long-Edge Binding: "<> setpagedevice" +*CloseUI: *Duplex + +*%%% The rest is straight from the stock driver + +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "55" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*Protocols: TBCP +*HPAccountingInfo: "1" +*HPJobAttirubtesEncoding: "UTF8" +*HPConstraintsSchemeVersion: "2" +*cupsCommands: "ReportLevels" +*cupsSNMPSupplies: False +*cupsIPPSupplies: False +*cupsMarkerName black/Black: "" +*cupsMarkerName maintenancekit/Maintenance Kit: "" +*HPEarlyWarmUp: True +*cupsMediaQualifier2: "Duplex" +*cupsMinSize .DuplexTumble.False: "419.5 595.0" +*cupsMinSize .DuplexNoTumble.False: "419.5 595.0" +*RequiresPageRegion All: True +*HPPaperSizeFeedEdge Letter: "eitherRightUp" +*cupsUIResolver PageSizeVsDuplex: "*PageSize Letter *Duplex None" +*cupsUIResolver DuplexerVsDuplex: "*Duplex None" +*cupsUIConstraints DuplexerVsDuplex: "*HPOption_Duplexer False *Duplex" +*HPManDupTumbleFirstSides: False +*HPGuidePageExtraTumble: True +*HPManualFeedPrintsOnBottom: False +*HPEasyColor: True +*HPEasyColorJPEGArtifactReduction: True +*HPEasyColorPhotoEnhancement: True +*HPEasyColorAdjustColor: True +*HPEasyColorReduceImageThreshold: "1.5" +*cupsUIResolver MediaTypeVsDuplex: "*Duplex None *MediaType Unspecified" +*DefaultResolution: 600dpi +*HPCustomJobName Title/Job Name: "" +*HPCustomJobName Range: "1 15" +*HPCustomJobName Type: "string" +*HPCustomUserName Title/User Name: "" +*HPCustomUserName Range: "1 15" +*HPCustomUserName Type: "string" +*HPSupportedUnicodeRanges: "0x0020 0xffff" +*cupsVersion: 1.5 +*cupsModelNumber: 0 +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12 12 600 780" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*MaxMediaWidth: "885.599975585938" +*MaxMediaHeight: "1333" +*HWMargins: 12 12 12 12 +*OpenUI *InputSlot/Paper Feed: PickOne +*OrderDependency: 40 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic: " + <> setpagedevice" +*End +*InputSlot Tray2/Tray 2: "<> setpagedevice" +*InputSlot Tray3/Tray 3: "<> setpagedevice" +*CloseUI: *InputSlot +*OpenGroup: InstallableOptions/Installable Options +*OpenUI *HPOption_Duplexer/Duplex Unit: Boolean +*OrderDependency: 0 AnySetup *HPOption_Duplexer +*DefaultHPOption_Duplexer: True +*HPOption_Duplexer True/On: "" +*HPOption_Duplexer False/Off: "" +*?HPOption_Duplexer: " + save + currentpagedevice /Duplex known + {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *HPOption_Duplexer +*CloseGroup: InstallableOptions +*OpenGroup: HPPaperQualityPanel/Paper/Quality +*OpenUI *HPPrintQuality/Print Quality: PickOne +*OrderDependency: 5 DocumentSetup *HPPrintQuality +*DefaultHPPrintQuality: FastRes1200 +*HPPrintQuality FastRes1200/FastRes 1200: "<> setpagedevice" +*HPPrintQuality 600dpi/600 dpi: "<> setpagedevice" +*HPPrintQuality ProRes1200/ProRes 1200: "<> setpagedevice" +*CloseUI: *HPPrintQuality +*CloseGroup: HPPaperQualityPanel +*DefaultFont: Courier +*Font Albertus-ExtraBold: Standard "(001.001)" Standard ROM +*Font Albertus-Medium: Standard "(001.001)" Standard ROM +*Font AntiqueOlive: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.001)" Standard ROM +*Font Arial: Standard "(001.001)" Standard ROM +*Font Arial-Bold: Standard "(001.001)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.001)" Standard ROM +*Font Arial-Italic: Standard "(001.001)" Standard ROM +*Font AvantGarde-Book: Standard "(001.001)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.001)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.001)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.001)" Standard ROM +*Font Bookman-Demi: Standard "(001.001)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.001)" Standard ROM +*Font Bookman-Light: Standard "(001.001)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.001)" Standard ROM +*Font BookmanCE-Demi: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-DemiItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-Light: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-LightItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font CGOmega: Standard "(001.001)" Standard ROM +*Font CGOmega-Bold: Standard "(001.001)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGOmega-Italic: Standard "(001.001)" Standard ROM +*Font CGTimes: Standard "(001.001)" Standard ROM +*Font CGTimes-Bold: Standard "(001.001)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGTimes-Italic: Standard "(001.001)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Coronet: Standard "(001.001)" Standard ROM +*Font Courier: Standard "(001.001)" Standard ROM +*Font Courier-Bold: Standard "(001.001)" Standard ROM +*Font Courier-BoldOblique: Standard "(001.001)" Standard ROM +*Font Courier-Oblique: Standard "(001.001)" Standard ROM +*Font CourierHP: Standard "(001.001)" Standard ROM +*Font CourierHP-Bold: Standard "(001.001)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.001)" Standard ROM +*Font CourierHP-Italic: Standard "(001.001)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.001)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.001)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.001)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.001)" Standard ROM +*Font Helvetica: Standard "(001.001)" Standard ROM +*Font Helvetica-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.001)" Standard ROM +*Font LetterGothic: Standard "(001.001)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.001)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.001)" Standard ROM +*Font Marigold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.001)" Standard ROM +*Font Palatino-Bold: Standard "(001.001)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.001)" Standard ROM +*Font Palatino-Italic: Standard "(001.001)" Standard ROM +*Font Palatino-Roman: Standard "(001.001)" Standard ROM +*Font Symbol: Special "(001.001)" Special ROM +*Font SymbolMT: Standard "(001.001)" Standard ROM +*Font Times-Bold: Standard "(001.001)" Standard ROM +*Font Times-BoldItalic: Standard "(001.001)" Standard ROM +*Font Times-Italic: Standard "(001.001)" Standard ROM +*Font Times-Roman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.001)" Standard ROM +*Font Univers-Bold: Standard "(001.001)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.001)" Standard ROM +*Font Univers-Medium: Standard "(001.001)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.001)" Standard ROM +*Font Wingdings-Regular: Special "(001.001)" Special ROM +*Font Wingdings-Regular: Standard "(001.001)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.001)" Standard ROM +*Font ZapfDingbats: Special "(001.001)" Special ROM diff --git a/modules/printhost/ppd/pagefault-single.ppd b/modules/printhost/ppd/pagefault-single.ppd new file mode 100644 index 00000000..06a5a15b --- /dev/null +++ b/modules/printhost/ppd/pagefault-single.ppd @@ -0,0 +1,242 @@ +*PPD-Adobe: "4.3" +*% ================================= +*% Copyright 1992-2009 Hewlett-Packard Company +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- please see www.opensource.org] +*% +*%%%% Created by the CUPS PPD Compiler CUPS v1.6.2. +*% Copyright (c) 2012-2013 Hewlett-Packard Development Company, L.P. + + +*FormatVersion: "4.3" +*FileVersion: "19.10" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "HPP00034.PPD" +*Product: "(HP LaserJet M806)" +*Manufacturer: "HP" +*PSVersion: "(3010.107) 3" +*LanguageLevel: "3" + + +*%%% OCF-relevant stuff + +*ModelName: "HP LaserJet M806" +*ShortNickName: "HP LaserJet M806 (ocf)" +*NickName: "HP LaserJet M806 (ocf)" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" + +*% Duplexing options + +*cupsEvenDuplex: False +*cupsManualCopies: False + +*OpenUI *Duplex/Two-Sided: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: None +*%Duplex None/Off: "<> setpagedevice" +*CloseUI: *Duplex + +*%%% The rest is straight from the stock driver + +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "55" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*Protocols: TBCP +*HPAccountingInfo: "1" +*HPJobAttirubtesEncoding: "UTF8" +*HPConstraintsSchemeVersion: "2" +*cupsCommands: "ReportLevels" +*cupsSNMPSupplies: False +*cupsIPPSupplies: False +*cupsMarkerName black/Black: "" +*cupsMarkerName maintenancekit/Maintenance Kit: "" +*HPEarlyWarmUp: True +*cupsMediaQualifier2: "Duplex" +*cupsMinSize .DuplexTumble.False: "419.5 595.0" +*cupsMinSize .DuplexNoTumble.False: "419.5 595.0" +*RequiresPageRegion All: True +*HPPaperSizeFeedEdge Letter: "eitherRightUp" +*cupsUIResolver PageSizeVsDuplex: "*PageSize Letter *Duplex None" +*cupsUIResolver DuplexerVsDuplex: "*Duplex None" +*cupsUIConstraints DuplexerVsDuplex: "*HPOption_Duplexer False *Duplex" +*HPManDupTumbleFirstSides: False +*HPGuidePageExtraTumble: True +*HPManualFeedPrintsOnBottom: False +*HPEasyColor: True +*HPEasyColorJPEGArtifactReduction: True +*HPEasyColorPhotoEnhancement: True +*HPEasyColorAdjustColor: True +*HPEasyColorReduceImageThreshold: "1.5" +*cupsUIResolver MediaTypeVsDuplex: "*Duplex None *MediaType Unspecified" +*DefaultResolution: 600dpi +*HPCustomJobName Title/Job Name: "" +*HPCustomJobName Range: "1 15" +*HPCustomJobName Type: "string" +*HPCustomUserName Title/User Name: "" +*HPCustomUserName Range: "1 15" +*HPCustomUserName Type: "string" +*HPSupportedUnicodeRanges: "0x0020 0xffff" +*cupsVersion: 1.5 +*cupsModelNumber: 0 +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12 12 600 780" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*MaxMediaWidth: "885.599975585938" +*MaxMediaHeight: "1333" +*HWMargins: 12 12 12 12 +*OpenUI *InputSlot/Paper Feed: PickOne +*OrderDependency: 40 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic: " + <> setpagedevice" +*End +*InputSlot Tray2/Tray 2: "<> setpagedevice" +*InputSlot Tray3/Tray 3: "<> setpagedevice" +*CloseUI: *InputSlot +*OpenGroup: InstallableOptions/Installable Options +*OpenUI *HPOption_Duplexer/Duplex Unit: Boolean +*OrderDependency: 0 AnySetup *HPOption_Duplexer +*DefaultHPOption_Duplexer: True +*HPOption_Duplexer True/On: "" +*HPOption_Duplexer False/Off: "" +*?HPOption_Duplexer: " + save + currentpagedevice /Duplex known + {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *HPOption_Duplexer +*CloseGroup: InstallableOptions +*OpenGroup: HPPaperQualityPanel/Paper/Quality +*OpenUI *HPPrintQuality/Print Quality: PickOne +*OrderDependency: 5 DocumentSetup *HPPrintQuality +*DefaultHPPrintQuality: FastRes1200 +*HPPrintQuality FastRes1200/FastRes 1200: "<> setpagedevice" +*HPPrintQuality 600dpi/600 dpi: "<> setpagedevice" +*HPPrintQuality ProRes1200/ProRes 1200: "<> setpagedevice" +*CloseUI: *HPPrintQuality +*CloseGroup: HPPaperQualityPanel +*DefaultFont: Courier +*Font Albertus-ExtraBold: Standard "(001.001)" Standard ROM +*Font Albertus-Medium: Standard "(001.001)" Standard ROM +*Font AntiqueOlive: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.001)" Standard ROM +*Font Arial: Standard "(001.001)" Standard ROM +*Font Arial-Bold: Standard "(001.001)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.001)" Standard ROM +*Font Arial-Italic: Standard "(001.001)" Standard ROM +*Font AvantGarde-Book: Standard "(001.001)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.001)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.001)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.001)" Standard ROM +*Font Bookman-Demi: Standard "(001.001)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.001)" Standard ROM +*Font Bookman-Light: Standard "(001.001)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.001)" Standard ROM +*Font BookmanCE-Demi: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-DemiItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-Light: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-LightItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font CGOmega: Standard "(001.001)" Standard ROM +*Font CGOmega-Bold: Standard "(001.001)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGOmega-Italic: Standard "(001.001)" Standard ROM +*Font CGTimes: Standard "(001.001)" Standard ROM +*Font CGTimes-Bold: Standard "(001.001)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGTimes-Italic: Standard "(001.001)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Coronet: Standard "(001.001)" Standard ROM +*Font Courier: Standard "(001.001)" Standard ROM +*Font Courier-Bold: Standard "(001.001)" Standard ROM +*Font Courier-BoldOblique: Standard "(001.001)" Standard ROM +*Font Courier-Oblique: Standard "(001.001)" Standard ROM +*Font CourierHP: Standard "(001.001)" Standard ROM +*Font CourierHP-Bold: Standard "(001.001)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.001)" Standard ROM +*Font CourierHP-Italic: Standard "(001.001)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.001)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.001)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.001)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.001)" Standard ROM +*Font Helvetica: Standard "(001.001)" Standard ROM +*Font Helvetica-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.001)" Standard ROM +*Font LetterGothic: Standard "(001.001)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.001)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.001)" Standard ROM +*Font Marigold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.001)" Standard ROM +*Font Palatino-Bold: Standard "(001.001)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.001)" Standard ROM +*Font Palatino-Italic: Standard "(001.001)" Standard ROM +*Font Palatino-Roman: Standard "(001.001)" Standard ROM +*Font Symbol: Special "(001.001)" Special ROM +*Font SymbolMT: Standard "(001.001)" Standard ROM +*Font Times-Bold: Standard "(001.001)" Standard ROM +*Font Times-BoldItalic: Standard "(001.001)" Standard ROM +*Font Times-Italic: Standard "(001.001)" Standard ROM +*Font Times-Roman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.001)" Standard ROM +*Font Univers-Bold: Standard "(001.001)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.001)" Standard ROM +*Font Univers-Medium: Standard "(001.001)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.001)" Standard ROM +*Font Wingdings-Regular: Special "(001.001)" Special ROM +*Font Wingdings-Regular: Standard "(001.001)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.001)" Standard ROM +*Font ZapfDingbats: Special "(001.001)" Special ROM diff --git a/modules/printhost/ppd/papercut-double.ppd b/modules/printhost/ppd/papercut-double.ppd new file mode 100644 index 00000000..808d681a --- /dev/null +++ b/modules/printhost/ppd/papercut-double.ppd @@ -0,0 +1,242 @@ +*PPD-Adobe: "4.3" +*% ================================= +*% Copyright 1992-2009 Hewlett-Packard Company +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- please see www.opensource.org] +*% +*%%%% Created by the CUPS PPD Compiler CUPS v1.6.2. +*% Copyright (c) 2012-2013 Hewlett-Packard Development Company, L.P. + + +*FormatVersion: "4.3" +*FileVersion: "19.10" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "HPP00034.PPD" +*Product: "(HP LaserJet M806)" +*Manufacturer: "HP" +*PSVersion: "(3010.107) 3" +*LanguageLevel: "3" + + +*%%% OCF-relevant stuff + +*ModelName: "HP LaserJet M806" +*ShortNickName: "HP LaserJet M806 (ocf)" +*NickName: "HP LaserJet M806 (ocf)" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" + +*% Duplexing options + +*cupsEvenDuplex: False +*cupsManualCopies: False + +*OpenUI *Duplex/Two-Sided: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: DuplexNoTumble +*Duplex DuplexNoTumble/Long-Edge Binding: "<> setpagedevice" +*CloseUI: *Duplex + +*%%% The rest is straight from the stock driver + +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "55" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*Protocols: TBCP +*HPAccountingInfo: "1" +*HPJobAttirubtesEncoding: "UTF8" +*HPConstraintsSchemeVersion: "2" +*cupsCommands: "ReportLevels" +*cupsSNMPSupplies: False +*cupsIPPSupplies: False +*cupsMarkerName black/Black: "" +*cupsMarkerName maintenancekit/Maintenance Kit: "" +*HPEarlyWarmUp: True +*cupsMediaQualifier2: "Duplex" +*cupsMinSize .DuplexTumble.False: "419.5 595.0" +*cupsMinSize .DuplexNoTumble.False: "419.5 595.0" +*RequiresPageRegion All: True +*HPPaperSizeFeedEdge Letter: "eitherRightUp" +*cupsUIResolver PageSizeVsDuplex: "*PageSize Letter *Duplex None" +*cupsUIResolver DuplexerVsDuplex: "*Duplex None" +*cupsUIConstraints DuplexerVsDuplex: "*HPOption_Duplexer False *Duplex" +*HPManDupTumbleFirstSides: False +*HPGuidePageExtraTumble: True +*HPManualFeedPrintsOnBottom: False +*HPEasyColor: True +*HPEasyColorJPEGArtifactReduction: True +*HPEasyColorPhotoEnhancement: True +*HPEasyColorAdjustColor: True +*HPEasyColorReduceImageThreshold: "1.5" +*cupsUIResolver MediaTypeVsDuplex: "*Duplex None *MediaType Unspecified" +*DefaultResolution: 600dpi +*HPCustomJobName Title/Job Name: "" +*HPCustomJobName Range: "1 15" +*HPCustomJobName Type: "string" +*HPCustomUserName Title/User Name: "" +*HPCustomUserName Range: "1 15" +*HPCustomUserName Type: "string" +*HPSupportedUnicodeRanges: "0x0020 0xffff" +*cupsVersion: 1.5 +*cupsModelNumber: 0 +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12 12 600 780" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*MaxMediaWidth: "885.599975585938" +*MaxMediaHeight: "1333" +*HWMargins: 12 12 12 12 +*OpenUI *InputSlot/Paper Feed: PickOne +*OrderDependency: 40 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic: " + <> setpagedevice" +*End +*InputSlot Tray2/Tray 2: "<> setpagedevice" +*InputSlot Tray3/Tray 3: "<> setpagedevice" +*CloseUI: *InputSlot +*OpenGroup: InstallableOptions/Installable Options +*OpenUI *HPOption_Duplexer/Duplex Unit: Boolean +*OrderDependency: 0 AnySetup *HPOption_Duplexer +*DefaultHPOption_Duplexer: True +*HPOption_Duplexer True/On: "" +*HPOption_Duplexer False/Off: "" +*?HPOption_Duplexer: " + save + currentpagedevice /Duplex known + {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *HPOption_Duplexer +*CloseGroup: InstallableOptions +*OpenGroup: HPPaperQualityPanel/Paper/Quality +*OpenUI *HPPrintQuality/Print Quality: PickOne +*OrderDependency: 5 DocumentSetup *HPPrintQuality +*DefaultHPPrintQuality: FastRes1200 +*HPPrintQuality FastRes1200/FastRes 1200: "<> setpagedevice" +*HPPrintQuality 600dpi/600 dpi: "<> setpagedevice" +*HPPrintQuality ProRes1200/ProRes 1200: "<> setpagedevice" +*CloseUI: *HPPrintQuality +*CloseGroup: HPPaperQualityPanel +*DefaultFont: Courier +*Font Albertus-ExtraBold: Standard "(001.001)" Standard ROM +*Font Albertus-Medium: Standard "(001.001)" Standard ROM +*Font AntiqueOlive: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.001)" Standard ROM +*Font Arial: Standard "(001.001)" Standard ROM +*Font Arial-Bold: Standard "(001.001)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.001)" Standard ROM +*Font Arial-Italic: Standard "(001.001)" Standard ROM +*Font AvantGarde-Book: Standard "(001.001)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.001)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.001)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.001)" Standard ROM +*Font Bookman-Demi: Standard "(001.001)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.001)" Standard ROM +*Font Bookman-Light: Standard "(001.001)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.001)" Standard ROM +*Font BookmanCE-Demi: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-DemiItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-Light: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-LightItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font CGOmega: Standard "(001.001)" Standard ROM +*Font CGOmega-Bold: Standard "(001.001)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGOmega-Italic: Standard "(001.001)" Standard ROM +*Font CGTimes: Standard "(001.001)" Standard ROM +*Font CGTimes-Bold: Standard "(001.001)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGTimes-Italic: Standard "(001.001)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Coronet: Standard "(001.001)" Standard ROM +*Font Courier: Standard "(001.001)" Standard ROM +*Font Courier-Bold: Standard "(001.001)" Standard ROM +*Font Courier-BoldOblique: Standard "(001.001)" Standard ROM +*Font Courier-Oblique: Standard "(001.001)" Standard ROM +*Font CourierHP: Standard "(001.001)" Standard ROM +*Font CourierHP-Bold: Standard "(001.001)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.001)" Standard ROM +*Font CourierHP-Italic: Standard "(001.001)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.001)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.001)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.001)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.001)" Standard ROM +*Font Helvetica: Standard "(001.001)" Standard ROM +*Font Helvetica-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.001)" Standard ROM +*Font LetterGothic: Standard "(001.001)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.001)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.001)" Standard ROM +*Font Marigold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.001)" Standard ROM +*Font Palatino-Bold: Standard "(001.001)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.001)" Standard ROM +*Font Palatino-Italic: Standard "(001.001)" Standard ROM +*Font Palatino-Roman: Standard "(001.001)" Standard ROM +*Font Symbol: Special "(001.001)" Special ROM +*Font SymbolMT: Standard "(001.001)" Standard ROM +*Font Times-Bold: Standard "(001.001)" Standard ROM +*Font Times-BoldItalic: Standard "(001.001)" Standard ROM +*Font Times-Italic: Standard "(001.001)" Standard ROM +*Font Times-Roman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.001)" Standard ROM +*Font Univers-Bold: Standard "(001.001)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.001)" Standard ROM +*Font Univers-Medium: Standard "(001.001)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.001)" Standard ROM +*Font Wingdings-Regular: Special "(001.001)" Special ROM +*Font Wingdings-Regular: Standard "(001.001)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.001)" Standard ROM +*Font ZapfDingbats: Special "(001.001)" Special ROM diff --git a/modules/printhost/ppd/papercut-single.ppd b/modules/printhost/ppd/papercut-single.ppd new file mode 100644 index 00000000..06a5a15b --- /dev/null +++ b/modules/printhost/ppd/papercut-single.ppd @@ -0,0 +1,242 @@ +*PPD-Adobe: "4.3" +*% ================================= +*% Copyright 1992-2009 Hewlett-Packard Company +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- please see www.opensource.org] +*% +*%%%% Created by the CUPS PPD Compiler CUPS v1.6.2. +*% Copyright (c) 2012-2013 Hewlett-Packard Development Company, L.P. + + +*FormatVersion: "4.3" +*FileVersion: "19.10" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "HPP00034.PPD" +*Product: "(HP LaserJet M806)" +*Manufacturer: "HP" +*PSVersion: "(3010.107) 3" +*LanguageLevel: "3" + + +*%%% OCF-relevant stuff + +*ModelName: "HP LaserJet M806" +*ShortNickName: "HP LaserJet M806 (ocf)" +*NickName: "HP LaserJet M806 (ocf)" + +*cupsFilter: "application/pdf 0 ocfps" +*cupsIPPAttribute ipp-features-supported: "subscription-object" + +*% Duplexing options + +*cupsEvenDuplex: False +*cupsManualCopies: False + +*OpenUI *Duplex/Two-Sided: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: None +*%Duplex None/Off: "<> setpagedevice" +*CloseUI: *Duplex + +*%%% The rest is straight from the stock driver + +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "55" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*Protocols: TBCP +*HPAccountingInfo: "1" +*HPJobAttirubtesEncoding: "UTF8" +*HPConstraintsSchemeVersion: "2" +*cupsCommands: "ReportLevels" +*cupsSNMPSupplies: False +*cupsIPPSupplies: False +*cupsMarkerName black/Black: "" +*cupsMarkerName maintenancekit/Maintenance Kit: "" +*HPEarlyWarmUp: True +*cupsMediaQualifier2: "Duplex" +*cupsMinSize .DuplexTumble.False: "419.5 595.0" +*cupsMinSize .DuplexNoTumble.False: "419.5 595.0" +*RequiresPageRegion All: True +*HPPaperSizeFeedEdge Letter: "eitherRightUp" +*cupsUIResolver PageSizeVsDuplex: "*PageSize Letter *Duplex None" +*cupsUIResolver DuplexerVsDuplex: "*Duplex None" +*cupsUIConstraints DuplexerVsDuplex: "*HPOption_Duplexer False *Duplex" +*HPManDupTumbleFirstSides: False +*HPGuidePageExtraTumble: True +*HPManualFeedPrintsOnBottom: False +*HPEasyColor: True +*HPEasyColorJPEGArtifactReduction: True +*HPEasyColorPhotoEnhancement: True +*HPEasyColorAdjustColor: True +*HPEasyColorReduceImageThreshold: "1.5" +*cupsUIResolver MediaTypeVsDuplex: "*Duplex None *MediaType Unspecified" +*DefaultResolution: 600dpi +*HPCustomJobName Title/Job Name: "" +*HPCustomJobName Range: "1 15" +*HPCustomJobName Type: "string" +*HPCustomUserName Title/User Name: "" +*HPCustomUserName Range: "1 15" +*HPCustomUserName Type: "string" +*HPSupportedUnicodeRanges: "0x0020 0xffff" +*cupsVersion: 1.5 +*cupsModelNumber: 0 +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12 12 600 780" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*MaxMediaWidth: "885.599975585938" +*MaxMediaHeight: "1333" +*HWMargins: 12 12 12 12 +*OpenUI *InputSlot/Paper Feed: PickOne +*OrderDependency: 40 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic: " + <> setpagedevice" +*End +*InputSlot Tray2/Tray 2: "<> setpagedevice" +*InputSlot Tray3/Tray 3: "<> setpagedevice" +*CloseUI: *InputSlot +*OpenGroup: InstallableOptions/Installable Options +*OpenUI *HPOption_Duplexer/Duplex Unit: Boolean +*OrderDependency: 0 AnySetup *HPOption_Duplexer +*DefaultHPOption_Duplexer: True +*HPOption_Duplexer True/On: "" +*HPOption_Duplexer False/Off: "" +*?HPOption_Duplexer: " + save + currentpagedevice /Duplex known + {(True)}{(False)}ifelse = flush + restore +" +*End +*CloseUI: *HPOption_Duplexer +*CloseGroup: InstallableOptions +*OpenGroup: HPPaperQualityPanel/Paper/Quality +*OpenUI *HPPrintQuality/Print Quality: PickOne +*OrderDependency: 5 DocumentSetup *HPPrintQuality +*DefaultHPPrintQuality: FastRes1200 +*HPPrintQuality FastRes1200/FastRes 1200: "<> setpagedevice" +*HPPrintQuality 600dpi/600 dpi: "<> setpagedevice" +*HPPrintQuality ProRes1200/ProRes 1200: "<> setpagedevice" +*CloseUI: *HPPrintQuality +*CloseGroup: HPPaperQualityPanel +*DefaultFont: Courier +*Font Albertus-ExtraBold: Standard "(001.001)" Standard ROM +*Font Albertus-Medium: Standard "(001.001)" Standard ROM +*Font AntiqueOlive: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.001)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.001)" Standard ROM +*Font Arial: Standard "(001.001)" Standard ROM +*Font Arial-Bold: Standard "(001.001)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.001)" Standard ROM +*Font Arial-Italic: Standard "(001.001)" Standard ROM +*Font AvantGarde-Book: Standard "(001.001)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.001)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.001)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.001)" Standard ROM +*Font Bookman-Demi: Standard "(001.001)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.001)" Standard ROM +*Font Bookman-Light: Standard "(001.001)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.001)" Standard ROM +*Font BookmanCE-Demi: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-DemiItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-Light: Win1250 "(001.001)" ExtendedRoman ROM +*Font BookmanCE-LightItalic: Win1250 "(001.001)" ExtendedRoman ROM +*Font CGOmega: Standard "(001.001)" Standard ROM +*Font CGOmega-Bold: Standard "(001.001)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGOmega-Italic: Standard "(001.001)" Standard ROM +*Font CGTimes: Standard "(001.001)" Standard ROM +*Font CGTimes-Bold: Standard "(001.001)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.001)" Standard ROM +*Font CGTimes-Italic: Standard "(001.001)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Coronet: Standard "(001.001)" Standard ROM +*Font Courier: Standard "(001.001)" Standard ROM +*Font Courier-Bold: Standard "(001.001)" Standard ROM +*Font Courier-BoldOblique: Standard "(001.001)" Standard ROM +*Font Courier-Oblique: Standard "(001.001)" Standard ROM +*Font CourierHP: Standard "(001.001)" Standard ROM +*Font CourierHP-Bold: Standard "(001.001)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.001)" Standard ROM +*Font CourierHP-Italic: Standard "(001.001)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.001)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.001)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.001)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.001)" Standard ROM +*Font Helvetica: Standard "(001.001)" Standard ROM +*Font Helvetica-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.001)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.001)" Standard ROM +*Font LetterGothic: Standard "(001.001)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.001)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.001)" Standard ROM +*Font Marigold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.001)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.001)" Standard ROM +*Font Palatino-Bold: Standard "(001.001)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.001)" Standard ROM +*Font Palatino-Italic: Standard "(001.001)" Standard ROM +*Font Palatino-Roman: Standard "(001.001)" Standard ROM +*Font Symbol: Special "(001.001)" Special ROM +*Font SymbolMT: Standard "(001.001)" Standard ROM +*Font Times-Bold: Standard "(001.001)" Standard ROM +*Font Times-BoldItalic: Standard "(001.001)" Standard ROM +*Font Times-Italic: Standard "(001.001)" Standard ROM +*Font Times-Roman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.001)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.001)" Standard ROM +*Font Univers-Bold: Standard "(001.001)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.001)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.001)" Standard ROM +*Font Univers-Medium: Standard "(001.001)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.001)" Standard ROM +*Font Wingdings-Regular: Special "(001.001)" Special ROM +*Font Wingdings-Regular: Standard "(001.001)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.001)" Standard ROM +*Font ZapfDingbats: Special "(001.001)" Special ROM diff --git a/modules/printhost/scripts/enforcer-pc b/modules/printhost/scripts/enforcer-pc new file mode 100644 index 00000000..f6288795 --- /dev/null +++ b/modules/printhost/scripts/enforcer-pc @@ -0,0 +1,7 @@ +#!/bin/bash +# Print the number of pages in arg1 (a PostScript file pre-processed by +# CUPS-flavored GhostScript via the ocfps filter). +# +# Reads the "%%Pages:" header from the beginning or end of the file. +set -euo pipefail +(head -n20; tail -n20) < "$1" | awk '/^%%Pages: [0-9]+$/ {print $2}' diff --git a/modules/printhost/scripts/enforcer-size b/modules/printhost/scripts/enforcer-size new file mode 100644 index 00000000..5d5b2717 --- /dev/null +++ b/modules/printhost/scripts/enforcer-size @@ -0,0 +1,10 @@ +#!/bin/bash +# Print the page size of the document in arg1 (a PostScript file +# pre-processed by CUPS-flavored GhostScript via the ocfps filter). +# +# Reads the "%%DocumentMedia:" or "%%PageMedia:" header from the file. +set -euo pipefail +(head -n20; tail -n20) < "$1" | awk ' + /^%%PageMedia:/ {print $2} + /^%%DocumentMedia:/ {print $2} +' | head -n1 diff --git a/modules/printhost/scripts/enforcer.py b/modules/printhost/scripts/enforcer.py new file mode 100644 index 00000000..93a1da70 --- /dev/null +++ b/modules/printhost/scripts/enforcer.py @@ -0,0 +1,384 @@ +#!/usr/bin/env python3 +"""Enforcer is a prehook and posthook for the ocf-cups-backend whose primary +purpose is to add and subtract from page quotas as user jobs are processed. + +When a user sends a job to the print server, the backend passes the job as a +PostScript file to enforcer before sending it to the printer. Enforcer reads +PostScript comments to count pages and connects to mysql to check against the +user's quota. If enforcer returns non-zero, the job is rejected. Otherwise, +enforcer gets called again when the job is done and logs the job in mysql, +taking care to set the page count to zero if an error was encountered. + +Another function of enforcer is to send notifications to desktops to let users +know when a job has been sent to the printer, been rejected due to the quota, +finished printing, or failed to print. +""" +import argparse +import os +import subprocess +import sys +from collections import namedtuple +from datetime import datetime +from syslog import syslog +from textwrap import dedent +from traceback import format_exc + +import ocflib.printing.quota as quota +import redis +import requests +from ocflib.misc.mail import MAIL_SIGNATURE +from ocflib.misc.mail import send_mail_user +from ocflib.misc.mail import send_problem_report + + +# Paths to helper scripts — substituted by Nix at build time +ENFORCER_PC = '@enforcer_pc@' +ENFORCER_SIZE = '@enforcer_size@' + +# Redis broker for real-time notifications +REDIS_HOST = 'broker.ocf.berkeley.edu' +REDIS_PORT = 6378 + +COLOR_QUEUES = {'color-single', 'color-double'} + +APP_NAME = 'Printer' +PORT = 6767 + +Message = namedtuple('Message', ['subject', 'body']) + + +USER_ERROR_INFO = dedent("""\ + Username: {user} + Time: {time} + File: {doc_name} + Total pages: {pages} + Pages left today: {daily_pages} + Pages left this semester: {semester_pages} + Color pages left: {color_pages}\ +""") + +INSUFFICIENT_QUOTA_MESSAGE = Message( + subject='[OCF] Your latest print job was rejected', + body=dedent("""\ + Greetings from the Open Computing Facility, + + This email is letting you know that your most recent print job was + rejected since it would exceed your daily quota. The daily quota is + {daily_quota} pages today and the semesterly quota is {semester_quota} pages. + + """) + USER_ERROR_INFO + dedent(""" + + Does something look wrong? Please reply to + + help@ocf.berkeley.edu + + + """) + MAIL_SIGNATURE +) + +INSUFFICIENT_COLOR_QUOTA_MESSAGE = Message( + subject='[OCF] Your latest print job was rejected', + body=dedent("""\ + Greetings from the Open Computing Facility, + + This email is letting you know that your most recent print job was + rejected since it would exceed your color printing quota. The color + printing quota is {color_quota} pages and the semesterly quota is + {semester_quota} pages. + + """) + USER_ERROR_INFO + dedent(""" + + Does something look wrong? Please reply to + + help@ocf.berkeley.edu + + + """) + MAIL_SIGNATURE +) + +PRINTER_ERROR_MESSAGE = Message( + subject='[OCF] Your latest print job failed', + body=dedent("""\ + Greetings from the Open Computing Facility, + + This email is from the OCF to let you know that your most recent print + job failed due to a printer error. If there's something wrong with the + printers, please alert the operations staff at the desk. + + """) + USER_ERROR_INFO + dedent(""" + + Still can't get it to print? Please reply to + + help@ocf.berkeley.edu + + + """) + MAIL_SIGNATURE +) + +ENFORCER_ERROR_MESSAGE = Message( + subject='[OCF] Your latest print job failed', + body=dedent("""\ + Greetings from the Open Computing Facility, + + This email is from the OCF to let you know that your most recent print + job failed due to a problem with the print accounting system. OCF staff + have been notified of the problem and should fix it shortly. If there + is a staff member in lab, you can ask them for help in the meantime. + + """) + USER_ERROR_INFO + dedent(""" + + Still can't get it to print? Please reply to + + help@ocf.berkeley.edu + + + """) + MAIL_SIGNATURE +) + +NON_LETTER_ERROR_MESSAGE = Message( + subject='[OCF] Your latest print job failed', + body=dedent("""\ + Greetings from the Open Computing Facility, + + This email is letting you know that your most recent print job was + rejected since it was not letter sized. Please ensure that you are + following all instructions on the computers, and not printing + directly from your browser. + + """) + USER_ERROR_INFO + dedent(""" + + Does something look wrong? Please reply to + + help@ocf.berkeley.edu + + """) + MAIL_SIGNATURE +) + +NOTIFY_QUOTA_MESSAGE = dedent("""\ + Your print job failed due to insufficient pages. Your job was + {pages} pages, and you have {quota} pages remaining today.\ +""") + +NOTIFY_JOB_ACCEPTED = dedent("""\ + Your print job '{document}' was accepted and sent to {printer}.\ +""") + +NOTIFY_JOB_ERROR = dedent("""\ + Your print job '{document}' failed due to a printer error. + Please contact a staff member for assistance.\ +""") + +NOTIFY_NON_LETTER = dedent("""\ + Your print job '{document}' failed due to not being letter sized. + Please ensure you are not printing from your browser. +""") + + +def read_config(): + with open(os.environ['ENFORCER_MYSQL_PASSWORD']) as f: + mysql_passwd = f.read().strip() + with open(os.environ['ENFORCER_REDIS_PASSWORD']) as f: + redis_passwd = f.read().strip() + with open(os.environ['ENFORCER_WAYOUT_PASSWORD']) as f: + wayout_passwd = f.read().strip() + return 'ocfprinting', mysql_passwd, redis_passwd, wayout_passwd + + +def page_count(env): + path = env['TEADATAFILE'] + num_copy = int(env['TEACOPIES']) + return num_copy * int(subprocess.check_output((ENFORCER_PC, path), timeout=30)) + + +def page_size(env): + path = env['TEADATAFILE'] + return subprocess.check_output((ENFORCER_SIZE, path), timeout=30).decode('UTF-8').strip() + + +def create_job(env): + printer = env['TEAPRINTERNAME'] + queue = env['CLASS'] + return quota.Job( + user=env['TEAUSERNAME'], + time=datetime.now(), + pages=page_count(env), + queue=queue, + printer=printer, + doc_name=env['TEATITLE'], + filesize=env['TEAJOBSIZE'], + ) + + +def send_printer_mail(message, job, quo): + body = message.body.format( + user=job.user, + time=job.time, + doc_name=job.doc_name, + pages=job.pages, + daily_pages=quo.daily, + semester_pages=quo.semesterly, + color_pages=quo.color, + daily_quota=quota.daily_quota(), + semester_quota=quota.SEMESTERLY_QUOTA, + color_quota=quota.COLOR_QUOTA, + ) + send_mail_user(job.user, message.subject, body) + + +def send_notification(wayout_pass, summary, body, username): + try: + hostname = get_hostname_from_username(username) + if not hostname: + return + url = 'http://' + hostname + ':' + str(PORT) + '/notify' + data = { + 'summary': summary, + 'body': body, + 'app_name': APP_NAME, + } + headers = { + 'Authorization': wayout_pass, + 'Content-Type': 'application/json' + } + requests.post(url=url, json=data, headers=headers, timeout=5) + except Exception as e: + syslog('Exception: ' + str(e)) + + +def get_hostname_from_username(username): + try: + url = 'https://labmap.ocf.berkeley.edu/api/generate' + res = requests.get(url, timeout=5).json() + desktops = res.get('desktops', []) + for desktop in desktops: + if desktop.get('user', '') == username: + return desktop.get('name') + return None + except Exception as e: + syslog('Exception: ' + str(e)) + + +def prehook(c, r, job, wayout_pass): + quo = quota.get_quota(c, job.user) + size = page_size(os.environ) + + if size not in ['Letter', '279x215mm', '215x279mm', '279x216mm', '216x279mm']: + send_printer_mail(NON_LETTER_ERROR_MESSAGE, job, quo) + msg = NOTIFY_NON_LETTER.format( + document=job.doc_name, + ) + r.publish('user-' + job.user, msg) + send_notification(wayout_pass, 'Non Letter Error', msg, job.user) + sys.exit(255) + + if job.pages > quo.daily: + send_printer_mail(INSUFFICIENT_QUOTA_MESSAGE, job, quo) + msg = NOTIFY_QUOTA_MESSAGE.format( + pages=job.pages, + quota=quo.daily, + ) + r.publish('user-' + job.user, msg) + send_notification(wayout_pass, 'Insufficient Quota', msg, job.user) + sys.exit(255) + elif job.queue in COLOR_QUEUES and job.pages > quo.color: + send_printer_mail(INSUFFICIENT_COLOR_QUOTA_MESSAGE, job, quo) + msg = NOTIFY_QUOTA_MESSAGE.format( + pages=job.pages, + quota=quo.daily, + ) + r.publish('user-' + job.user, msg) + send_notification(wayout_pass, 'Insufficient Color Quota', msg, job.user) + sys.exit(255) + + +def posthook(c, r, job, success, wayout_pass): + msg = '' + if success: + quota.add_job(c, job) + printer_name = job.printer.split('-')[0] + msg = NOTIFY_JOB_ACCEPTED.format( + document=job.doc_name, + printer=printer_name, + ) + r.publish('printer-' + printer_name, job.user) + send_notification(wayout_pass, 'Printer Success', msg, job.user) + else: + quo = quota.get_quota(c, job.user) + msg = NOTIFY_JOB_ERROR.format(document=job.doc_name) + send_printer_mail(PRINTER_ERROR_MESSAGE, job, quo) + + err_msg = dedent("""\ + enforcer encountered a printer error while processing a job + + backend environment variables: + {vars} + """).format( + vars='\n'.join(' {}: {}'.format(k, v) for k, v in + os.environ.items() if k.startswith('TEA')) + ) + + syslog(err_msg) + send_problem_report(err_msg) + send_notification(wayout_pass, 'Printer Error', msg, job.user) + r.publish('user-' + job.user, msg) + + +def main(argv): + job, quo = None, None + try: + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument('command', + choices={'prehook', 'posthook'}) + args = parser.parse_args(argv[1:]) + job = create_job(os.environ) + mysql_user, mysql_pass, redis_pass, wayout_pass = read_config() + r = redis.StrictRedis( + host=REDIS_HOST, + port=REDIS_PORT, + password=redis_pass, + ssl=True, + ) + with quota.get_connection(user=mysql_user, password=mysql_pass) as c: + if args.command == 'prehook': + prehook(c, r, job, wayout_pass) + else: + success = os.environ['TEASTATUS'] == '0' + posthook(c, r, job, success, wayout_pass) + except SystemExit as e: + sys.exit(e.code) + except Exception: + msg = dedent("""\ + enforcer encountered the following error while processing a job: + + {traceback} + + + backend environment variables: + {vars} + """).format( + traceback=format_exc(), + vars='\n'.join(' {}: {}'.format(k, v) for k, v in + os.environ.items() if k.startswith('TEA')) + ) + + syslog(msg) + send_problem_report(msg) + if job and args.command == 'prehook': + try: + send_printer_mail( + ENFORCER_ERROR_MESSAGE, + job, + quo or quota.UserQuota(user=job.user, daily='Unknown', + semesterly='Unknown') + ) + except Exception: + pass + # Don't retry; it's not going to print the second time. + sys.exit(255) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/modules/printhost/scripts/monitor-cups.py b/modules/printhost/scripts/monitor-cups.py new file mode 100644 index 00000000..1b636e9a --- /dev/null +++ b/modules/printhost/scripts/monitor-cups.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +""" +Collects metrics from CUPS and writes them to a text file in the Prometheus +metrics format. +""" + +import logging +import sys +import getpass +import os + +import cups +from prometheus_client import CollectorRegistry +from prometheus_client import Gauge +from prometheus_client import write_to_textfile + +logging.basicConfig( + level=logging.INFO, + format="%(message)s", + stream=sys.stderr, +) + + +def main(): + if len(sys.argv) < 2: + logging.error("usage: monitor-cups.py ") + return 1 + + logging.info(f"Starting monitor-cups run as user: {getpass.getuser()} (UID: {os.getuid()})") + cups.setUser("root") + logging.info(f"CUPS user set to: {cups.getUser()}") + logging.info(f"Starting monitor-cups run, outputting to {sys.argv[1]}") + registry = CollectorRegistry() + + classes = Gauge( + 'cups_class', + 'Existence of printer on CUPS class', + ['class', 'printer'], + registry=registry, + ) + + queue = Gauge( + 'cups_queue_total', + 'Size of job queue', + ['hostname', 'state'], + registry=registry, + ) + + conn = cups.Connection() + classes_count = 0 + for cups_class, printers in conn.getClasses().items(): + for printer in printers: + # class is a reserved keyword, so we have to pass it via dictionary + classes.labels(**{'class': cups_class, 'printer': printer}).set(1) + classes_count += 1 + logging.info(f"Collected {classes_count} class-printer mappings") + + jobs_count = 0 + for job_id in conn.getJobs(): + try: + job_attrs = conn.getJobAttributes(job_id) + queue.labels( + hostname=job_attrs['job-originating-host-name'], + state=job_attrs['job-state'], + ).inc() + jobs_count += 1 + except cups.IPPError: + pass + logging.info(f"Collected metrics for {jobs_count} active jobs") + + write_to_textfile(sys.argv[1], registry) + logging.info("Finishing monitor-cups run") + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/modules/printhost/scripts/ocf-cups-backend b/modules/printhost/scripts/ocf-cups-backend new file mode 100644 index 00000000..089e93ab --- /dev/null +++ b/modules/printhost/scripts/ocf-cups-backend @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +""" +OCF CUPS backend wrapper replacing tea4cups. + +Intercepts print jobs to run quota enforcement (prehook) before sending to +the printer and accounting (posthook) afterward. + +Device URI format: ocfbackend: + e.g. ocfbackend:socket://169.229.226.92:9100/ (HP printers) + ocfbackend:ipp://169.229.226.96/ipp/print (Epson) + +The real backend URI scheme determines which CUPS backend binary is invoked +(socket, ipp, etc.) from $CUPS_SERVERBIN/backend/. + +Paths substituted by Nix at build time: + @enforcer@ path to the enforcer binary + @mysqlPasswordFile@ path to MySQL password file + @wayoutPasswordFile@ path to wayout password file + @redisPasswordFile@ path to Redis password file +""" +import os +import sys +import subprocess +import tempfile +from urllib.parse import urlparse + +ENFORCER = '@enforcer@' +MYSQL_PASSWORD_FILE = '@mysqlPasswordFile@' +WAYOUT_PASSWORD_FILE = '@wayoutPasswordFile@' +REDIS_PASSWORD_FILE = '@redisPasswordFile@' + +# CUPS backend exit codes +CUPS_BACKEND_OK = 0 +CUPS_BACKEND_FAILED = 1 # retry job +CUPS_BACKEND_CANCEL = 5 # cancel job, don't retry + + +def main(): + # Called with no args: CUPS is probing for available devices. + # We don't enumerate devices; just exit successfully. + if len(sys.argv) == 1: + sys.exit(CUPS_BACKEND_OK) + + if len(sys.argv) not in (6, 7): + print( + f'Usage: {sys.argv[0]} job-id user title copies options [file]', + file=sys.stderr, + ) + sys.exit(CUPS_BACKEND_FAILED) + + job_id, user, title, copies, options = sys.argv[1:6] + data_file = sys.argv[6] if len(sys.argv) == 7 else None + + device_uri = os.environ.get('DEVICE_URI', '') + printer_name = os.environ.get('PRINTER', '') + class_name = os.environ.get('CLASS', printer_name) + cups_serverbin = os.environ.get('CUPS_SERVERBIN', '/usr/lib/cups') + + if not device_uri.startswith('ocfbackend:'): + print( + f'ocf-cups-backend: unexpected DEVICE_URI: {device_uri!r}', + file=sys.stderr, + ) + sys.exit(CUPS_BACKEND_FAILED) + + real_uri = device_uri[len('ocfbackend:'):] + scheme = urlparse(real_uri).scheme + # ipps uses the same backend binary as ipp + backend_scheme = 'ipp' if scheme == 'ipps' else scheme + backend_bin = os.path.join(cups_serverbin, 'backend', backend_scheme) + + if not os.path.exists(backend_bin): + print( + f'ocf-cups-backend: backend not found: {backend_bin}', + file=sys.stderr, + ) + sys.exit(CUPS_BACKEND_FAILED) + + # If job data comes from stdin, buffer it to a temp file so enforcer-pc + # and enforcer-size can read it. With the ocfps filter in the pipeline, + # CUPS almost always provides a file path, but handle stdin defensively. + tmp = None + if data_file is None: + tmp = tempfile.NamedTemporaryFile(delete=False, suffix='.ps') + try: + tmp.write(sys.stdin.buffer.read()) + tmp.flush() + data_file = tmp.name + finally: + tmp.close() + + try: + try: + file_size = str(os.path.getsize(data_file)) + except OSError: + file_size = '0' + + tea_env = dict(os.environ) + tea_env.update({ + 'TEAUSERNAME': user, + 'TEACOPIES': copies, + 'TEATITLE': title, + 'TEAPRINTERNAME': printer_name, + 'TEADATAFILE': data_file, + 'TEAJOBSIZE': file_size, + 'CLASS': class_name, + 'ENFORCER_MYSQL_PASSWORD': MYSQL_PASSWORD_FILE, + 'ENFORCER_WAYOUT_PASSWORD': WAYOUT_PASSWORD_FILE, + 'ENFORCER_REDIS_PASSWORD': REDIS_PASSWORD_FILE, + }) + + # Prehook: check quota before sending to printer. + # enforcer exits 255 to reject; any non-zero cancels the job. + prehook = subprocess.run([ENFORCER, 'prehook'], env=tea_env) + if prehook.returncode != 0: + sys.exit(CUPS_BACKEND_CANCEL) + + # Forward job to the real CUPS backend. + backend_env = dict(os.environ) + backend_env['DEVICE_URI'] = real_uri + + cmd = [backend_bin, job_id, user, title, copies, options, data_file] + result = subprocess.run(cmd, env=backend_env) + + tea_env['TEASTATUS'] = str(result.returncode) + + # Posthook: log completed job to database. + subprocess.run([ENFORCER, 'posthook'], env=tea_env) + + sys.exit(result.returncode) + + finally: + if tmp is not None: + try: + os.unlink(tmp.name) + except OSError: + pass + + +if __name__ == '__main__': + main() diff --git a/modules/printhost/scripts/ocfps b/modules/printhost/scripts/ocfps new file mode 100644 index 00000000..073ebe42 --- /dev/null +++ b/modules/printhost/scripts/ocfps @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# ocfps is a CUPS filter which converts PDF documents to rasterized PostScript +# documents suitable for printing by a PostScript printer. +# +# ocfps is the composition of pdftops (poppler-utils) and the CUPS filter +# pstops. pdftops converts any PDF to rasterized PS. pstops converts this PS +# to a more printer-friendly syntax and inserts commands for duplexing, etc. +# +# The reason for this filter: the OCF's printers frequently encounter errors +# printing PostScript produced by CUPS directly. They have no problem with +# rasterized PS, so this fixes that. +set -euo pipefail + +PDFTOPS=@pdftops@ +PSTOPS=@pstops@ +QPDF=@qpdf@ +GREP=@grep@ +AWK=@awk@ + +if [ "$#" -ne 5 ] && [ "$#" -ne 6 ]; then + echo "Usage: $0 job-id user title copies options [file]" + exit +fi + +copies="$4" + +{ echo "=== ocfps argv: $* ==="; declare -x; } > /tmp/ocfps-debug.txt + +# Firefox and GTK print dialogs do not send a CUPS/IPP copies attribute; instead +# they encode the copy count as /NumCopies in the PDF's ViewerPreferences +# dictionary. Poppler 20.x honored this and emitted the value as +# << /NumCopies N >> setpagedevice in its PS output; poppler 21+ stopped doing +# so. We extract it ourselves using qpdf, which decompresses PDF object streams +# (where ViewerPreferences often lives in GTK-generated PDFs) before grepping. +if [ "$copies" -eq 1 ] && [ "$#" -eq 6 ]; then + qpdf_out=$($QPDF --object-streams=disable "$6" - 2>&1 >/dev/null) || true + echo "[ocfps] qpdf stderr: ${qpdf_out}" >&2 + pdf_copies=$($QPDF --object-streams=disable "$6" - 2>/dev/null \ + | $GREP -aEo '/NumCopies[[:space:]]+[0-9]+' | $AWK 'NR==1{print $NF}') || true + echo "[ocfps] pdf_copies='${pdf_copies}' final copies=${copies}" >&2 + if [ -n "$pdf_copies" ] && [ "$pdf_copies" -gt 1 ] 2>/dev/null; then + copies="$pdf_copies" + fi +fi + +if [ "$#" -eq 5 ]; then + $PDFTOPS - - | $PSTOPS "$@" +else + $PDFTOPS "$6" - | $PSTOPS "$1" "$2" "$3" "$copies" "$5" +fi diff --git a/profiles/base.nix b/profiles/base.nix index 41f74f46..e4130f74 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -202,17 +202,19 @@ in environment.etc = { papersize.text = "letter"; + "nixos/configuration.nix".text = '' + {}: builtins.abort "This machine is not managed by /etc/nixos. Please use configs at ocf.io/gh/nix with Colmena." + ''; + } + // lib.optionalAttrs (!config.ocf.printhost.enable) { + # omit cups config on printhost "cups/lpoptions".text = "Default double"; "cups/client.conf".text = '' - ServerName printhost.ocf.berkeley.edu - Encryption Always + ServerName printhost-dev.ocf.berkeley.edu + Encryption Never ''; }; - environment.etc."nixos/configuration.nix".text = '' - {}: builtins.abort "This machine is not managed by /etc/nixos. Please use configs at ocf.io/gh/nix with Colmena." - ''; - systemd.services.nix-remove-profiles = { description = "Remove old NixOS generations but leave store cleanup to nix.gc"; script = '' diff --git a/secrets/host-keys/tule.pub b/secrets/host-keys/tule.pub new file mode 100644 index 00000000..a810dbe0 --- /dev/null +++ b/secrets/host-keys/tule.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmksPBt1ow//3HV6T8I/BTygAPopgBxMwqALP5Fye67 diff --git a/secrets/master-keyed/printhost/mysql-password.age b/secrets/master-keyed/printhost/mysql-password.age new file mode 100644 index 00000000..9c84592a --- /dev/null +++ b/secrets/master-keyed/printhost/mysql-password.age @@ -0,0 +1,35 @@ +age-encryption.org/v1 +-> X25519 ZT70V4H8QV7tDH84g/HK8Fgi5Wo0y5HZgFWxVfHJQ3Y +J/FNNrxg+Em32QubJzuq30NzEfVjAByxNSHUz9XsE4I +-> X25519 H2B9Q1Z4wDMyVqMPSyTQFcwMdc8ahYqGbeRKdqH+FnQ +Jyhoh+mXE6y8ARrLHMWmROyAMal8khRibKLKAyx8zlw +-> X25519 dha1P+LETgUHMPeNLVeTUQU1ZoAqwTAgi64vSnFWA1g +GDbtSTT/bnChI+BHPRePsdad4jpkEj1S8fzCkDjIkh4 +-> X25519 iclxnFbQkFV04cCnlJZs3RVAh2op15othB7jM/b3uTc +GNXCsqPSnH/ASvhEvYbrli+YrI5rh3X9d0M8I8aZNxM +-> X25519 8jBxglrcUx8ru+MXAip0BJjDFB2bZWfCU47M9ZftClc +9OrT0R8eyrKyYwpW0BVSng4Bs5ikXnsTrMVK1l6aF4Q +-> X25519 NloiIE5NIlskXU039qhXr88NcvUl4Am/PYkDxuhqLk0 +uX0lKkkI9TBiRCIi8GycU2oRDKnE0Ds5eUrPJPzLr0I +-> X25519 2RYskYSxz+Evk1/ERzKuXh+KB4BY7BqfX/dV7r9ZnUE +DYQvknYsJyv2e/U1Cy7U7gNy4/yRYnENH0j/sIlg9ic +-> X25519 Rz7ARux37SQZjcjCvFes8LaivKa2UEp0tT6QIGLKvAs +Ht6XkOEUa7C2+7XwUvGf/5LrDvBD5vG/3OpdUw2dceA +-> X25519 9+OunJwJN/UGynrR1uG+/9yo0V7Ah4BCCwhsv77Lbhg +3fFFW3Tlq2TUYEsnFyYPf18Yk7sOPtQ/QIlBkEzRM9I +-> X25519 T6tx/6B9o2GfaI2bAlYeAgyYP65n23B23dAsQo38by8 +LaaGqqVve5Pxdnt6BBdS0IZKmAvutOa2oahlOSbaUT4 +-> X25519 2hiuKwuJo/w2YMZ305PmFhBiYwZ9Iov8ztiDFuYLY3o +TvjG9PsK95tskU2LPxQu6HEN6GJNs9lxRdcGHTCEyw0 +-> X25519 TTGTGflI7ut0oHFeZMMXbdusFjHUAvlmYuCJSYuGtQY +szzlvzNN5kByfr/a4vpKee4jjt2hgl3p4tjnei4aNK0 +-> X25519 LbMEeHwTG/HvRqWZJ8yp4d4yUl3dDYFr2hwZu2WYj34 +SDE8lPoRutsyZAHgCl8luEkFzBCtGDdPYzj3zzHsVGs +-> X25519 RHOXGBMOBp+K2c05k7NsE+OdPJYwatI2yAytxtlZaAo +GNa3iPapOezJTs0z65MsHAGaMuVwNllCs4MeVaA0lW4 +-> X25519 kGcBMkNj/BgEz2Z02Ywzp5614lyjfmtCg8ylFHtVE1M +yfGIZL5eVJQWx6Ss5wu2hkB0qlrtVSulq2PF8BeUdRI +-> 2an,-grease {|a:<' +sfGT67p1Hno2Qcd1XVoVNA +--- 4hO724Xpi4aPQ0RBLhatCT1v2yOoRh2+KSTy8LH3MVU +wwja2A6݀?u%KNӍvGl* DS7DOf. \ No newline at end of file diff --git a/secrets/master-keyed/printhost/redis-password.age b/secrets/master-keyed/printhost/redis-password.age new file mode 100644 index 00000000..0987549d --- /dev/null +++ b/secrets/master-keyed/printhost/redis-password.age @@ -0,0 +1,36 @@ +age-encryption.org/v1 +-> X25519 oV+O3Ez1+bUNxtLylubIARWDe+DjuK7hFSw3j/waXXI +gt76/H8S6G79gUCivxLLYFoj/+jL+DbRwXiZsp/R8TI +-> X25519 +fxvjfQn29mVZzXvm7DMTY+BhJu8REc5ExvOR+Jyk1Y +LxdQ5tJuHr7E2SIhG6jhaqb2AXdd+3QOwuT7Nr3nMSY +-> X25519 87WHbmy9C3zORY32xp7zjEn+YQCttnYMKn9BChgs/1E +PvmkkILWvCM3rfwHAlZO8t8Nss/nz77C9LsOhGWb+Bw +-> X25519 MDOFuGkRLLiHaSqULRbbc6hNtr47RNJzZEJHALyPVEM +exrNUtcMVOAteWZHxGGMoci3CLhXJ5jJMnIeRuCU2lc +-> X25519 GzAKjRMyVHhHzkN+Dr4LTJAdGq/5nAnNKlUmCW1jpjM +BKB2v+rdQwO3pLqZG2n1yGb6fbmkUsWRd8CqDJNUCjY +-> X25519 /WjDi5I46PG9MFl6xpNK7KIHCtIKyyCLoGZswy9DojY +QMSAiYEei7aArAXCSucpv+Rdut+m36SyO7bchnGpXYw +-> X25519 h+tcbAcqwpD+6YDzwChYgYcxHlzGmFj4STzfjg0N6TQ +eBNLwd7RdK9P5Qfmd5Ops9/lgD3T1U72rihD/YrEUZU +-> X25519 xKSg2y3P/45BJp3YJ5ud3Os/fzuOolGmt4Y5I+8rahc +Aqc3+Nbyvs22uCC+2mMrBDElWkI95bbLbr5lABnhb40 +-> X25519 GYAHJLbSBgJJWpB18SDpRlt5gxT/o3r9B+II8oPTRBk +r9upvhUUfuCm0XZsesFCZFy8KfIeo5gvlki0UYekeS4 +-> X25519 k/Dn8DqM9bOlPnlnHLt6/vlv2FPndPiHBh+ybgbSDQI +MSNKYCPa+flhi1/bk0jT/Q+BsnCtCFTw0gEEKhLWRxY +-> X25519 xRhoWCIVTiwkUFyTfWFzBtQCZ6QI8UXTzvpDHIa2igg +b0bwLE0VqnEJK1/PijiS9aAitw3VhDmaWgHVv/e6+Ls +-> X25519 ChHT0dQum4xAnJ4OSD0rR97XiKerFbCx+M2uN9KaPSM +qWeTwQrFPmXXkcBcdwF2goBYsmVSsxmbG1DjxfXuaVI +-> X25519 61itTQ+4t3uSisY4sPKWeL4LCyDWB70Cfk7dDIO1PUo +MIyH5Zc44tlLjS5VA3t3Y5CHc9KHVp3gqQIKA/vKSkI +-> X25519 OI0JTgo+DzXto9OzL1xzmEY2sCQuJFr6NK3/693IhnA +tpshRdgwVeh96X8xXkuA6r6/+/Oat/IOk2VApoutiHM +-> X25519 1YY0DT7B7KovvrOiqP3ATDJ0c9/ujq9SY09mLMmIEFk +amufYVkQaX0ZErtg8oSqhEwWf+AzL1cNbLPe5M6y1pE +-> B4-grease y^%"?~ ?R$]9D48 WROd$ +hp5F504hEamQePgRFw3hSBh6SIdjRHaPipNXbAB3pRyckCAnUd0FCe3b0rpFAzrz +oD7O7kzreL+v7U+h+SR/Ta7BYz7O2rdJxGw9rg +--- OFRrPsklYVlPldL8Nq/HkKA6hry0ZBO9jceYGE16lQ8 +:JDg3exU~\ow@zbi%00B@̖{l \ No newline at end of file diff --git a/secrets/master-keyed/printhost/wayout-password.age b/secrets/master-keyed/printhost/wayout-password.age new file mode 100644 index 00000000..b8b63621 --- /dev/null +++ b/secrets/master-keyed/printhost/wayout-password.age @@ -0,0 +1,37 @@ +age-encryption.org/v1 +-> X25519 RDLSTKowa1gHvTcEW8Bh5mjqf72pWc2CLO56BWtkl1E +U/G6CAL3tMCjntpL/8Z6OqxL7I6vrW+DdKXHSMYgK+Y +-> X25519 e9rlIGp3J2+QWJIo5Yx2oPTraxoKCYqad2NFwhrFs3Y +yCkSnZTJKnoirtahnPrjRiZnImid0PTafs39GO+7dK8 +-> X25519 Vkx4mKInEZXUhlE4QJn/ocaE5zD5W4YS0PY6R1vv0gU +G3RYZkrEhaYa/B4TAO5FUn6+G94BB974kqNTPahQ64s +-> X25519 fqOO94XVsYZ08x3JK5q7nqucLUq8bBQbVaiRUVSz5Vg +NWaa1mG5ITCG9zK8dApLluyTt2tyMvGGs1eQCKaJuZk +-> X25519 LQUmdcWJfasgmviTJrTjJYivRjzOYVBvWgMP33FIrk4 +8U+J0mN0bXJ3dCerigx6jQyzSNT6toiVCDGzERG6PRk +-> X25519 A4AmVu7S+mrPS/5Tif1US9muneC8C9MyikVGgXv9N0I +siTtkCnUFb6rAjurTSql4G6BkgC0CiWBhijd6kMr+ZA +-> X25519 iaVshTEjv2TzKEp6LEbzSVUL7ZfBhkO89jfycjzTvEQ +JOuHtCuXL7TvgFlDZ+yzOt1886vpivnVzAhgAGYloaM +-> X25519 XvJ1eg/jRyEWKLjb8IJ/ghyPEol1TLutlbwrCiGRWAc +3+0Nky8FP6lH9GVuk5CXDWC8cfcnd6KSi5k6v7RurtA +-> X25519 dkT7pVROIZabRYk6VNaY3oKX5ctw3ksHgKHqJsOW3yk +I3ywvsvCRTwgNkdTvneaT4HqF5g1fEc0xLOuBAgcu54 +-> X25519 i2Q32oXLdseNS1iEfVq2Jsx3YeoQDp5wt8etohDi+Eg +VfUOeZbh1cW1tx4TETV933Cz5i8Ykq5T9qEjtExJMLE +-> X25519 Qn98sXE6Y04t4OCVLTBR3WXW6WQOLpMPz0aSrXoM2wM +Swzc0/RbKeZ7F7k+/nHYcdJl6RuEDMXMrwKwoC3UIGw +-> X25519 CLfeFZObXXwHfZj0UhGUY0gdumzQ6uxf7+bUxgir6EY +g3CMmJBBtJayy0946YpVYQUxDDpImzxPQbdH5W+adGc +-> X25519 gDG9SDgNvRkDi7JGSB6RuyhH2C2BbAa9EgXfcarJlEc +kwFY5VC0W2hE3c9Q6Ph5apBfdV+6IPekZoUFuNKwZ9s +-> X25519 9UyRrdIk6Dii3+LrioZw0/OLyooWpTp1iRZR90FrbUI +azawRqECc+jqqB5OqaJGbWNMwTBVSHjBpV52joqR1IA +-> X25519 ndFatJUBeiLDZRXvVPQ7nGHRPyqeHC+WgicPqX+111g +qYwu0KvE+J8Af0hPpmGcYB4rMG8aXzxmmw43Nhom2b8 +-> K5lU-grease +Hbib68H3jtKsZTnGcp/ChEyjFmGZdgaAD1ZrbpvJyR3T3XN1n+xEmn1Y6aYK0jS0 +NLWTsBDeY1Ry4vHcwpIqSjMzFw +--- m2xaP5xPcF6xUmNZE6NEH2bJ/Wy+6WA55Wkf8pHh8rk +l՜Nt +(܀R'_]ANw6LD?_G[uru \ No newline at end of file diff --git a/secrets/rekeyed/tule/09355544ed73b2eb0dfc61ee2c82f883-root-password-hash.age b/secrets/rekeyed/tule/09355544ed73b2eb0dfc61ee2c82f883-root-password-hash.age new file mode 100644 index 00000000..bd29544d --- /dev/null +++ b/secrets/rekeyed/tule/09355544ed73b2eb0dfc61ee2c82f883-root-password-hash.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> ssh-ed25519 /LkQCg Lh4TKOR7nvE5yb1kDnblOE178/KlBL4Kf+zBjJQv3Wg +mE0altgZT8AfwTi+w6F3TO59jOxL2BOmCf3Siv6JJVo +-> ;mg-grease hN{F8 Hn]" Tm= +CAPTYNJWonrrjY+RB6pM3QzsjNIHSiSD+mbul32q9nU7znLA+aU3FVqNhhKo43rv +p4nXFS4+tXVTjgAjpSC5hgQfS/OXjQ/GHiM +--- cp0F/iE2eTRNu9/Yt4wE5ndO0YQWy1M2O3bgopJ/qwU +E9IʶWf2J[ Pd!'׎_kY|F$֤vpXfrӴޡڃ"8ӄLH!-Y &eY? \ No newline at end of file diff --git a/secrets/rekeyed/tule/7764f7148b271a98baf5bd5b5ef89137-printhost-redis-password.age b/secrets/rekeyed/tule/7764f7148b271a98baf5bd5b5ef89137-printhost-redis-password.age new file mode 100644 index 00000000..48141007 --- /dev/null +++ b/secrets/rekeyed/tule/7764f7148b271a98baf5bd5b5ef89137-printhost-redis-password.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> ssh-ed25519 /LkQCg cMcw4s/YTCV50eF8RmUn6nd300nG/t8t1QMjjtP7PTs +rZcdbQ5Z+rpBrLIap81ySPlDmvR4MhXLwoq7YNrQ1+s +-> H$@A>j*-grease 7/@z:a #W>U7 6GEa P+^+a+G5 +NVDxJzE97zzlQXQDs7ekngAONL+a0nJHG9wufJZlFjMdNffWluPmb2GSV5R656sF +rEztF9Ioyvpq0/tOlpeIBg +--- vBkK4A18W7gR9Kal2IHrgih0ewZCzW633oMEtXWjKV4 +7t9 ՠYqwt|s)V 2 )L7$'bI+L \ No newline at end of file diff --git a/secrets/rekeyed/tule/a8930a18c3024c5a57a4a4322dacabbd-printhost-mysql-password.age b/secrets/rekeyed/tule/a8930a18c3024c5a57a4a4322dacabbd-printhost-mysql-password.age new file mode 100644 index 00000000..dd5e009c --- /dev/null +++ b/secrets/rekeyed/tule/a8930a18c3024c5a57a4a4322dacabbd-printhost-mysql-password.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> ssh-ed25519 /LkQCg 9j2j556ZrJ/QP1hz5onw8DwQNyNEPDBNy4qOzEHbBjE +ltJsotJZPfm0xpPZZk0u/iZU9q0Sg8UWq6x5JncFRlQ +-> tEflLkDb-grease +68/CY/QSUetJKICalYFWNbsuUlViS5CEb6RDtFXui0Im5lJEZu2I4/yeFlbYr1FC +eMeHU4cNVcqWlY3kgIUNwtAtoAhkC8C3G6XTnSrJ4b3Q5ENaBT0gRnSxgJV5 +--- mdEiKny1NyfepQFBPbEJxRS5w3szV2AOvWqe5wJQbdw +*uMӊh-Cal:sbs"wR9rVD -p@ \ No newline at end of file diff --git a/secrets/rekeyed/tule/c15340d977984cdc45679eb0de4b9a02-printhost-wayout-password.age b/secrets/rekeyed/tule/c15340d977984cdc45679eb0de4b9a02-printhost-wayout-password.age new file mode 100644 index 00000000..67e6639c --- /dev/null +++ b/secrets/rekeyed/tule/c15340d977984cdc45679eb0de4b9a02-printhost-wayout-password.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 /LkQCg ZfDvZIj5XYj3gg6wbROQwpM4C8pIYpQt82f6k/rZ1yo +JpFgSILEirhk9qXtugI8gDUuQnXSR4NeN75Hree0t/w +-> F"~-grease +mrrc8lYU+LzDNUgVdYuJa4wdyDF4tYgl/uKrZab1Fn8cHksRQPovJOZ44gn49n8q +pQ +--- tiCDQKToGOgPtg5Jpx4vxl6/YU8Dkuk6HJALqkJ+258 +WGHB[WN ٟ9mĘ| ) +l7&p;~. *׋@B \ No newline at end of file diff --git a/secrets/rekeyed/tule/ee18ada2feebe72faad82dbaf0e16b84-tsig-secret.age b/secrets/rekeyed/tule/ee18ada2feebe72faad82dbaf0e16b84-tsig-secret.age new file mode 100644 index 00000000..ee0e7ba3 --- /dev/null +++ b/secrets/rekeyed/tule/ee18ada2feebe72faad82dbaf0e16b84-tsig-secret.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 /LkQCg tpcG5qmkx3AnOXsZT0Tbcla9kUWuxpJSXXsugKE34gQ +29Uox6yvgeYJDfk5j/M4liyGDnODNjpis/bYXlWJeC0 +-> K4C3O-grease )=~a 4 ; +hJ9JedjBovR+PvvMM1PRMkMLGYu+WecBd3oghjsbXLBkpLNsdW9GKvgWwBhUVFUs +qTrdkdCDT/eO1hvRonu+aQrIlkYB +--- fL/OxGH7SrXwKH1rLcE1Tu1NWvM4T/Mc7tITvHrjZaI +-P1Te)aDNT  [nʥG7_u{n[Cun*!u +BS*5iBIBi.