如何在MULE中将传入的JSP页面转换为PDF?

时间:2016-11-23 05:33:27

标签: mule itext mule-studio mule-component

详细信息:当我点击URL时,它会给我一个jsp页面,需要将其转换为PDF。现在我在java组件中使用ITextPDF来读取jsp并将其写为PDF。如果不使用ITextPDF,是否在mule中有任何替代过程。

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;
import org.mule.api.transport.PropertyScope;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
public class PDFConversion implements Callable {

 private final String USER_AGENT = "Mozilla/5.0";
 StringBuffer response = new StringBuffer();
 ByteArrayOutputStream bos;
 byte[] result;
 @Override
 public Object onCall(MuleEventContext eventContext) throws Exception {
     try {

       String productid="";
       String vertical="";
       String postcode="";
       String metertype="";
       String includeSolar="";
       productid=eventContext.getMessage().getInvocationProperty("productId");
       vertical=eventContext.getMessage().getInvocationProperty("vertical");
       postcode=eventContext.getMessage().getInvocationProperty("postcode");
       metertype=eventContext.getMessage().getInvocationProperty("metertype");
       includeSolar=eventContext.getMessage().getInvocationProperty("includeSolar");



         String url = "http://191.111.0.111:****/PDFService/electricitypdf?productid="+productid+"&vertical="+vertical+"&postcode="+postcode+"&metertype="+"&includeSolar="+includeSolar;
         System.out.println(" URL -Request-----"+url);
         URL obj = new URL(url);
         HttpURLConnection con = (HttpURLConnection) obj.openConnection();
         // optional default is GET
         con.setRequestMethod("GET");
         // add request header
         con.setRequestProperty("User-Agent", USER_AGENT);
         int responseCode = con.getResponseCode();
         System.out.println("\nSending 'GET' request to URL : " + url);
         System.out.println("Response Code : " + responseCode);
         BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
         String inputLine;
         bos = new ByteArrayOutputStream();
         int next = in.read();
         while (next > -1) {
             bos.write(next);
             next = in.read();
         }
         bos.flush();

/ ByteArrayOutputStream buffer = new ByteArrayOutputStream(); byte[] bytes = IOUtils.toByteArray(in); while ((inputLine = in.readLine()) != null) { response.append(inputLine); }/ in.close();

     } catch (Exception e) {
         e.printStackTrace();
     }

     Document document = new Document(PageSize.LETTER, 0.75F, 0.75F, 0.75F, 0.75F);
     document.setPageSize(PageSize.LETTER.rotate());
     // PdfWriter.setPageEvent(new HeaderFooter(mmPDFDocument.right() -
     // mmPDFDocument.left(), footer, path, headerType, unicodeFont));

     PdfWriter.getInstance(document, bos);

     document.open();

     int numberpages=10;
     for (int i = 1; i <= numberpages; i++) 
     {    
                     document.add(new Chunk("Hello PDF Service - Page "+i)); 
                     document.newPage();    
     }        
     FileOutputStream fos= new FileOutputStream("energy.pdf");
     fos.write(bos.toByteArray());
     fos.close();
     document.close();

     return bos;
 }
}

尽管写了这个,但是浏览器无法以PDF形式显示内容我可以看到正在编写PDF文件,当URL被点击时,它会生成一个没有类型的文件(不是pdf)。任何帮助赞赏!!

1 个答案:

答案 0 :(得分:0)

您的解决方案基本上是在Mule ESB上运行的标准Java应用程序。 Mule用于基于消息的通信和转换。如果你想把你的解决方案变成一个完整的“骡子解决方案”,我建议....

  1. 使用http:request指令调用jsp页面返回html。  示例:Mule ESB : Read HTML

  2. 编写一个转换器,将text / html消息转换为字节数组(或其他类型),这必须使用ITextPDF完成。

  3. 将字节数组输出到文件。
  4. 您基本上正在执行正确的步骤但不使用Mule平台的任何优势。当您以这种方式分离解决方案时,您将能够轻松编写pdf文件,而不会得到任何奇怪的结果。