Automatic Printing System with Open Source Tools

1,267 views
1,194 views

Published on

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/

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,267
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Automatic Printing System with Open Source Tools

  1. 1. 2013/08/03 @ COSCUP 2013 Automatic Printing System with Open SourceTools Mosky 1
  2. 2. This Slide ✤ This slide is available at: https://speakerdeck.com/mosky/automatic-printing-system-with- open-source-tools 2
  3. 3. Mosky 3
  4. 4. Mosky ✤ I am working at www.pinkoi.com . 3
  5. 5. Mosky ✤ I am working at www.pinkoi.com . ✤ I've been using Ubuntu everyday since 2009. 3
  6. 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. 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. 8. Outline 4
  9. 9. Outline ✤ The Motivation 4
  10. 10. Outline ✤ The Motivation ✤ Setup Printing System on Linux 4
  11. 11. Outline ✤ The Motivation ✤ Setup Printing System on Linux ✤ Convert Web to PDF 4
  12. 12. Outline ✤ The Motivation ✤ Setup Printing System on Linux ✤ Convert Web to PDF ✤ The Tips 4
  13. 13. The Motivation 5
  14. 14. It's just out of control! We have to issue more than 1,000 invoices per month. 6
  15. 15. It's just out of control! We have to issue more than 1,000 invoices per month. 6
  16. 16. We love hand-made stuff. Pinkoi is the largest online community and marketplace for designers in Asia 7
  17. 17. We love hand-made stuff. Pinkoi is the largest online community and marketplace for designers in Asia 7
  18. 18. So we build it for ourselves with many cups of coffee. 8
  19. 19. So we build it for ourselves with many cups of coffee. 8
  20. 20. Setup Printing System on Linux 9
  21. 21. The Check List 10
  22. 22. The Check List ✤ A computer installed Linux and CUPS (Common Unix Printing System). 10
  23. 23. The Check List ✤ A computer installed Linux and CUPS (Common Unix Printing System). ✤ http://www.cups.org/ 10
  24. 24. The Check List ✤ A computer installed Linux and CUPS (Common Unix Printing System). ✤ http://www.cups.org/ ✤ http://localhost:631/ 10
  25. 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. 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. 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. 28. Setup Printer with CUPS' Driver 11
  29. 29. Setup Printer with CUPS' Driver ✤ Find the driver for your printer: 11
  30. 30. Setup Printer with CUPS' Driver ✤ Find the driver for your printer: ✤ $ lpinfo --make-and-model 'P1006' -m 11
  31. 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. 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. 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. 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. 35. Setup Printer with PPD 12
  36. 36. Setup Printer with PPD ✤ Find the PPD file for your printer: 12
  37. 37. Setup Printer with PPD ✤ Find the PPD file for your printer: ✤ http://www.openprinting.org/drivers 12
  38. 38. Setup Printer with PPD ✤ Find the PPD file for your printer: ✤ http://www.openprinting.org/drivers ✤ Put the PPD file in: 12
  39. 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. 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. 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. 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. 43. More about lpadmin 13
  44. 44. More about lpadmin ✤ Enable a printer: 13
  45. 45. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin -p <NAME> -E 13
  46. 46. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin -p <NAME> -E ✤ Set a printer as default: 13
  47. 47. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin -p <NAME> -E ✤ Set a printer as default: ✤ $ lpadmin -d <NAME> 13
  48. 48. More about lpadmin ✤ Enable a printer: ✤ $ lpadmin -p <NAME> -E ✤ Set a printer as default: ✤ $ lpadmin -d <NAME> ✤ Remove a printer: 13
  49. 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. 50. Check Printer is Online 14
  51. 51. Check Printer is Online ✤ Just print a test file: 14
  52. 52. Check Printer is Online ✤ Just print a test file: ✤ $ lpr -P <NAME> <FILE> 14
  53. 53. Check Printer is Online ✤ Just print a test file: ✤ $ lpr -P <NAME> <FILE> ✤ Check the status of printer: 14
  54. 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. 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. 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. 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. 58. ConvertWeb to PDF 15
  59. 59. The Packages 16
  60. 60. The Packages ✤ Use wkhtmltopdf to convert Web to PDF. 16
  61. 61. The Packages ✤ Use wkhtmltopdf to convert Web to PDF. ✤ $ sudo apt-get install wkhtmltopdf 16
  62. 62. The Packages ✤ Use wkhtmltopdf to convert Web to PDF. ✤ $ sudo apt-get install wkhtmltopdf ✤ https://code.google.com/p/wkhtmltopdf/ 16
  63. 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. 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. 65. The Usage 17
  66. 66. The Usage ✤ with X Window: 17
  67. 67. The Usage ✤ with X Window: ✤ $ wkhtmltopdf <HTML> <PDF> 17
  68. 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. 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. 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. 71. Send File to Printer 18
  72. 72. Send File to Printer ✤ Print file: 18
  73. 73. Send File to Printer ✤ Print file: ✤ $ lpr -P <NAME> <FILE>... 18
  74. 74. Send File to Printer ✤ Print file: ✤ $ lpr -P <NAME> <FILE>... ✤ Show printer queue: 18
  75. 75. Send File to Printer ✤ Print file: ✤ $ lpr -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> 18
  76. 76. Send File to Printer ✤ Print file: ✤ $ lpr -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> ✤ $ lpq -a 18
  77. 77. Send File to Printer ✤ Print file: ✤ $ lpr -P <NAME> <FILE>... ✤ Show printer queue: ✤ $ lpq -P <NAME> ✤ $ lpq -a ✤ Cancel print job: 18
  78. 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. 79. PyCUPS 19
  80. 80. PyCUPS ✤ PyPI 19
  81. 81. PyCUPS ✤ PyPI ✤ https://pypi.python.org/pypi/pycups 19
  82. 82. PyCUPS ✤ PyPI ✤ https://pypi.python.org/pypi/pycups ✤ Get connection: 19
  83. 83. PyCUPS ✤ PyPI ✤ https://pypi.python.org/pypi/pycups ✤ Get connection: ✤ import cups conn = cups.Connection() 19
  84. 84. PyCUPS - Get Printers 20
  85. 85. PyCUPS - Get Printers ✤ Get printers: 20
  86. 86. PyCUPS - Get Printers ✤ Get printers: ✤ conn.getPrinters() 20
  87. 87. PyCUPS - Get Printers ✤ Get printers: ✤ conn.getPrinters() ✤ Example output: 20
  88. 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. 89. PyCUPS - Print File 21
  90. 90. PyCUPS - Print File ✤ Print file: 21
  91. 91. PyCUPS - Print File ✤ Print file: ✤ conn.printFile(printer, filename, title, options) conn.printFiles(printer, filenames, title, options) 21
  92. 92. PyCUPS - Print File ✤ Print file: ✤ conn.printFile(printer, filename, title, options) conn.printFiles(printer, filenames, title, options) ✤ Example: 21
  93. 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. 94. PyCUPS - Get Jobs 22
  95. 95. PyCUPS - Get Jobs ✤ Get jobs: 22
  96. 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. 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. 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. 99. TheTips 23
  100. 100. The Error Log 24
  101. 101. The Error Log ✤ $ sudo tail -f /var/log/cups/error_log 24
  102. 102. AboutTemplate (CSS) 25
  103. 103. AboutTemplate (CSS) ✤ Use cm/mm as your unit ... 25
  104. 104. AboutTemplate (CSS) ✤ Use cm/mm as your unit ... ✤ The steps of adjusting output: 25
  105. 105. AboutTemplate (CSS) ✤ Use cm/mm as your unit ... ✤ The steps of adjusting output: ✤ Create 1x1 cm div block. 25
  106. 106. AboutTemplate (CSS) ✤ Use cm/mm as your unit ... ✤ The steps of adjusting output: ✤ Create 1x1 cm div block. ✤ Print it. 25
  107. 107. AboutTemplate (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. 108. AboutTemplate (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. 109. Live Demo 26
  110. 110. Live Demo 27
  111. 111. Video Demo 28
  112. 112. 29
  113. 113. 29
  114. 114. The End 30
  115. 115. The End 31
  116. 116. The End ✤ CUPS 31
  117. 117. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm, ... 31
  118. 118. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm, ... ✤ wxhtmltopdf 31
  119. 119. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm, ... ✤ wxhtmltopdf ✤ PyCUPS 31
  120. 120. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm, ... ✤ wxhtmltopdf ✤ PyCUPS ✤ Some tips 31
  121. 121. The End ✤ CUPS ✤ lpadmin, lpstat, lpr, lpq, lprm, ... ✤ wxhtmltopdf ✤ PyCUPS ✤ Some tips ✤ Any Question? 31

×