【问题标题】:itextpdf pdf from mysql connection来自mysql连接的itextpdf pdf
【发布时间】:2017-04-20 19:02:03
【问题描述】:

我是java新手,现在我尝试使用itextpdf库,代码是:与mysql建立连接,运行查询并获取一个字节对象,现在我需要将这些字节放在mi上的页面上pdf文件。 我数据库上的数据是字节格式的pdf文件,mysql数据类型是“long blob”

现在我认为需要一些类似这样的代码

byte[] bytes = null;

Document document = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("\some\dir\file.pdf"));
document.open();

Class.forName("com.mysql.jdbc.Driver");
Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "user", "pass");
PreparedStatement st = cn.prepareStatement("SELECT file FROM files");
ResultSet rs = st.executeQuery();
try {
while (rs.next()) {
bytes = rs.getBytes("file");

document.add(bytes);
document.close();
cn.close();

} catch (Exception e) {
System.out.println(e);
}
}

【问题讨论】:

    标签: java mysql arrays pdf itext


    【解决方案1】:

    如果bytes 包含需要在 PDF 中呈现的文本,则需要替换以下行:

    document.add(bytes);
    

    使用以下行:

    document.add(new Paragraph(new String(bytes)));
    

    如果bytes 包含特殊字符,您可能会遇到编码问题,但让我们一步一步解决这个问题。

    如果bytes 是完整且有效的PDF 文件,您需要将它们提供给PdfReader 对象:

    PdfReader reader = new PdfReader(bytes);
    

    接下来会发生什么完全取决于您要对 PDF 文件做什么。如果您只需要提供 PDF,那么显然您根本不需要 iText。如果要复制特定页面或将该文件与其他文件合并,则需要使用PdfCopy。如果您想在文件上添加额外的数据(水印、页码……),您需要PdfStamper。阅读我的书Chapter 6 以了解您可以做什么,并查看表 6.1 以确保您选择了正确的课程。

    更好的办法是使用 iText 7 而不是 iText 5。在这种情况下,您需要阅读 iText 7 快速入门教程的 Manipulating an existing PDF documentReusing existing PDF documents 章节。

    【讨论】:

    • 感谢回复,“新段落”获取元数据并打印一串字符,我看起来有点类似于 图像类,因为 var bytes 已经包含一个 pdf 文件,所以我需要在文档页面上注入这些字节(pdf 文件)
    • 在那种情况下,您的问题并不清楚。我会更新我的答案。
    【解决方案2】:

    现在解决方法是这些代码,谢谢@Bruno

        byte[] bytes = null;
    
    Document document = new Document(PageSize.LETTER);
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("\some\dir\file.pdf"));
    document.open();
    
    Class.forName("com.mysql.jdbc.Driver");
    Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "user", "pass");
    PreparedStatement st = cn.prepareStatement("SELECT file FROM files");
    ResultSet rs = st.executeQuery();
    try {
    while (rs.next()) {
    bytes = rs.getBytes("file");
    PdfReader reader = new PdfReader(bytes);
    PdfImportedPage page;
    page = writer.getImportedPage(reader, 1);
    Image image = Image.getInstance(page);
    document.add(image);
    document.newPage();
    
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2020-02-14
      • 2017-10-18
      • 2018-07-12
      • 1970-01-01
      • 2014-11-16
      相关资源
      最近更新 更多