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
2014-08-25 21:44:59 -04:00
$scanimage = " /usr/bin/scanimage " ; //Absolute path to scanimage binary
$scanadf = " /usr/bin/scanadf " ; // Absolute path to scanadf binary
2014-08-25 14:44:37 -04:00
$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 >
2014-08-25 21:44:59 -04:00
< select name = " device " id = " device " class = " pure-input-rounded " >
2014-08-25 14:55:07 -04:00
< 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 >
2014-08-25 21:44:59 -04:00
< select name = " source " id = " source " class = " pure-input-rounded " >
2014-08-25 14:55:07 -04:00
< 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 >
2014-08-25 21:44:59 -04:00
< select name = " mode " id = " mode " class = " pure-input-rounded " >
2014-08-25 14:55:07 -04:00
< 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 " >
2014-08-25 21:44:59 -04:00
< label for = " sResolution " > Resolution </ label >
< select name = " sResolution " id = " sResolution " class = " pure-input-rounded " >
< option value = " 75 " selected = " selected " > 75 dpi ( FASTEST ! ) </ option >
< option value = " 300 " > 300 dpi </ option >
2014-08-25 14:55:07 -04:00
< option value = " 600 " > 600 dpi ( SLOW ! ) </ 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 >
2014-08-25 21:44:59 -04:00
< select name = " filetype " id = " filetype " class = " pure-input-rounded " >
2014-08-25 14:55:07 -04:00
< 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 >
2014-08-25 21:44:59 -04:00
< input name = " filenaming " type = " text " id = " filenaming " class = " pure-input-rounded " placeholder = " Append to filename " >
2014-08-25 14:55:07 -04:00
</ div >
</ div >
< div class = " pure-u-1 pure-u-md-1-3 " >
< div class = " pure-control-group " >
2014-08-25 21:44:59 -04:00
< legend >< h3 > Page Size ( in mm ) </ h3 ></ legend >
< label for = " l " > X - Start ( top - left ) </ label >
< input name = " l " type = " number " id = " l " class = " pure-input-rounded " value = " 0 " >
2014-08-25 14:55:07 -04:00
</ div >
< div class = " pure-control-group " >
2014-08-25 21:44:59 -04:00
< label for = " t " > Y - Start ( top - left ) </ label >
< input name = " t " type = " number " id = " t " class = " pure-input-rounded " value = " 0 " >
2014-08-25 14:55:07 -04:00
</ div >
< div class = " pure-control-group " >
2014-08-25 21:44:59 -04:00
< label for = " sX " > Width ( 215.9 = 8.5 in ) </ label >
< input name = " sX " type = " number " id = " sX " class = " pure-input-rounded " value = " 215.9 " >
2014-08-25 14:55:07 -04:00
</ div >
< div class = " pure-control-group " >
2014-08-25 21:44:59 -04:00
< label for = " y " > Height ( 279 = 11 in ) </ label >
< input name = " y " type = " number " id = " y " class = " pure-input-rounded " value = " 279 " >
2014-08-25 14:55:07 -04:00
</ div >
</ fieldset >
</ div >
</ div >
</ form >
2014-08-25 14:57:20 -04:00
< ? 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 21:44:59 -04:00
// set post variables
if ( isset ( $_POST [ 'sResolution' ])) { $pResolution = $_POST [ 'sResolution' ]; };
if ( isset ( $_POST [ 'sX' ])) { $pX = $_POST [ 'sX' ]; };
// decide to use scanimage if Flatbed or scanadf if ADF
if ( isset ( $_POST [ 'source' ])) {
if ( $_POST [ 'source' ] == " Flatbed " ) {
$scanprog = $scanimage ;
} else {
$scanprog = $scanadf ;
}
2014-08-25 13:57:36 -04:00
} else {
2014-08-25 21:44:59 -04:00
$scanprog = $scanimage ;
2014-08-25 13:57:36 -04:00
}
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-25 21:44:59 -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 ();
2014-08-25 21:44:59 -04:00
// append to filename if set, otherwise date only
if ( isset ( $_POST [ 'filenaming' ])) {
if ( empty ( $_POST [ 'filenaming' ])) {
$filename = date ( $date_format );
} else {
$filename = date ( $date_format ) . " _ " . $_POST [ 'filenaming' ];
}
} else {
$filename = date ( $date_format );
}
// do it!
$process = proc_open ( $scanprog . " -d " . $_POST [ 'device' ] . " --output-file " . $scans_dir . $filename . " -%04d --source " . $_POST [ 'source' ] . " --mode " . $_POST [ 'mode' ] . " --resolution " . $sResolution . " -l " . $_POST [ 'l' ] . " -t " . $_POST [ 't' ] . " -x " . $sX . " -y " . $_POST [ 'y' ], $descriptorspec , $pipes , $cwd , $env );
2014-08-25 14:38:53 -04:00
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 ) {
2014-08-25 21:44:59 -04:00
if ( stristr ( $file , $filename )) {
2014-08-25 14:38:53 -04:00
if ( $firstFile == " " ) $firstFile = $file ;
array_push ( $inputFiles , $file );
}
}
if ( count ( $inputFiles )) {
$path = " " ;
foreach ( $inputFiles as $file ) {
$path .= " pnm: " . $scans_dir . $file ;
}
2014-08-25 21:44:59 -04:00
//exec($convert . " pnm:" . $scans_dir . $firstFile . " -strip " . $scans_dir . $firstFile . ".jpg");
// make a (multi-page) pdf file from the scanned pnm files
// we have to set density to match the scan resolution and then calculate the width to pixels in order to make the pdf correct
exec ( $convert . ' -density ' . $sResolution . ' -page ' . $sX . ' ' . $path . ' ' . $scans_dir . $filename . '.pdf' );
// $output = $convert . " pnm:" . $scans_dir . $firstFile . " -strip " . $scans_dir . $firstFile . ".jpg";
// $output .= ($convert . " " . $path . " " . $scans_dir . $filename . ".pdf");
2014-08-25 14:38:53 -04:00
echo " Scan Successful! " ;
2014-08-25 21:44:59 -04:00
2014-08-25 14:38:53 -04:00
} 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:57:20 -04:00
2014-08-25 21:44:59 -04:00
}
?>
2014-08-25 14:57:20 -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 " ));
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 >
2014-08-25 14:55:07 -04:00
</ div >
</ body >
2014-08-23 22:13:24 -04:00
</ html >