我的要求是使用HTTP Servlet将PDF数据响应到移动客户端(iPhone)。
我是按照以下方式做的,但我没有在客户端获得预期的输出。
PrintWriter out = response.getWriter();
String aInputFileName = "/Users/hcl/Desktop/Easwar/sample.pdf";
log("Reading in binary file named : " + aInputFileName);
File file = new File(aInputFileName);
log("File size: " + file.length());
byte[] result = new byte[(int)file.length()];
System.out.println("Length : "+ result.length);
try {
InputStream input = null;
try {
int totalBytesRead = 0;
input = new BufferedInputStream(new FileInputStream(file));
while(totalBytesRead < result.length){
int bytesRemaining = result.length - totalBytesRead;
//input.read() returns -1, 0, or more :
int bytesRead = input.read(result, totalBytesRead, bytesRemaining);
if (bytesRead > 0){
totalBytesRead = totalBytesRead + bytesRead;
}
}
response.setHeader("Content-Type", "application/pdf");
out.println(result);
我遵循的方法是正确的吗?请指教。
感谢。
答案 0 :(得分:5)
package com.javatpoint;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.darwinsys.spdf.PDF;
import com.darwinsys.spdf.Page;
import com.darwinsys.spdf.Text;
import com.darwinsys.spdf.MoveTo;
public class ServletPDF extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
response.setContentType("application/pdf");
response.setHeader("Content-disposition","inline; filename='javatpoint.pdf'");
PDF p = new PDF(out);
Page p1 = new Page(p);
p1.add(new MoveTo(p, 200, 700));
p1.add(new Text(p, "www.javatpoint.com"));
p1.add(new Text(p, "by Sonoo Jaiswal"));
p.add(p1);
p.setAuthor("Ian F. Darwin");
p.writePDF();
}
}
答案 1 :(得分:4)
您必须使用ServletOutputStream及其write()方法将字节写入响应。