【发布时间】:2013-11-03 17:53:22
【问题描述】:
我正在尝试从 FTP 服务器中的特定位置检索多个 pdf/tiff 文件,加入它们并将它们发送到要显示的 jsp 页面。到目前为止,这就是我所做的。
在动作类中, a)我尝试在名为 pdfbean 的 bean 中检索文件详细信息, b) 将 pdfbean 传递给建立 ftp 连接并从服务器检索文件的方法 c) 将其转换为 byte[] 并返回以添加到文档中。
现在此文档存储在 C:\ 中,这不是我想要的。我想把它发送到一个jsp页面。到现在,我不知道怎么发。
ArrayList<PdfBean> list = msgDH.getFileDtls(hawbString);
Document doc = new Document();
PdfWriter write = PdfWriter.getInstance(doc,
new FileOutputStream("c://Image.pdf"));
write.setPdfVersion(PdfWriter.PDF_VERSION_1_5);
doc.open();
for (PdfBean pdfBean : list)
{
byte[] Image2 = getfile(pdfBean);
Image img = Image.getInstance(Image2);
doc.add(img);
doc.newPage();
}
doc.close();
System.out.println("Done saving");
下面是 getfile() 方法
private byte[] getfile(PdfBean pdfBean)
{
byte[] result = null;
boolean test = false;
FTPClient ftp = new FTPClient();
DataSourceReader dsr = new DataSourceReader();
dsr.getFtpLinks();
String ftppassword = dsr.getFtppassword();
String ftpserver = dsr.getFtpserver();
String ftpusername = dsr.getFtpusername();
System.out.println("no" + ftpserver + ftpusername + ftppassword);
try
{
ftp.connect(ftpserver);
} catch (SocketException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
InputStream is = null;
BufferedInputStream bis = null;
try
{
boolean login = ftp.login(ftpusername, ftppassword);
} catch (IOException e1)
{
e1.printStackTrace();
}
try
{
int reply;
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
System.out.println("FTP server refused connection.");
} else
{
ftp.enterLocalPassiveMode();
FTPFile[] ftpFiles = ftp.listFiles(pdfBean.getFileLocation());
String fN = "";
int i = 0;
//tiff and pdf files reside in different folders.
if (pdfBean.getFileLocation().equals("/hold/TIF"))
{
String F = pdfBean.getFileName().replaceAll(".PDF", ".TIF");
for (FTPFile ftpFile : ftpFiles)
{
if (ftpFile.getName().equals(F))
{
fN = pdfBean.getFileLocation().concat("/")
.concat(F);
i = 1;
}
}
if (i == 0)
{
F = pdfBean.getFileName().replaceAll(".PDF", ".TIFF");
for (FTPFile ftpFile : ftpFiles)
{
if (ftpFile.getName().equals(F))
{
fN = pdfBean.getFileLocation().concat("/")
.concat(F);
i = 1;
}
}
}
} else
{
fN = pdfBean.getFileLocation().concat("/")
.concat(pdfBean.getFileName());
}
InputStream in = ftp.retrieveFileStream(fN);
BufferedInputStream inbf = new BufferedInputStream(in);
byte[] buffer = IOUtils.toByteArray(in);// new byte[1024];
result = buffer;
/*
* int readCount;
*
* int lenght = 0;
*
* while( (readCount = inbf.read(buffer)) > 0) { int preLength =
* lenght; lenght += readCount; byte temp[] = new
* byte[result.length]; result = new byte[lenght];
* System.arraycopy(temp,0,result,0,temp.length);
* System.arraycopy(buffer,0,result,preLength,readCount); }
*/
}
} catch (Exception ex)
{
System.out.println("Exception ----->" + ex.getMessage());
} finally
{
try
{
if (bis != null)
{
bis.close();
}
if (is != null)
{
is.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
try
{
ftp.logout();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
ftp.disconnect();
} catch (IOException e)
{
e.printStackTrace();
}
}
return result;
}
我得到一个 java.lang.NegativeArraySizeException 我哪里出错了。您是否预见到将 tif 和 pdf 作为图像添加到同一文档中的任何问题。最后,一旦我准备好文件,如何将它发送到 JSP 页面?
【问题讨论】:
-
1.哪一行给出异常? 2.“发送到jsp”是什么意思?
-
我在 byte[] buffer = IOUtils.toByteArray(in);当我说发送到 JSP 时,我希望合并的文件显示在 JSP 中。我在 C 盘中制作了一个临时文件,仅用于测试。
-
1.尝试使用
byte[] buffer = IOUtils.toByteArray(inbf);2. 我还是不明白jsp是怎么显示图片的,你是说IMG标签吗? -
我会将所有文件添加到文档中......然后我不知道该怎么做。还在摸索中。
-
我明白了。您不能将 pdf 显示为图像,您只能向用户提供生成的 pdf 文件,该文件可以在服务器的磁盘上或数据库中,因此您可以将生成的 pdf 放入某个 Web 可访问文件夹或通过 jsp 输出,如stackoverflow.com/questions/1133920/…