summaryrefslogtreecommitdiff
path: root/modules/pdfrotate/pdfrotate.js
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2017-11-16 00:33:41 +0100
committertomsmeding <tom.smeding@gmail.com>2017-11-16 00:33:47 +0100
commitdbd9786a07e9c10cfe07db58f660fa186243b9a3 (patch)
treeb5e231bd999cbdde1432027561bfa59efe506f63 /modules/pdfrotate/pdfrotate.js
parent4ef74766662a8b57124cdc4b7a9fdafd686f0de2 (diff)
Add pdfrotate module
Diffstat (limited to 'modules/pdfrotate/pdfrotate.js')
-rw-r--r--modules/pdfrotate/pdfrotate.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/modules/pdfrotate/pdfrotate.js b/modules/pdfrotate/pdfrotate.js
new file mode 100644
index 0000000..a41241d
--- /dev/null
+++ b/modules/pdfrotate/pdfrotate.js
@@ -0,0 +1,106 @@
+var cmn=require("../$common.js"),
+ fs=require("fs"),
+ child_process=require("child_process"),
+ multer=require("multer"),
+ mkdirp=require("mkdirp");
+
+var moddir;
+
+var uniqid=(function(){
+ var id=0;
+ return function uniqid(){return id++;};
+})();
+
+function clearDirectory(path){
+ var entries=fs.readdirSync(path);
+ for(var i=0;i<entries.length;i++){
+ fs.unlinkSync(path+"/"+entries[i]);
+ }
+}
+
+function cleanUpDir(path){
+ var nowtime=new Date().getTime();
+ var entries=fs.readdirSync(path);
+ for(var i=0;i<entries.length;i++){
+ var stat=fs.statSync(path+"/"+entries[i]);
+ if(stat.mtime-nowtime>30*60*1000){
+ fs.unlink(path+"/"+entries[i],function(err){});
+ }
+ }
+}
+
+// Clear files older than 30 mins every 30 mins
+setInterval(function(){
+ process.nextTick(cleanUpDir(moddir+"/uploads"));
+ process.nextTick(cleanUpDir(moddir+"/converted"));
+},30*60*1000);
+
+module.exports=function(app,io,_moddir){
+ moddir=_moddir;
+
+ mkdirp.sync(moddir+"/uploads");
+ mkdirp.sync(moddir+"/converted");
+ clearDirectory(moddir+"/uploads");
+
+ var multerupload=multer({
+ storage: multer.diskStorage({
+ destination: function(req,file,cb){
+ cb(null,moddir+"/uploads/");
+ },
+ filename: function(req,file,cb){
+ cb(null,uniqid()+".pdf");
+ }
+ }),
+ limits: {
+ files: 1,
+ fileSize: 100*1024*1024
+ }
+ });
+
+ app.get("/pdfrotate",function(req,res){
+ res.sendFile(moddir+"/index.html");
+ });
+ app.post("/pdfrotate/upload",multerupload.single("file"),function(req,res){
+ if(!req.file){
+ res.sendFile(moddir+"/index.html");
+ return;
+ }
+ var origname=req.file.originalname;
+ var path=req.file.path;
+ var rot=req.body.rotgroup+"";
+ if(rot=="rot0"){
+ fs.unlink(path,function(err){});
+ res.redirect("/pdfrotate?err=rot0");
+ return;
+ }
+
+ var cmd;
+ switch(rot){
+ case "rot90": cmd="pdf90"; break;
+ case "rot180": cmd="pdf180"; break;
+ case "rot270": cmd="pdf270"; break;
+ default:
+ fs.unlink(path,function(err){});
+ res.redirect("/pdfrotate?err=invrot");
+ return;
+ }
+
+ var outfile=moddir+"/converted/"+uniqid()+".pdf";
+
+ child_process.execFile(cmd,[path,"-o",outfile],function(err,stdout,stderr){
+ if(err){
+ console.log(err);
+ res.redirect("/pdfrotate?err=pdfjamerr");
+ return;
+ }
+ var newname=origname.replace(/\.pdf$/,"_rotated.pdf");
+ res.download(outfile,newname,function(err){
+ fs.unlink(path,function(err){});
+ fs.unlink(outfile,function(err){});
+ });
+ });
+ });
+ app.get("/pdfrotate/upload",function(req,res){
+ res.redirect("/pdfrotate");
+ });
+};