Java 中HTTP响应数据生成PDF,PDF文件的读取

2025-11-05 13:35:44

1、Java 中如何将HTTP响应数据生成PDF?

首先选用的IText,导入相关的jar包,我当前用到的如截图所示

Java 中HTTP响应数据生成PDF,PDF文件的读取

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();  

Java 中HTTP响应数据生成PDF,PDF文件的读取

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

Java 中HTTP响应数据生成PDF,PDF文件的读取

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

Java 中HTTP响应数据生成PDF,PDF文件的读取

5、测试用例循环执行时候报错:

Error: java.io.FileNotFoundException:  请求的操作无法在使用用户映射区域打开的文件上执行,如图所示

Error: java.io.FileNotFoundException:

问题出在IO环节:流未关闭。

Java 中HTTP响应数据生成PDF,PDF文件的读取

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢