Java 如何在一个窗口中打开3个不同的PDF报告?
我正在用servlet生成3个不同的PDF报告。JSP中有3个复选框。如果我点击所有3个复选框,PDF报告将通过JavaScript在3个窗口中打开。但我希望它们能在一个窗口打开。我该怎么做Java 如何在一个窗口中打开3个不同的PDF报告?,java,javascript,pdf,servlets,itext,Java,Javascript,Pdf,Servlets,Itext,我正在用servlet生成3个不同的PDF报告。JSP中有3个复选框。如果我点击所有3个复选框,PDF报告将通过JavaScript在3个窗口中打开。但我希望它们能在一个窗口打开。我该怎么做 for (i = 0; i < document.myform.FORMTYPE.length; i++) { if (document.myform.FORMTYPE[i].checked) { window.open('PDF_CNTRL_SERVLETS?FORMTYPE
for (i = 0; i < document.myform.FORMTYPE.length; i++) {
if (document.myform.FORMTYPE[i].checked) {
window.open('PDF_CNTRL_SERVLETS?FORMTYPE=' + document.myform.FORMTYPE[i].value + '&UNIQUEID1=' + CCNID + '&UNIQUEID2=' + arrestID);
}
}
下面是JavaScript:
for (i = 0; i < document.myform.FORMTYPE.length; i++) {
if (document.myform.FORMTYPE[i].checked) {
window.open('PDF_CNTRL_SERVLETS?FORMTYPE=' + document.myform.FORMTYPE[i].value + '&UNIQUEID1=' + CCNID + '&UNIQUEID2=' + arrestID);
}
}
for(i=0;i
您需要在单个查询字符串中收集选中的值,然后只打开一个窗口
for (i = 0; i < document.myform.FORMTYPE.length; i++) {
if (document.myform.FORMTYPE[i].checked) {
window.open('PDF_CNTRL_SERVLETS?FORMTYPE=' + document.myform.FORMTYPE[i].value + '&UNIQUEID1=' + CCNID + '&UNIQUEID2=' + arrestID);
}
}
var formtypes=[];
对于(i=0;i
在servlet中,您可以通过
for (i = 0; i < document.myform.FORMTYPE.length; i++) {
if (document.myform.FORMTYPE[i].checked) {
window.open('PDF_CNTRL_SERVLETS?FORMTYPE=' + document.myform.FORMTYPE[i].value + '&UNIQUEID1=' + CCNID + '&UNIQUEID2=' + arrestID);
}
}
String[]formtypes=request.getParameterValues(“FORMTYPE”);
// ...
然后您可以让iText合并并将这3个报告输出到一个响应中。以下是我编写的一些代码,用于合并PDF。
for (i = 0; i < document.myform.FORMTYPE.length; i++) {
if (document.myform.FORMTYPE[i].checked) {
window.open('PDF_CNTRL_SERVLETS?FORMTYPE=' + document.myform.FORMTYPE[i].value + '&UNIQUEID1=' + CCNID + '&UNIQUEID2=' + arrestID);
}
}
只需将服务器上的PDF加载到Streams或byte[]中,并调用下面的正确方法。代码在服务器上运行,只需将其加载到新窗口或框架中
for (i = 0; i < document.myform.FORMTYPE.length; i++) {
if (document.myform.FORMTYPE[i].checked) {
window.open('PDF_CNTRL_SERVLETS?FORMTYPE=' + document.myform.FORMTYPE[i].value + '&UNIQUEID1=' + CCNID + '&UNIQUEID2=' + arrestID);
}
}
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.util.PDFMergerUtility;
public class PDFMerger
{
/**
* Given a List of byte[] which contain the PDFs will return a new PDF
* with the input PDFs appended one after the other
* @param inputData
* @return
* @throws IOException
*/
public static byte[] mergePDFData(List<byte[]> inputData) throws IOException
{
byte[] retData = new byte[0];
if(inputData != null && !inputData.isEmpty())
{
List<InputStream> inputs = new ArrayList<InputStream>();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
for(byte[] tmp : inputData)
{
if(tmp != null && tmp.length > 0)
{
ByteArrayInputStream bis = new ByteArrayInputStream(tmp);
inputs.add(bis);
}
}
mergePDFStreams(bos,inputs);
retData = bos.toByteArray();
}
finally
{
// close the streams
if(bos != null) bos.close();
if(inputs != null && inputs.size() > 0)
{
for(InputStream is : inputs)
{
if(is != null) is.close();
}
}
}
}
return retData;
}
/**
* Given a List of InputStreams containing PDFs will concatenate the PDFs to
* the output stream
* @param oStream
* @param inputStreams
* @throws IOException
*/
public static void mergePDFStreams(OutputStream oStream, List<InputStream> inputStreams ) throws IOException
{
if(oStream != null && inputStreams != null && !inputStreams.isEmpty())
{
PDFMergerUtility mergerUtility = new PDFMergerUtility();
mergerUtility.addSources(inputStreams);
mergerUtility.setDestinationStream(oStream);
try
{
mergerUtility.mergeDocuments();
}
catch(COSVisitorException cosve)
{
throw new IOException(cosve);
}
}
}
}
import java.io.ByteArrayInputStream;
导入java.io.ByteArrayOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.pdfbox.exceptions.COSVisitorException;
导入org.apache.pdfbox.util.PDFMergerUtility;
公共类PDFMerger
{
/**
*给定包含PDF的字节[]列表将返回一个新的PDF
*一个接一个地追加输入PDF
*@param inputData
*@返回
*@抛出异常
*/
公共静态字节[]合并PDFDATA(列表输入数据)引发IOException
{
字节[]retData=新字节[0];
if(inputData!=null&&!inputData.isEmpty())
{
列表输入=新的ArrayList();
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
尝试
{
for(字节[]tmp:inputData)
{
如果(tmp!=null&&tmp.length>0)
{
ByteArrayInputStream bis=新的ByteArrayInputStream(tmp);
投入。增加(之二);
}
}
合并PDF流(bos、输入);
retData=bos.toByteArray();
}
最后
{
//关闭溪流
如果(bos!=null)bos.close();
if(inputs!=null&&inputs.size()>0)
{
for(输入流为:输入)
{
如果(is!=null)是.close();
}
}
}
}
返回数据;
}
/**
*给定包含PDF的输入流列表,将PDF连接到
*输出流
*@param oStream
*@param输入流
*@抛出异常
*/
公共静态void mergePDFStreams(OutputStream-oStream,List-inputStreams)引发IOException
{
if(oStream!=null&&inputStreams!=null&&inputStreams.isEmpty())
{
PDFMergerUtility mergerUtility=新的PDFMergerUtility();
合并性。添加源(输入流);
合并性。设定目的流(oStream);
尝试
{
mergerUtility.mergeDocuments();
}
捕获(COSVisitorException cosve)
{
抛出新IOException(cosve);
}
}
}
}
您希望如何在一个窗口中显示3个PDF?用三个HTML
还是什么?或者你想把它们合并到一个单独的PDF文档中吗?我想在按下按钮时合并到一个单独的PDF文档中,我们有openi有java类,我用PDF绑定数据并生成PDF,然后我调用servlet,在servlet中检查值为checkbox的servlet,PDF将执行JSP中选中的复选框,所以它的过程我在做什么