<?php
\documentclass[11pt]{article}
\usepackage{graphicx}
\usepackage{amsfonts}
\usepackage{latexsym}
\usepackage{listings}
\usepackage{pdfpages}
\usepackage[margin=0.8in]{geometry}
\usepackage{eso-pic}
\lstset{
% language=Python,
basicstyle=\tt,
showstringspaces=false,
numbers=left,
numberstyle=\scriptsize,
columns=fullflexible,
commentstyle=\rm,
stringstyle=\tt,
keywordstyle=\bf,
mathescape=false,
breaklines=true;
% texcl=true,
% stepnumber=2,
% numbersep=5pt,
}
\pagestyle{empty}
\begin{document}
');
define('tex_tail', '\end{document}');
\AddToShipoutPictureFG{%
\AtPageUpperLeft{%
\makebox[\paperwidth-1cm][r]{%
\raisebox{-\height-1cm}{%
\setlength{\fboxsep}{0pt}%
\colorbox{yellow}{\strut\enspace\thepage\enspace}%
}}}}
');
\section{%s}
\lstset{language=%s}
\lstinputlisting{%s}
\vspace{\baselineskip}
');
define('tex_pdf', '\includepdf[pages={%s}]{%s}\n');
define('tex_image', '\includepdf[%s]{%s}\n');
function render_code($name, $location) {
$code_exts = array('py' => 'Python',
'm' => 'Matlab',
'c' => 'C',
'h' => 'C',
'cpp' => 'C++',
'hpp' => 'C++',
'sh' => 'sh',
'htm' => 'HTML',
'html' => 'HTML',
'tex' => 'TeX',
'txt' => '');
return false;
}
return sprintf(tex_code
, $name, $code_exts[$ext], $location);
}
function render_txt($name, $location) {
return sprintf(tex_code
, $name, '', $location);
}
function render_pdf($name, $location) {
if ($ext != 'pdf') {
return false;
}
global $tmp_files;
$location .= '.pdf';
$tmp_files[] = $location;
$pages = '-';
if ($_POST['blank']) {
$image = new Imagick();
$image->pingImage($location);
if ($image->getNumberImages() % 2 == 1) {
$pages .= ',{}';
}
}
return sprintf(tex_pdf
, $pages, $location);
}
function render_image($name, $location) {
$image_exts = array('jpg', 'jpeg', 'png', 'tiff', 'tif');
return false;
}
global $tmp_files;
$location_image = $location.'.'.$ext;
$location_pdf = $location.'.pdf';
$tmp_files[] = $location_image;
$tmp_files[] = $location_pdf;
$options = 'fitpaper=true,width=8.5in';
// $options = ($size[0] > $size[1]) ? ',landscape=true' : '';
$image = new Imagick();
$image->readImage($location_image);
$image->writeImage($location_pdf);
return sprintf(tex_image
, $options, $location_pdf);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo 'Something is wrong. Here\'s the log:'."\n\n";
$tex = fopen($proj, 'w');
$tmp_files[] = $proj;
$tmp_files[] = $proj.'.pdf';
$tmp_files[] = $proj.'.log';
$tmp_files[] = $proj.'.aux';
if ($_POST['pagenumber']) {
}
$files = $_FILES['files'];
foreach ($files['error'] as $k => $error) {
if ($error != UPLOAD_ERR_OK) {
continue;
}
'{', '}', '$', '&', '#', '_', '%',
'^', '~', '\'', '`'),
array('\\textbackslash{}',
'\\{', '\\}', '\\$', '\\&', '\\#', '\\_', '\\%',
'\\^{}', '\\~{}', '\\\'{}', '\\`{}'),
$files['name'][$k]);
$tmp_name = $files['tmp_name'][$k];
($ret = render_code($name, $tmp_name))
or ($ret = render_pdf($name, $tmp_name))
or ($ret = render_image($name, $tmp_name))
or ($ret = render_txt($name, $tmp_name));
}
echo exec('/usr/bin/pdflatex'
.' -interaction=batchmode'
.' -output-directory='.dirname($proj)
.' '.$proj);
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename=codepdf_output.pdf');
//header('Content-Disposition: attachment; filename=codepdf_output.pdf');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$size);
} else {
header('Content-Type: text/plain');
}
foreach($tmp_files as $tmp) {
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CodePDF</title>
<script>
function files_add() {
var a = document.createElement("input");
var b = document.createElement("br");
a.type = "file";
a.name = "files[]";
a.multiple = true;
a.onchange = function() {
if (!a.isclicked) {
a.isclicked = true;
files_add();
}
};
document.getElementById("files").appendChild(a);
document.getElementById("files").appendChild(b);
}
</script>
<style type="text/css">
#box { border: 1px solid gray; }
h1 { display: inline; }
</style>
</head>
<body>
<h1>CodePDF</h1> A tool for joining images, PDFs and source code files together
<form method="post" enctype="multipart/form-data">
<div id="box">
<div id="files"></div>
<input type="button" value="Add more" onclick="files_add();"><br>
</div>
<input type="checkbox" name="blank">Append a blank page to PDF of odd pages.<br>
<input type="checkbox" name="pagenumber">Add page numbers.</br>
<input type="submit" value="Generate" />
</form>
</body>
<script>
files_add();
</script>
</html>