Java 中HTTP响应数据生成PDF,PDF文件的读取
1、Java 中如何将HTTP响应数据生成PDF?
首先选用的IText,导入相关的jar包,我当前用到的如截图所示

2、将HTTP响应数据生成PDF,这一步的话,就比较坑,浪费了好多时间,查了很多资料,也是我想把它记录下来的主要原因,
废话少说,先说踩的坑
1.区分字符流、字节流
这里可以百度一下,但是简言之就是:
java中提供了专用于输入输出功能的包Java.io,其中包括: InputStream,OutputStream,Reader,Writer InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象, Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串.
所以,PDF 必须要用字节流来处理
2.根据响应确定生成的文件pdf
connection.getContentType()=application/pdf 即导出为pdf文件
3.数据流的处理
//FilePath=FilePath+".pdf";
//File f =new File(FilePath);
//OutputStream out = new BufferedOutputStream(new FileOutputStream(f));
// java.io.InputStream is = new BufferedInputStream(connection.getInputStream());
//
// byte[] flash = new byte[2048];
// int len;
// while((len=is.read(flash))>0){
// //System.out.println(new String(flash));
// out.write(flash, 0, flash.length);
// }
// out.flush();
上述方法,用以上方法后,发现导出报表很不稳定,总数报错,或者数据丢失的现象,截图所示,因此上述方法不可取
之后咨询开发,对代码进行了优化,代码贴出来
用到了ByteArrayOutputStream和iText生成PDF文档类
FilePath=FilePath+".pdf";
File f =new File(FilePath);
FileOutputStream fo = new FileOutputStream(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i;(i=connection.getInputStream().read())!=-1;){
baos.write(i);
}
baos.flush();
Document doc = new Document();
PdfStream pdfStream=new PdfStream(baos.toByteArray());
PdfWriter pw =null;
try {
pw = PdfWriter.getInstance(doc, fo);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pdfStream.toPdf(pw,fo);
pw.flush();
baos.close();
pw.close();
fo.close();
4.PDF文件的读取
也是从网上找的,两种方法都可以用,代码如下:
public static String getPdfFileText(String fileName) throws IOException {
PdfReader reader = new PdfReader(fileName);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
StringBuffer buff = new StringBuffer();
TextExtractionStrategy strategy;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
//strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
//buff.append(strategy.getResultantText());
buff.append(PdfTextExtractor.getTextFromPage(reader, i));
//System.out.println("编号:"+i+" "+PdfTextExtractor.getTextFromPage(reader, i));
}
return buff.toString();
}

3、URL请求传入参数,包含中文时出现乱码,我生成的PDF也是乱码,如图。。已解决:需要进行百分号编码和解码

4、读取PDF时,按行读到的txt,源PDF的样式都丢失了,表格类的数据无法精确获取,如图。。。这个问题未解决

5、测试用例循环执行时候报错:
Error: java.io.FileNotFoundException: 请求的操作无法在使用用户映射区域打开的文件上执行,如图所示
Error: java.io.FileNotFoundException:
问题出在IO环节:流未关闭。
