2016-12-06 2 views
0

Я новичок в java, теперь я пытаюсь использовать библиотеку itextpdf, код: сделать соединение с mysql, запустить запрос и получить байтовый объект, теперь мне нужно взять эти байты, чтобы положить на странице в формате pdf. данные по моей базе данных, это PDF файл в формате байт, на тузд типа данных «длинный блоб»itextpdf pdf from mysql connection

теперь я думаю, что нужны некоторые как этот код

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); 
} 
} 

ответ

0

Если 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. В этом случае вам нужно прочитать главу Manipulating an existing PDF document и Reusing existing PDF documents учебного пособия по запуску iText 7.

+0

** спасибо за ответ **, «новый пункт» принять метаданные и напечатать строку символов, им ищут некоторые аналогичное для класса _image_, потому что var _bytes уже содержит файл pdf_, поэтому мне нужно вставить эти байты (файл pdf) на страницу документа –

+0

В этом случае ваш вопрос не был ясен. Я уточню свой ответ. –

+0

спасибо, на самом деле сейчас я читаю эту главу. –

0

нормально способ решить сейчас именно этот код, благодаря @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); 
} 
}