2012-10-26 42 views
2

这是用于生成PDF的Java类。我正在使用iText来生成PDF。在使用itext进行pdf转换时遇到问题

public class pdfgen { 
public void createPdf(String inputFile, String outputFile, boolean isPictureFile)  

{  
    Rectangle pageSize = new Rectangle(2780, 2525);  
     Document pdfDoc = new Document(pageSize); 
     String pdfFilePath = outputFile;  
     try { 
      FileOutputStream fileOutputStream = new FileOutputStream(pdfFilePath); 
      PdfWriter writer = null;  
      writer = PdfWriter.getInstance(pdfDoc, fileOutputStream); 
      writer.open(); 
      pdfDoc.open(); 
      if (isPictureFile){ 
       pdfDoc.add(com.itextpdf.text.Image.getInstance(inputFile)); 
      } 
      else{ 
       URL url=new URL(inputFile); 
       URLConnection conn = url.openConnection(); 
       BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
       String line; while ((line = in.readLine()) !=null) { 
        System.out.println(line); 
       } 
       System.out.println(inputFile); 
       in.close(); 
       File file = new File(inputFile); 
       pdfDoc.add(new Paragraph(org.apache.commons.io.FileUtils.readFileToString(file))); 

      } 
      pdfDoc.close(); 
      writer.close(); 
     }catch(DocumentException e){ 
      System.err.println("The error has occured in the document"); 
     }catch(FileNotFoundException e){ 
      System.err.println("Your file is not found."); 
     } 
     catch(Exception e){ 
      System.err.println("Exception: "+e); 
     } 
} 

} 

这是我的JSP文件,在其中我打电话我上面的类

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@ page import="java.util.Vector" %> 
<%@page import="com.dalkin.pdfgen" %> 
<% Vector result=(Vector)request.getAttribute("val");%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Output </title> 
</head> 
<body> 

<%Vector names; %> 
<%if(arrcol.size()!=0){ %> 
      <div style="width:1024px;"> 
      <table cellpadding="5" cellspacing="5"> 

      <tr>     

      <td> 
      <%for(int q=0;q<result.size();q+=3){ %> 
      <div style="background:url(sample.gif) no-repeat; height:320px; width:500px; float:left;"> 
      <input type="text" size="50" value=<%=result.get(q) %>> 
      <input type="text" size="50" value= <%=result.get((q+1))%>>  
      <input type="text" size="50" value=<%=result.get((q+2))%>>    
      </div> 

      <%}} %>     
      </td> 
      </tr> 

</table> 
</div> 

<%pdfgen pf = new pdfgen(); 
pf.createPdf("http://localhost:8080/New/FirstServlet","D:\\first.pdf",false);%> 

</body> 
</html> 

当我跑我得到FileNotFoundException "http://localhost:8080/New/FirstServlet" Your file is not found. 谁能帮我的节目,我做错了什么?

回答

2

你打电话给你的PDF创建方法,这样

pf.createPdf("http://localhost:8080/New/FirstServlet","D:\\first.pdf",false); 

里面你使用的第一个参数(名为INPUTFILE),其方法是这样的:

File file = new File(inputFile); 

的“http://本地主机:8080 /新/ FirstServlet“是没有文件,所以

FileUtils.readFileToString(file) 

肯定会失败,你会得到例外。

在代码你

URL url=new URL(inputFile); 
URLConnection conn = url.openConnection(); 
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

,然后遍历使用行线之前= in.readLine()。而不是仅仅打印线,你可以附加一个行一些StringBuilder的,并使用内置的

pdfDoc.add(new Paragraph(...)); 
+0

你做的StringBuffer TEMP =空字符串;字符串行; while((line = in.readLine())!= null){temp.append(line); } ---所以你使用一个明确设置为null的StringBuffer。显然你会得到一个NPE。 – mkl

+0

同样的错误? FNF还是NPE?您目前的代码是什么?您可能需要相应地更新原始文章。如果您想要其他方法来实现您的目标,请正确描述您想要实现的目标。 – mkl

+0

所以你的工作流程是:1)有人调用你的JSP页面; 2)JSP页面建立一些表格(顺便说一句,你的arrcol似乎没有在任何地方定义过); 3)JSP页面触发你的createPdf方法来创建一些PDF, 4)createPdf连接到由FirstServlet表示的本地本地Web服务(在同一个Web容器中?在另一个Web容器中),5)该Web服务创建一些明确的文本响应,6)createPdf从该文本创建PDF并存储它本地和7)您的JSP页面返回一些HTML。流程的哪些部分是实际需求,哪些部分是任意实施选择? – mkl