Automatic Printing System with Open Source Tools

D16bc1f94b17ddc794c2dfb48ef59456?s=47 Mosky
August 03, 2013

Automatic Printing System with Open Source Tools

It is the slides for COSCUP[1] 2013 talk, "Automatic Printing System with Open Source Tools".

It explains how to setup automatic printing system on Linux and includes some tips for it.

[1] COSCUP: http://coscup.org/

D16bc1f94b17ddc794c2dfb48ef59456?s=128

Mosky

August 03, 2013
Tweet

Transcript

  1. 2013/08/03 @ COSCUP 2013 Automatic Printing System with Open Source

    Tools Mosky 1
  2. This Slide ✤ This slide is available at: https://speakerdeck.com/mosky/automatic-printing-system-with- open-source-tools

    2
  3. Mosky 3

  4. Mosky ✤ I am working at www.pinkoi.com . 3

  5. Mosky ✤ I am working at www.pinkoi.com . ✤ I've

    been using Ubuntu everyday since 2009. 3
  6. Mosky ✤ I am working at www.pinkoi.com . ✤ I've

    been using Ubuntu everyday since 2009. ✤ A speaker at PyCon TW 2013, 2012, PyCon JP 2012, ... 3
  7. Mosky ✤ I am working at www.pinkoi.com . ✤ I've

    been using Ubuntu everyday since 2009. ✤ A speaker at PyCon TW 2013, 2012, PyCon JP 2012, ... ✤ http://mosky.tw/ 3
  8. Outline 4

  9. Outline ✤ The Motivation 4

  10. Outline ✤ The Motivation ✤ Setup Printing System on Linux

    4
  11. Outline ✤ The Motivation ✤ Setup Printing System on Linux

    ✤ Convert Web to PDF 4
  12. Outline ✤ The Motivation ✤ Setup Printing System on Linux

    ✤ Convert Web to PDF ✤ The Tips 4
  13. The Motivation 5

  14. It's just out of control! We have to issue more

    than 1,000 invoices per month. 6
  15. It's just out of control! We have to issue more

    than 1,000 invoices per month. 6
  16. We love hand-made stuff. Pinkoi is the largest online community

    and marketplace for designers in Asia 7
  17. We love hand-made stuff. Pinkoi is the largest online community

    and marketplace for designers in Asia 7
  18. So we build it for ourselves with many cups of

    coffee. 8
  19. So we build it for ourselves with many cups of

    coffee. 8
  20. Setup Printing System on Linux 9

  21. The Check List 10

  22. The Check List ✤ A computer installed Linux and CUPS

    (Common Unix Printing System). 10
  23. The Check List ✤ A computer installed Linux and CUPS

    (Common Unix Printing System). ✤ http://www.cups.org/ 10
  24. The Check List ✤ A computer installed Linux and CUPS

    (Common Unix Printing System). ✤ http://www.cups.org/ ✤ http://localhost:631/ 10
  25. The Check List ✤ A computer installed Linux and CUPS

    (Common Unix Printing System). ✤ http://www.cups.org/ ✤ http://localhost:631/ ✤ A printer which has an IP address. 10
  26. The Check List ✤ A computer installed Linux and CUPS

    (Common Unix Printing System). ✤ http://www.cups.org/ ✤ http://localhost:631/ ✤ A printer which has an IP address. ✤ http://192.168.2.100/ 10
  27. The Check List ✤ A computer installed Linux and CUPS

    (Common Unix Printing System). ✤ http://www.cups.org/ ✤ http://localhost:631/ ✤ A printer which has an IP address. ✤ http://192.168.2.100/ ✤ lpd://192.168.2.100/ 10
  28. Setup Printer with CUPS' Driver 11

  29. Setup Printer with CUPS' Driver ✤ Find the driver for

    your printer: 11
  30. Setup Printer with CUPS' Driver ✤ Find the driver for

    your printer: ✤ $ lpinfo --make-and-model 'P1006' -m 11
  31. Setup Printer with CUPS' Driver ✤ Find the driver for

    your printer: ✤ $ lpinfo --make-and-model 'P1006' -m ✤ drv:///hpijs.drv/hp-laserjet_p1006-hpijs.ppd HP LaserJet p1006 hpijs, 3.10.2, requires proprietary plugin 11
  32. Setup Printer with CUPS' Driver ✤ Find the driver for

    your printer: ✤ $ lpinfo --make-and-model 'P1006' -m ✤ drv:///hpijs.drv/hp-laserjet_p1006-hpijs.ppd HP LaserJet p1006 hpijs, 3.10.2, requires proprietary plugin ✤ Add the printer with the driver we found from the above command: 11
  33. Setup Printer with CUPS' Driver ✤ Find the driver for

    your printer: ✤ $ lpinfo --make-and-model 'P1006' -m ✤ drv:///hpijs.drv/hp-laserjet_p1006-hpijs.ppd HP LaserJet p1006 hpijs, 3.10.2, requires proprietary plugin ✤ Add the printer with the driver we found from the above command: ✤ $ lpadmin -E -p <NAME> -v socket://<IP> -m <DRIVER> -E 11
  34. Setup Printer with CUPS' Driver ✤ Find the driver for

    your printer: ✤ $ lpinfo --make-and-model 'P1006' -m ✤ drv:///hpijs.drv/hp-laserjet_p1006-hpijs.ppd HP LaserJet p1006 hpijs, 3.10.2, requires proprietary plugin ✤ Add the printer with the driver we found from the above command: ✤ $ lpadmin -E -p <NAME> -v socket://<IP> -m <DRIVER> -E ✤ $ lpadmin -E -p 'hp-p1006' -v socket://192.168.2.100 -m drv:///hpijs.drv/hp-laserjet_p1006-hpijs.ppd -E 11
  35. Setup Printer with PPD 12

  36. Setup Printer with PPD ✤ Find the PPD file for

    your printer: 12
  37. Setup Printer with PPD ✤ Find the PPD file for

    your printer: ✤ http://www.openprinting.org/drivers 12
  38. Setup Printer with PPD ✤ Find the PPD file for

    your printer: ✤ http://www.openprinting.org/drivers ✤ Put the PPD file in: 12
  39. Setup Printer with PPD ✤ Find the PPD file for

    your printer: ✤ http://www.openprinting.org/drivers ✤ Put the PPD file in: ✤ /usr/share/cups/model 12
  40. Setup Printer with PPD ✤ Find the PPD file for

    your printer: ✤ http://www.openprinting.org/drivers ✤ Put the PPD file in: ✤ /usr/share/cups/model ✤ Add the printer with this PPD file: 12
  41. Setup Printer with PPD ✤ Find the PPD file for

    your printer: ✤ http://www.openprinting.org/drivers ✤ Put the PPD file in: ✤ /usr/share/cups/model ✤ Add the printer with this PPD file: ✤ $ lpadmin -E -p <NAME> -v lpd://<IP>/lp -m <DRIVER> -E 12
  42. Setup Printer with PPD ✤ Find the PPD file for

    your printer: ✤ http://www.openprinting.org/drivers ✤ Put the PPD file in: ✤ /usr/share/cups/model ✤ Add the printer with this PPD file: ✤ $ lpadmin -E -p <NAME> -v lpd://<IP>/lp -m <DRIVER> -E ✤ $ lpadmin -E -p 'hp-p1006' -v lpd://192.168.2.100/lp -m 12
  43. More about lpadmin 13

  44. More about lpadmin ✤ Enable a printer: 13

  45. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin

    -p <NAME> -E 13
  46. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin

    -p <NAME> -E ✤ Set a printer as default: 13
  47. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin

    -p <NAME> -E ✤ Set a printer as default: ✤ $ lpadmin -d <NAME> 13
  48. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin

    -p <NAME> -E ✤ Set a printer as default: ✤ $ lpadmin -d <NAME> ✤ Remove a printer: 13
  49. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin

    -p <NAME> -E ✤ Set a printer as default: ✤ $ lpadmin -d <NAME> ✤ Remove a printer: ✤ $ lpadmin -x <NAME> 13
  50. Check Printer is Online 14

  51. Check Printer is Online ✤ Just print a test file:

    14
  52. Check Printer is Online ✤ Just print a test file:

    ✤ $ lpr -P <NAME> <FILE> 14
  53. Check Printer is Online ✤ Just print a test file:

    ✤ $ lpr -P <NAME> <FILE> ✤ Check the status of printer: 14
  54. Check Printer is Online ✤ Just print a test file:

    ✤ $ lpr -P <NAME> <FILE> ✤ Check the status of printer: ✤ $ lpstat -a / $ lpstat -t 14
  55. Check Printer is Online ✤ Just print a test file:

    ✤ $ lpr -P <NAME> <FILE> ✤ Check the status of printer: ✤ $ lpstat -a / $ lpstat -t ✤ Troubleshooting: 14
  56. Check Printer is Online ✤ Just print a test file:

    ✤ $ lpr -P <NAME> <FILE> ✤ Check the status of printer: ✤ $ lpstat -a / $ lpstat -t ✤ Troubleshooting: ✤ $ nc -v <IP> <PORT> 14
  57. Check Printer is Online ✤ Just print a test file:

    ✤ $ lpr -P <NAME> <FILE> ✤ Check the status of printer: ✤ $ lpstat -a / $ lpstat -t ✤ Troubleshooting: ✤ $ nc -v <IP> <PORT> ✤ $ nmap <IP> -p <PORT_RANGE> 14
  58. Convert Web to PDF 15

  59. The Packages 16

  60. The Packages ✤ Use wkhtmltopdf to convert Web to PDF.

    16
  61. The Packages ✤ Use wkhtmltopdf to convert Web to PDF.

    ✤ $ sudo apt-get install wkhtmltopdf 16
  62. The Packages ✤ Use wkhtmltopdf to convert Web to PDF.

    ✤ $ sudo apt-get install wkhtmltopdf ✤ https://code.google.com/p/wkhtmltopdf/ 16
  63. The Packages ✤ Use wkhtmltopdf to convert Web to PDF.

    ✤ $ sudo apt-get install wkhtmltopdf ✤ https://code.google.com/p/wkhtmltopdf/ ✤ If you don't have X Window, you also need xvfb. 16
  64. The Packages ✤ Use wkhtmltopdf to convert Web to PDF.

    ✤ $ sudo apt-get install wkhtmltopdf ✤ https://code.google.com/p/wkhtmltopdf/ ✤ If you don't have X Window, you also need xvfb. ✤ $ sudo apt-get install xvfb 16
  65. The Usage 17

  66. The Usage ✤ with X Window: 17

  67. The Usage ✤ with X Window: ✤ $ wkhtmltopdf <HTML>

    <PDF> 17
  68. The Usage ✤ with X Window: ✤ $ wkhtmltopdf <HTML>

    <PDF> ✤ $ wkhtmltopdf -T 0 -L 0 -R 0 -B 0 --page-size A4 -- encoding utf-8 <HTML> <PDF> 17
  69. The Usage ✤ with X Window: ✤ $ wkhtmltopdf <HTML>

    <PDF> ✤ $ wkhtmltopdf -T 0 -L 0 -R 0 -B 0 --page-size A4 -- encoding utf-8 <HTML> <PDF> ✤ without X window: 17
  70. The Usage ✤ with X Window: ✤ $ wkhtmltopdf <HTML>

    <PDF> ✤ $ wkhtmltopdf -T 0 -L 0 -R 0 -B 0 --page-size A4 -- encoding utf-8 <HTML> <PDF> ✤ without X window: ✤ $ xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf -T 0 -L 0 -R 0 -B 0 --page-size A4 --encoding utf-8 <HTML> <PDF> 17
  71. Send File to Printer 18

  72. Send File to Printer ✤ Print file: 18

  73. Send File to Printer ✤ Print file: ✤ $ lpr

    -P <NAME> <FILE>... 18
  74. Send File to Printer ✤ Print file: ✤ $ lpr

    -P <NAME> <FILE>... ✤ Show printer queue: 18
  75. Send File to Printer ✤ Print file: ✤ $ lpr

    -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> 18
  76. Send File to Printer ✤ Print file: ✤ $ lpr

    -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> ✤ $ lpq -a 18
  77. Send File to Printer ✤ Print file: ✤ $ lpr

    -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> ✤ $ lpq -a ✤ Cancel print job: 18
  78. Send File to Printer ✤ Print file: ✤ $ lpr

    -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> ✤ $ lpq -a ✤ Cancel print job: ✤ $ lprm -P <NAME> <JOB_ID>... 18
  79. PyCUPS 19

  80. PyCUPS ✤ PyPI 19

  81. PyCUPS ✤ PyPI ✤ https://pypi.python.org/pypi/pycups 19

  82. PyCUPS ✤ PyPI ✤ https://pypi.python.org/pypi/pycups ✤ Get connection: 19

  83. PyCUPS ✤ PyPI ✤ https://pypi.python.org/pypi/pycups ✤ Get connection: ✤ import

    cups conn = cups.Connection() 19
  84. PyCUPS - Get Printers 20

  85. PyCUPS - Get Printers ✤ Get printers: 20

  86. PyCUPS - Get Printers ✤ Get printers: ✤ conn.getPrinters() 20

  87. PyCUPS - Get Printers ✤ Get printers: ✤ conn.getPrinters() ✤

    Example output: 20
  88. PyCUPS - Get Printers ✤ Get printers: ✤ conn.getPrinters() ✤

    Example output: ✤ {u'hp': {'device-uri': u'lpd://192.168.0.100/lp', 'printer-info': u'hp', # 3: prepared to print; 4: printing; 5: this device is stop 'printer-state': 3, 'printer-state-message': u'Data file sent successfully', 'printer-state-reasons': [u'none'], ... 'printer-uri-supported': u'ipp://localhost:631/printers/hp'}} 20
  89. PyCUPS - Print File 21

  90. PyCUPS - Print File ✤ Print file: 21

  91. PyCUPS - Print File ✤ Print file: ✤ conn.printFile(printer, filename,

    title, options) conn.printFiles(printer, filenames, title, options) 21
  92. PyCUPS - Print File ✤ Print file: ✤ conn.printFile(printer, filename,

    title, options) conn.printFiles(printer, filenames, title, options) ✤ Example: 21
  93. PyCUPS - Print File ✤ Print file: ✤ conn.printFile(printer, filename,

    title, options) conn.printFiles(printer, filenames, title, options) ✤ Example: ✤ conn.printFile(printer, filepath, os.path.basename(filepath), {}) 21
  94. PyCUPS - Get Jobs 22

  95. PyCUPS - Get Jobs ✤ Get jobs: 22

  96. PyCUPS - Get Jobs ✤ Get jobs: ✤ conn.getJobs(which_jobs='not-completed', my_jobs=False,

    limit=-1, first_job_id=-1, requested_attributes=None) 22
  97. PyCUPS - Get Jobs ✤ Get jobs: ✤ conn.getJobs(which_jobs='not-completed', my_jobs=False,

    limit=-1, first_job_id=-1, requested_attributes=None) ✤ The which_jobs can be 'not-completed', 'completed' or 'all'. 22
  98. PyCUPS - Get Jobs ✤ Get jobs: ✤ conn.getJobs(which_jobs='not-completed', my_jobs=False,

    limit=-1, first_job_id=-1, requested_attributes=None) ✤ The which_jobs can be 'not-completed', 'completed' or 'all'. ✤ It returns a dict, indexed by job id, of dicts representing job attributes. 22
  99. The Tips 23

  100. The Error Log 24

  101. The Error Log ✤ $ sudo tail -f /var/log/cups/error_log 24

  102. About Template (CSS) 25

  103. About Template (CSS) ✤ Use cm/mm as your unit ...

    25
  104. About Template (CSS) ✤ Use cm/mm as your unit ...

    ✤ The steps of adjusting output: 25
  105. About Template (CSS) ✤ Use cm/mm as your unit ...

    ✤ The steps of adjusting output: ✤ Create 1x1 cm div block. 25
  106. About Template (CSS) ✤ Use cm/mm as your unit ...

    ✤ The steps of adjusting output: ✤ Create 1x1 cm div block. ✤ Print it. 25
  107. About Template (CSS) ✤ Use cm/mm as your unit ...

    ✤ The steps of adjusting output: ✤ Create 1x1 cm div block. ✤ Print it. ✤ Use zoom to adjust. 25
  108. About Template (CSS) ✤ Use cm/mm as your unit ...

    ✤ The steps of adjusting output: ✤ Create 1x1 cm div block. ✤ Print it. ✤ Use zoom to adjust. ✤ Avoid floating structure. 25
  109. Live Demo 26

  110. Live Demo 27

  111. Video Demo 28

  112. 29

  113. 29

  114. The End 30

  115. The End 31

  116. The End ✤ CUPS 31

  117. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm,

    ... 31
  118. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm,

    ... ✤ wxhtmltopdf 31
  119. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm,

    ... ✤ wxhtmltopdf ✤ PyCUPS 31
  120. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm,

    ... ✤ wxhtmltopdf ✤ PyCUPS ✤ Some tips 31
  121. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm,

    ... ✤ wxhtmltopdf ✤ PyCUPS ✤ Some tips ✤ Any Question? 31