2014-08-23 22:13:24 -04:00
< ? php
2014-08-25 14:44:37 -04:00
// MAIN CONFIGURATION
$page_title = " Scanimage Web GUI " ; // Name to be displayed on top of page as well as page title
2014-08-25 14:48:02 -04:00
$user_message = " 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. " ; // Text welcome message for user under title
2014-08-25 14:44:37 -04:00
// DIRECTORIES
$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 /
// FORMATS
$date_format = " Y-m-d_H.i.s " ; // Date format to use for file naming - in PHP date code format
// PROGRAM LOCATIONS
$scanimage = " /usr/bin/scanimage " ; // Absolute path to scanimage binary
$convert = " /usr/bin/convert " ; //Absolute path to scanimage binary
?>
< html >
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=UTF-8 " >
2014-08-25 14:46:48 -04:00
< title >< ? php echo $page_title ; ?> </title>
2014-08-25 14:44:37 -04:00
< 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 >
2014-08-25 14:55:07 -04:00
< div class = " pure-g " >
< div class = " pure-u-1 " >
< h1 >< ? php echo $page_title ; ?> </h1>
< p >< ? php echo $user_message ; ?> </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 " > 75 dpi ( FASTEST ! ) </ option >
< option value = " 300 " selected = " selected " > 300 dpi ( FAST ! ) </ option >
< option value = " 600 " > 600 dpi ( SLOW ! ) </ option >
< option value = " 1200 " > 1200 dpi ( 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 " />
</ div >
< div class = " pure-u-1 pure-u-md-1-3 " >
< 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 >
</ div >
< div class = " pure-u-1 pure-u-md-1-3 " >
< 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 >
< ? php
2014-08-25 14:38:53 -04:00
// initialize scanned files directory path
2014-08-25 13:57:36 -04:00
$scans_dir = $app_dir . $scan_dir ;
2014-08-25 14:38:53 -04:00
// append to filename if set, otherwise date only
2014-08-25 13:57:36 -04:00
if ( isset ( $_POST [ " filenaming " ])) {
$filename = date ( " Y-m-d_H.i.s " ) . " _ " . $filenaming ;
} else {
$filename = date ( " Y-m-d_H.i.s " );
}
2014-08-25 12:04:03 -04:00
2014-08-25 14:38:53 -04:00
// are we being called as a result of a scan or just initial page view?
2014-08-23 22:13:24 -04:00
if ( isset ( $_POST [ " scan " ])) {
2014-08-25 14:38:53 -04:00
$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 ( " $scanimage -d $_POST[device] --output-file $scans_dir $fileName -%04d --source $_POST[source] --mode " .
" $_POST[mode] --resolution $_POST[resolution] -l $_POST[l] -t $_POST[t] -x $_POST[x] -y $_POST[y] " , $descriptorspec , $pipes , $cwd , $env );
if ( is_resource ( $process )) {
$errors = stream_get_contents ( $pipes [ 2 ]);
$output = stream_get_contents ( $pipes [ 1 ]);
2014-08-23 22:13:24 -04:00
}
2014-08-25 14:38:53 -04:00
$dirList = scandir ( $scans_dir );
$inputFiles = array ();
$firstFile = " " ;
foreach ( $dirList as $file ) {
if ( stristr ( $file , $fileName )) {
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? " ;
}
2014-08-23 22:13:24 -04:00
ob_flush ();
echo " " ;
2014-08-25 14:38:53 -04:00
}
2014-08-23 22:13:24 -04:00
?>
2014-08-25 14:55:07 -04:00
< 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 " ));
2014-08-25 13:57:36 -04:00
foreach ( $phpfiles as $phpfile ) {
echo " <a target= \" _blank \" href= $phpfile > " . basename ( $phpfile ) . " </a><br /> " ;
}
2014-08-25 14:55:07 -04:00
?>
</ 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 " ));
2014-08-25 13:57:36 -04:00
foreach ( $phpfiles as $phpfile ) {
echo " <a target= \" _blank \" href= $phpfile > " . basename ( $phpfile ) . " </a><br /> " ;
}
2014-08-25 14:55:07 -04:00
?>
</ div >
</ body >
2014-08-23 22:13:24 -04:00
</ html >