package com.syzton.sunread.controller.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
* Created by jerry on 5/3/15.
*/
@Controller
public class HtmlToPDF {
@RequestMapping(value = "/html2pdf",method = RequestMethod.GET)
protected void processRequest(@RequestParam("url") String url,HttpServletRequest request, HttpServletResponse response)
throws Exception {
try {
IOUtils.copy(generationPdfDzOrder(url, request.getSession().getServletContext().getRealPath("/")), response.getOutputStream());
TimeUnit.SECONDS.sleep(2);
}catch (Exception e){
System.out.print(e.toString());
}finally {
response.getOutputStream().close();
}
}
public InputStream generationPdfDzOrder(String url,String root) throws Exception{
String tmpFileName = UUID.randomUUID().toString(); //生成随机文件名
String pdfFileName = root + tmpFileName + ".pdf" ;
File pdfFile = new File(pdfFileName); //pdf文件
String command = getCommand(url , pdfFileName);
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
TimeUnit.SECONDS.sleep(1);
InputStream inputStream = new FileInputStream(pdfFile);
pdfFile.delete();
return inputStream;
}
public String getCommand(String htmlName , String pdfName){
return "wkhtmltopdf --javascript-delay 1000 " + htmlName + " " + pdfName;
}
}