合并服务器pdf文件,并用流输出直接显示
maven导入jar包
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.8</version>
</dependency>
工具类(url路径文件转输入流)
/**
* 根据网络地址获得数据的字节流
* @param urlStr 网络连接地址
* @return
*/
public static InputStream getInputStreamByUrl(String urlStr){
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3 * 1000);
InputStream is = conn.getInputStream();//通过输入流获取数据
return is;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
controller方法
/**
* 合并pdf
* @param bgbhs
* @param request
* @param response
* @throws Exception
*/
@RequestMapping("/pdfMerge")
public void pdfMerge(String bgbhs, HttpServletRequest request, HttpServletResponse response) throws Exception {
//pdf合并工具类
PDFMergerUtility mergePdf = new PDFMergerUtility();
//这是需要合并的PDF文件
String bgbh[] = bgbhs.split(",");
OutputStream out = response.getOutputStream();
InputStream in = null;
for (int i = 0; i < bgbh.length; i++) {
String path = "http://192.168.1.22:8001/zjxt/document/encrypt/" + bgbh[i] + ".pdf";
in = SimpleFileRwUtil.getInputStreamByUrl(path);
mergePdf.addSource(in);
}
//设置合并生成pdf文件
mergePdf.setDestinationStream(out);
//合并pdf
mergePdf.mergeDocuments(null);
InputStream is = request.getInputStream();
response.setContentType("application/pdf;charset=UTF-8");
byte[] b = new byte[1024];
int read;
try {
while ((read = is.read(b)) != -1) {
out.write(b, 0, read);
}
}catch (IOException e){
}finally {
in.close();
is.close();
out.flush();
out.close();
}
}