如何在java中将生成的pdf文件保存到mysql数据库中

时间:2013-11-14 06:22:53

标签: java mysql pdf

我有一个使用itext库生成pdf文件的java类。现在根据我的需要,我必须将生成的这个pdf文件保存到mysql数据库表中,但我不知道该怎么做..

我担心的是:......

1.我可以在pdf表的mysql列中给出什么数据类型来保存pdf文件..

2.哪个查询会将生成的pdf文件插入数据库..

目前我正在生成pdf文件并将其存储到本地磁盘的硬编码文件路径中。

这是我在java中的pdf生成代码...

OutputStream file = new FileOutputStream(new File("D://timer.pdf"));
        Document document = new Document();
        PdfWriter.getInstance(document, file);

        //Inserting Table in PDF
        PdfPTable table = new PdfPTable(3);

        PdfPCell cell = new PdfPCell(new Paragraph("Java4s.com"));

        cell.setColspan(3);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setPadding(10.0f);
        cell.setBackgroundColor(new BaseColor(140, 221, 8));

        table.addCell(cell);

        table.addCell("Name");
        table.addCell("Address");
        table.addCell("Country");
        table.addCell("Java4s");
        table.addCell("NC");
        table.addCell("United States");
        table.setSpacingBefore(30.0f);       // Space Before table starts, like margin-top in CSS
        table.setSpacingAfter(30.0f);        // Space After table starts, like margin-Bottom in CSS                                       

        //Inserting List in PDF
        List list = new List(true, 30);
        list.add(new ListItem("Java4s"));
        list.add(new ListItem("Php4s"));
        list.add(new ListItem("Some Thing..."));

        //Text formating in PDF
        Chunk chunk = new Chunk("Welecome To Java4s Programming Blog...");
        chunk.setUnderline(+1f, -2f);//1st co-ordinate is for line width,2nd is space between
        Chunk chunk1 = new Chunk("Php4s.com");
        chunk1.setUnderline(+4f, -8f);
        chunk1.setBackground(new BaseColor(17, 46, 193));

        //Now Insert Every Thing Into PDF Document
        document.open();//PDF document opened........                  
        document.add(Chunk.NEWLINE);   //Something like in HTML :-)
        document.add(new Paragraph("Dear Java4s.com"));
        document.add(new Paragraph("Document Generated On - " + newDate().toString()));
        document.add(table);
        document.add(list);            //In the new page we are going to add list
        document.close();

        file.close();

        System.out.println("Pdf created successfully..");

请帮帮我.. 提前谢谢......

1 个答案:

答案 0 :(得分:3)

  1. 您可以使用的数据类型是BLOB
  2. 转换PDF文件并在DB中保留byte []数组。

    private byte[] getByteArrayFromFile(final Document handledDocument) throws IOException {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final InputStream in = new FileInputStream(handledDocument);
    final byte[] buffer = new byte[500];
    int read = -1;
    while ((read = in.read(buffer)) > 0) {
        baos.write(buffer, 0, read);
    }
    in.close();
    return baos.toByteArray();
    }
    
  3. 将其插入数据库如果您使用任何ORM工具,您只需将列映射为blob,工具将为您处理。如果您没有使用它,那么您可以创建一个准备好的声明。 Statement有一个名为setBlob()的方法,它会很有用。请考虑以下示例,并使用blob列创建普通插入查询。

    String sql = "INSERT INTO testtable(stringcolumn, blobcolumn) VALUES(?,?)";
    PreparedStatement statement = conn.getConnection().prepareStatement(sql);
    statement.setLong(1, version);
    ByteArrayInputStream bais = new ByteArrayInputStream(getByteArrayFromFile(document));
    statement.setBlob(2, bais);          
    statement.execute();
    conn.commit();