Java 如何合并包含PDF和图像的文档?

Java 如何合并包含PDF和图像的文档?,java,itext,Java,Itext,在我当前的代码中,我正在合并由PDF文件组成的文档 public static void appApplicantDownload(File file) { Connection con = getConnection(); Scanner sc = new Scanner(System.in); List < InputStream > list = new ArrayList < InputStream > (); try { OutputStream

在我当前的代码中,我正在合并由PDF文件组成的文档

public static void appApplicantDownload(File file) {

 Connection con = getConnection();
 Scanner sc = new Scanner(System.in);
 List < InputStream > list = new ArrayList < InputStream > ();
 try {
  OutputStream fOriginal = new FileOutputStream(file, true); // original

  list.add(new FileInputStream(file1));
  list.add(new FileInputStream(file2));
  list.add(new FileInputStream(file3));
  doMerge(list, fOriginal);

 } catch (Exception e) {

 }
}




public static void doMerge(List < InputStream > list, OutputStream outputStream) throws DocumentException, IOException {
 try {
  System.out.println("Merging...");
  Document document = new Document();
  PdfCopy copy = new PdfCopy(document, outputStream);
  document.open();

  for (InputStream in : list) {
   ByteArrayOutputStream b = new ByteArrayOutputStream();
   IOUtils.copy( in , b);
   PdfReader reader = new PdfReader(b.toByteArray());

   for (int i = 1; i <= reader.getNumberOfPages(); i++) {
    copy.addPage(copy.getImportedPage(reader, i));
   }
  }

  outputStream.flush();
  document.close();
  outputStream.close();
 } catch (Exception e) {
  e.printStackTrace();
 }
}
publicstaticvoid应用程序下载(文件){
Connection con=getConnection();
扫描仪sc=新的扫描仪(System.in);
ListList=newarraylist();
试一试{
OutputStream ForOriginal=新文件OutputStream(文件,true);//原始
添加(新文件输入流(文件1));
添加(新文件输入流(文件2));
添加(新文件输入流(文件3));
doMerge(列表,原版);
}捕获(例外e){
}
}
publicstaticvoiddomerge(ListList,OutputStream-OutputStream)抛出DocumentException,IOException{
试一试{
System.out.println(“合并…”);
文档=新文档();
PdfCopy copy=新的PdfCopy(文档、输出流);
document.open();
用于(输入流输入:列表){
ByteArrayOutputStream b=新的ByteArrayOutputStream();
副本(in,b);
PdfReader reader=新的PdfReader(b.toByteArray());

对于(int i=1;i在打开的PDF文档中创建一个新页面,并使用插入图像的功能将图像放置在该页面上。

在打开的PDF文档中创建一个新页面,并使用插入图像的功能将图像放置在该页面上。

首先,您必须知道该文件是PDF还是图像。最简单的方法是:y将使用文件的扩展名。因此,您将获得文件的扩展名,然后将此信息传递给您的
doMerge
方法。若要做到这一点,我将更改您当前的方法

public static void doMerge(List<InputStream> list, OutputStream outputStream)
在java中,您可以使用
ImageIO
轻松加载
图像

然后,要将图像添加到PDF中,请使用PdfWriter

PdfWriter pw = PdfWriter.GetInstance(doc, outputStream);
Image img = Image.GetInstance(inputStream);
doc.Add(img);
doc.NewPage();

如果您想在之前将图像转换为PDF并在之后合并,您也可以这样做,但您只需先使用PdfWriter将它们全部写入即可。

首先,您必须知道该文件是PDF还是图像。最简单的方法是使用文件的扩展名。因此,您必须获得文件的扩展名,然后通过i请向您的
doMerge
方法发送信息。若要做到这一点,我将更改您当前的方法

public static void doMerge(List<InputStream> list, OutputStream outputStream)
在java中,您可以使用
ImageIO
轻松加载
图像

然后,要将图像添加到PDF中,请使用PdfWriter

PdfWriter pw = PdfWriter.GetInstance(doc, outputStream);
Image img = Image.GetInstance(inputStream);
doc.Add(img);
doc.NewPage();

如果你想在之前将图像转换成PDF,然后在之后合并,你也可以这样做,但你只需要先使用PdfWriter编写它们。

如果代码应该合并PDF,你希望能够在混合中加入电子表格并使其工作吗?嗯,图像也是如此,PDF处理库正在抱怨你输入的不是PDF。是的,我知道,库没有问题,它需要PDF签名。我可以将图像转换为图像,再转换为PDF,然后合并。我想知道优雅的方法。如果代码应该合并PDF,你希望能够在混合中加入电子表格并使其工作吗?Welp,这是一样的对于图像,PDF处理库正在抱怨您输入的不是PDF。是的,我知道,库没有问题,它需要PDF签名。我可以将图像转换为图像,然后合并为PDF。我想知道优雅的方式。似乎我们不在同一页上。我可以找到哪个是图像,哪个是我想知道的是如何将图像转换为PDF,然后再将PDF转换回InputStream。我将使用策略模式来代替()但是,是的,大体上是相同的想法。你不能将图像转换为PDF,你可以将图像放入PDF页面。这与将JPG转换为GIF不同。@Piecuckherr添加了你要寻找的答案的一部分。似乎我们不在同一页面上。我可以找到哪个是图像,哪个是PDF。我想知道的是如何将图像转换为PDF,以及然后PDF返回到InputStream。我会改用策略模式(),但是的,大体上是相同的想法。你不能将图像转换为PDF,你可以将图像放入PDF页面。这与将JPG转换为GIF不同。@piechuckerr添加了你要找的部分答案。