2016-11-23 66 views
0

详情:当我点击一个URL时,它给了我一个需要转换为PDF的jsp页面。现在我正在使用Java组件中的ITextPDF来读取jsp并将其写为PDF。在没有使用ITextPDF的情况下,是否有任何替代过程?如何在MULE中将传入的JSP页面转换为PDF?

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)的文件。任何帮助赞赏!

回答

0

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

  1. 使用HTTP:请求指令调用JSP页面即可返回HTML。 实施例这里:Mule ESB : Read HTML

  2. 写变压器以变换text/html的消息给一个字节数组(或一些其他类型的),这将必须使用ITextPDF来完成。

  3. 将字节数组输出到文件。

你基本上正在做正确的步骤,但没有使用Mule平台的任何优势。当你用这种方法分离解决方案时,你将能够轻松地编写PDF文件,而不会得到任何奇怪的结果。

相关问题