获取一个zip文件作为PDF文件并将其拆分为图像

时间:2014-04-03 12:55:46

标签: java pdf zip bytearray

我有一个包含pdf文件的文件zip,所以:

  1. 解压缩 zip文件
  2. 我得到了zip条目(pdf文件)
  3. 我将每个文件( zip条目)保存为数组 字节
  4. 这是执行此操作的代码:

    FileInputStream fis = new FileInputStream("C:\\Users\\manu\\Documents\\zipFile.zip");
        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));//decompression
    
        ZipEntry entry;
    
        //int i=0
        while((entry = zis.getNextEntry()) != null) {
    
            //check if the file is a directory 
            if(!entry.isDirectory()){
    
                    println(entry.getName());
                    ByteArrayOutputStream output = new ByteArrayOutputStream();
                    int data = 0;
                    while( ( data = zis.read() ) != - 1 )
                        {
                        output.write( data );
                        }
    
                        byte[] b  = output.toByteArray();
    
                        //--------------------save in database table invoice the document
    
                        byte[] pdf=b
                        String PDFName=entry.getName() 
    
    
                        def fact= new Fact( pdf:valpdf ,PDFName: PDFName)
                        fact.save()
                        //----------------------------------save in table Fact the document
                        // The ZipEntry is extracted in the output
                        println("saved successfully")
    
                        output.close();
               }
    
        }
        zis.close();
        fis.close();
    

    问题是:我必须将PDF文件(zip条目)拆分为图像,并将它们作为数组字节保存在另一个数据库表中,这是我找到的代码

     FileOutputStream fileOuputStream = 
                  new FileOutputStream("C:\\testing.pdf"); 
        fileOuputStream.write(b);
        fileOuputStream.close();
    

    有没有办法在不创建物理文件的情况下执行此操作

1 个答案:

答案 0 :(得分:0)

我不确定你的数据库是什么,以及Fact的对象是什么。

如果要将pdf文件存储到数据库中,

  1. 将pdf文件(zip条目)转换为字节
  2. 在数据库中创建blob列
  3. 将值插入blob列。
  4. 注意**,您不需要创建物理文件

    参考:https://stackoverflow.com/a/19971334/2182351 -

    String sql = "INSERT INTO testtable(stringcolumn, blobcolumn) VALUES(?,?)";
               PreparedStatement statement = conn.getConnection().prepareStatement(sql);
               statement.setLong(1, version);
               ByteArrayInputStream bais = new ByteArrayInputStream(b); // Here b is byte array from your sample code
               statement.setBlob(2, bais);          
               statement.execute();
               conn.commit();