Cookie

automatically print, with file upload on Linux servers

Published by TheJoe on

Estimated reading time: 4 minutes

Caution


This article was published more than a year ago, there may have been developments.
Please take this into account.

In today's article I deal with printing. After I compared the various requirements of customers, I came to theorize the idea that the user (utonto) should have to have everything ready. Less software or drivers will be installed, will be more happy and will be less annoying to those who have something else to do.

The illumination came to me sifting between the printer settings that we have in the office. In one of the menus I see that you can upload the PDF to print on the printer's internal memory to print automatically. No driver (the printer is network linked), nothing special formatting, Only upload. So I thought it would not be hard to do the same thing with a printer connected via USB or serial port of a computer, not sharing (serve drivers). In fact, it was easy.

For the experiment with at least two computers, connected on the LAN, one of which is connected and configured to print locally (which we will call server). We will forward the PDF to the server via a web interface, because it is more intuitive and familiar user first. Therefore, the computer connected to the printer will have to do by print-server and web-server.

A few words about CUPS…

Do it for granted that you are using a Linux server in order. For those who still did not know CUPS Take a tour Su Wikipedia or the official website of CUPS project (Common Unix Printing System). Suffice it to say that all print jobs in Linux (that I know) are managed by CUPS, a print server installed on your PC. Everyone. For the uninitiated, with CUPS, printers and print jobs are easily administered via a web interface. Simply plug in the url bar “http://localhost:631“. From that page we can manage printers, print jobs, install or remove a printer, basically anything we want to make the printer we can do it as well as with the tools specially developed for each distribution, also from web interface. This makes it much easier to configure, for example, a print server. And it is precisely our case.

The Printer Administration window
The Printer Administration window

Regarding the installation of CUPS we refer to the guida di Ubuntu, is still the only way to print with Linux, then each will have CUPS distribution within its repository. It is usually included by default in the distribution.

Now for the webserver, we will use Apache with PHP support. Even in this case the guidance of Ubuntu is very detailed, and takes into account the greater number of scenarios and problems that a user may experience when they install Apache. The installation of PHP instead I explain I.

You need to install PHP5 and a package that allows PHP to communicate with Apache. From terminal:

sudo apt-get install php5 libapache2-mod-php5

Apache must then be restarted in order for you “notice” which now has support for PHP. Always terminale:

sudo /etc/init.d/apache2 restart

Enter the password and confirm. Now we test if things are really going in the right direction. We create the file “/var/www/phpinfo.php” inside which insert the following code:

<? phpinfo(); ?>

Open a browser and write in the url bar “http://localhost/phpinfo.php“. You should see a page similar to the following.

Look here:  Some solution to protect your images on the internet
PHP up and running
PHP up and running

Well, now we also have a running web. We need to create a script that allows the upload of PDF on a server. First, create the HTML form:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file">
<input type="submit" name="submit" value="Upload!">
</form>

</body>
</html>

We save the file in “/var/www/html/uploader/“. We can give it any name we want (this is. “index.php“).

form

The form invokes the file “upload_file.php“. We will have to create the new file and save it in the same directory as before: “/var/www/html/uploader/“. The content is as follows:

<?php
$allowedExts = array("pdf");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "application/pdf"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

The fifth line will have noticed that I have set an upper limit on the size of the PDF. This can also be safely removed, and modified the file “php.ini” so let it load even heavier PDF. Do not forget that everything happens locally within a LAN. We also create the directory “upload“, where file will be uploaded.

If the upload is successful, the script file will show us what is loaded, the file type, the size and where it is saved on the server, otherwise it returns “Invalid file”.

script_ok

Now that the first file is uploaded we will make sure that all the contents of the directory “upload” be printed, and then moved to a backup directory will be emptied daily (we do not want to clog up the file server, true?). I'll call the backup directory “deposito“, positioned within the root directory. For all we will use the automatic Cron.

We add the following lines at the end of crontab file (from terminal: “crontab -e“).

# print server
* * * * * lpr / var / www / uploads / upload / * | sleep 30; mv / var / www / uploader / uploads / * / var / www / uploader / deposits /
0 4 * * * rm-Rf / var / www / uploader / deposit / *

The first command crontab every minute checks the directory “upload”, print every file inside it and move all the contents in the directory “deposit”. The second deletes all files in the directory “deposit” at 4 each night.


TheJoe

I keep this blog as a hobby by 2009. I am passionate about graphic, technology, software Open Source. Among my articles will be easy to find music, and some personal thoughts, but I prefer the direct line of the blog mainly to technology. For more information contact me.

2 Comments

David · 22 November 2022 at 3:03 PM

Hello, Excuse me, I'm following the procedure but I can't find the uploader and upload folders where the files uploaded from the web page are saved. You can also indicate the folders to be created in the procedure ? thank you very much.
David

    TheJoe · 27 November 2022 at 5:35 AM

    OK, I integrated the article with the additions you suggested. Thank you very much!

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.