ScanImageWebGUI/index.php

195 lines
7.2 KiB
PHP

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Scanimage Web GUI</title>
<link rel="stylesheet" href="pure/pure-min.css">
<link rel="stylesheet" href="pure/grids-responsive.css">
<link rel="stylesheet" href="pure/base-min.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<?php
// Configuration
$app_dir = "/var/www/scan/"; // Absolute path to where this app directory is - must end with a /
$scan_dir = "scans/"; // Relative path inside application directory that holds the scans - must end with a /
// Don't touch below!
$scans_dir = $app_dir . $scan_dir;
if (isset($_POST["filenaming"])) {
$filename = date("Y-m-d_H.i.s")."_".$filenaming;
} else {
$filename = date("Y-m-d_H.i.s");
}
if (isset($_POST["scan"])) {
$findScanner = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a file to write to
);
$env=array();
$process = proc_open("/usr/bin/sane-find-scanner", $findScanner, $pipes, '/tmp', $env);
if (is_resource($process)) {
$data = stream_get_contents($pipes[2]);
$data .= stream_get_contents($pipes[1]);
}
proc_close($process);
$match = preg_match('/libusb:\d+:\d+/', $data, $matches);
if ($match&&count($matches)) {
$address=$matches[0];
}
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a file to write to
);
$cwd = '/tmp';
$env = array();
$process = proc_open("/usr/bin/scanimage -d $device --output-file ".
"$scans_dir . $fileName-%04d --quick-format Letter".
" --mode $_POST[mode] --resolution $_POST[quality] --source Automatic Document Feeder", $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
$errors = stream_get_contents($pipes[2]);
$output = stream_get_contents($pipes[1]);
}
$dirList = scandir($scans_dir);
$inputFiles = array();
$firstFile = "";
foreach ($dirList as $file) {
if (stristr($file, $fileName)) {
//this is one of our input files
if ($firstFile=="") $firstFile = $file;
array_push($inputFiles, $file);
}
}
if (count($inputFiles))
{
$path="";
foreach ($inputFiles as $file) {
$path .= "pnm:" . $scans_dir . $file;
}
$output = `/usr/bin/convert pnm:$scans_dir$firstFile -resize '>300x' -strip $scans_dir$firstFile.jpg`;
$output .= `/usr/bin/convert -page a4 $path $scans_dir$fileName.pdf`;
echo "Scan Successful!";
} else {
echo "Scan Failed! No pages were scanned. Is there a document in the scanner?";
}
ob_flush();
echo "";
}
?>
<div class="pure-g">
<div class="pure-u-1">
<h1>Scanner Web GUI</h1>
<p>Use the drop-downs below to set preferences. Load documents in the feeder and press "Scan". When the job completes, you will be able to pick your file from the selection at the bottom of the page.</p>
</div>
</div>
<form class="pure-form pure-form-aligned" action="index.php" method="post">
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-3">
<fieldset>
<div class="pure-control-group">
<legend><h3>Device Setup</h3></legend>
<label for="device">Device</label>
<select id="device" class="pure-input-rounded">
<option value="epkowa:net:pr01.lzu01.point808.com" selected="selected">pr01 (Epson WF-2540)</option>
<option value="hpaio:/net/Deskjet_F4500_series?ip=192.168.101.222">pr02 (HP DeskJet F4580)</option>
</select>
</div>
<div class="pure-control-group">
<label for="source">Feed Source</label>
<select id="source" class="pure-input-rounded">
<option value="Automatic Document Feeder" selected="selected">Automatic Document Feeder</option>
<option value="Flatbed">Flatbed</option>
</select>
</div>
<div class="pure-control-group">
<label for="mode">Colors</label>
<select id="mode" class="pure-input-rounded">
<option value="Binary">Black & White</option>
<option value="Gray" selected="selected">Grayscale</option>
<option value="Color">Color</option>
</select>
</div>
<div class="pure-control-group">
<label for="resolution">Resolution</label>
<select id="resolution" class="pure-input-rounded">
<option value="75">75dpi (FASTEST!)</option>
<option value="300" selected="selected">300dpi (FAST!)</option>
<option value="600">600dpi (SLOW!)</option>
<option value="1200">1200dpi (SLOWEST!)</option>
</select>
</div>
<input type="hidden" name="scan" value="yes" />
<input type="submit" onclick="this.disabled=true;this.value='Scanning - PLEASE be patient!';this.form.submit();" value="Scan!" class="pure-button pure-button-primary" />
</fieldset>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<fieldset>
<div class="pure-control-group">
<legend><h3>File Options</h3></legend>
<label for="filetype">File Type</label>
<select id="filetype" class="pure-input-rounded">
<option value="pdf" selected="selected">PDF (multipage)</option>
<option value="jpg">JPG (image)</option>
</select>
</div>
<div class="pure-control-group">
<label for="filenaming">File Naming</label>
<input id="filenaming" class="pure-input-rounded" placeholder="Append to filename">
</div>
</fieldset>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<fieldset>
<div class="pure-control-group">
<legend><h3>Page Size</h3></legend>
<label for="l">X-Start (top-left, mm)</label>
<input type="number" id="l" class="pure-input-rounded" value="0">
</div>
<div class="pure-control-group">
<label for="t">Y-Start (top-left, mm)</label>
<input type="number" id="t" class="pure-input-rounded" value="0">
</div>
<div class="pure-control-group">
<label for="x">Width (mm)</label>
<input type="number" id="x" class="pure-input-rounded" value="215.9">
</div>
<div class="pure-control-group">
<label for="y">Height (mm)</label>
<input type="number" id="y" class="pure-input-rounded" value="279">
</div>
</fieldset>
</div>
</div>
</form>
<div class="pure-g">
<div class="pure-u-1 pure-u-md-1-2">
<h2>Previous Document Scans (PDF)</h2>
<?php
$phpfiles = array_reverse(glob($scan_dir . "*.pdf"));
foreach($phpfiles as $phpfile) {
echo "<a target=\"_blank\" href=$phpfile>".basename($phpfile)."</a><br />";
}
?>
</div>
<div class="pure-u-1 pure-u-md-1-2">
<h2>Previous Image Scans (JPG)</h2>
<?php
$phpfiles = array_reverse(glob($scan_dir . "*.jpg"));
foreach($phpfiles as $phpfile) {
echo "<a target=\"_blank\" href=$phpfile>".basename($phpfile)."</a><br />";
}
?>
</div>
</body>
</html>