当前位置: 首页 > 面试题库 >

如何使用Java将生成的PDF文件保存到MySQL数据库?

段干博明
2023-03-14
问题内容

我有一个Java类,正在使用iText库生成PDF文件。现在,根据我的需要,我必须将生成的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. 您可以使用的数据类型为BLOB
  2. 转换PDF文件并将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,该工具即可为您处理。如果您不使用它,则可以创建一个准备好的语句。语句具有一个称为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();



 类似资料:
  • 我想使用R脚本在数据库中的现有表中输入一个数据帧,我希望数据库中的表有一个顺序主键。我的问题是RODBC似乎不允许主键约束。 下面是创建我想要的表的SQL: 和一个带有R代码的测试:

  • 问题内容: 我使用以下代码将汉字保存到.txt文件中,但是当我用写字板打开它时,我看不懂它。 我能做什么 ?我知道如果将汉字剪切并粘贴到写字板中,可以将其保存到.txt文件中。如何在Java中做到这一点? 问题答案: 这里有几个因素在起作用: 文本文件没有用于描述其编码的内在元数据(就尖括号税而言,XML受欢迎是有原因的) Windows的默认编码仍然是8位(或双字节)“ ANSI ”字符集,其值

  • 我正在尝试使用一个用Java编写的桌面应用程序将数据保存到Firebase。但是,由于某些原因,它不起作用,我一直在这里提供的文档:https://firebase.google.com/docs/database/admin/save-data。找不到任何视频教程的问题,所有视频都是网络或移动相关的。基本上,我想创建一个名为Venda的对象,它有3个属性(ID、data、valor),然后将它保

  • 问题内容: 我有这个项目: 导入文件 连接到SQL Server数据库 将所有数据转移到数据库中 文本文件按选项卡划分为四个字段,例如数据库。 我已经完成了使用富文本框并将所有数据保存在字符串中的第一步。我的想法是将字符串拆分为每行并将其保存在数组中,然后:如何拆分每一行,以便可以正确保存字段?如何将SQL Server上的数据库连接到C#上的项目? 问题答案: 让我们一次解决这一步骤… 获取数据

  • 问题内容: 我看到过很多不同的文章,涉及到您应该以何种方式将对象序列化到文件,并且所有这些在本质上在执行方式和最佳实践方面存在冲突。因此,这就是我要保存的内容: 我们可以假设configArgs的大小已知,我需要制作一个文件,这就是到目前为止的内容。 问题答案: 好吧,我想,您想将对象直接写入文件 我只是提供了重要的代码。通过异常处理来实现。

  • 问题内容: 在Java中,我来自一个名为“ text”的String变量中的文本字段中的文本。 如何将“文本”变量的内容保存到文件中? 问题答案: 如果你只是输出文本,而不是任何二进制数据,则可以执行以下操作: 然后,将String写入其中,就像写入任何输出流一样: 与以往一样,你将需要异常处理。完成写作后,请务必致电。 如果你使用的是Java 7或更高版本,则可以使用“ 语句 ”,该语句将Pri