Giter Club home page Giter Club logo

printer's Introduction

Printer

In a nutshell, Printer is a software system that makes it easy for YOU to:

Using a commonly-available small thermal printer, and some basic Arduino hardware, we can send small, designed bits of content from the internet to be printed anywhere in the world.

Find out more about getting a printer on the wiki, or the server API on the wiki.

You can also see some sample applications: Printer Mail, Printer Paint and Printer Weather.

If you're interested in the background, take a look at the project page or the introductory blog post.

This is the backend server software. The rest of this README is about setting up and running a server.

Server Setup

The server acts as a conduit for turning HTML-based designs into a format suitable for the printer. The printer periodically polls the server, and if some data for printing is available, it downloads it and prints it.

Dependencies:

  • Ruby 1.9.2 or greater
  • Bundler
  • Redis
  • ImageMagick
  • PhantomJS
  • Common fonts

Here's the apt-get command I ran:

apt-get install ttf-mscorefonts-installer xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic redis-server imagemagick libmagick++-dev

You may need to add multiverse sources to apt - see http://askubuntu.com/questions/59890/ttf-mscorefonts-installer-is-not-available

Installing PhantomJS

PhantomJS is used as part of the rasterisation process, which turns HTML content into bitmaps suitable for printing. In order to get the best possible output, you should use a recent version of PhantomJS. I have tested against version 1.5.0.

You can build PhantomJS by following the instructions they provide at http://code.google.com/p/phantomjs/wiki/BuildInstructions

Deployment

Deployment is managed by recap (https://github.com/freerange/recap), a small, fast, git-based deployment strategy for capistrano.

Use bundler to install the dependencies

bundle install

Then you can deploy and set up a server as follows. Firstly, create the application user and group:

bundle exec cap bootstrap

Next, prepare the server for the application. Follow any guidance about adding your SSH user to groups, etc:

bundle exec cap deploy:setup

Finally, deploy the application:

bundle exec cap deploy

The server should start running on port 5678; I suggest you set up Apache or Nginx to reverse proxy a domain to that port.

Compatible printers

The server contains code to handle the A2 thermal printer described here, but the architecture should make it easy to implement support for other printers.

Each printer reports its "type" when it is checking with the server for content, and this corresponds to a class mapping in the PrintProcessor module. To support a new printer, it should be as simple as adding a new type to this mapping, along with the supporting class to emit the right printer byte sequences.

TODO & CAVEATS

The printer itself seems to prefer some types of paper over others, particularly where dark printing or horizontal lines are present. I've experienced paper from Staples jamming. If I find any good sources of paper, I'll update this.

Rasterisation of HTML designs isn't great at the moment; to some extent this is limited by PhantomJS, which:

  • doesn't support web fonts
  • doesn't seem to support non-antialiased rendering
  • doesn't match the exact font-sizes as seen in the browser, and this doesn't seem to be consistent either.

LICENSE

The Printer project is open source, and made available via an 'MIT License', which basically means you can do whatever you like with it as long as you retain the copyright notice and license description - see LICENSE.txt for more information.

printer's People

Contributors

chrisroos avatar chrisroos-and-lazyatom avatar lazyatom avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.