Я знаю, что это может быть глупый вопрос, который я задам здесь, так как я полный нуб-ява. Может быть, вы, ребята, можете помочь мне решить эту проблему.
Я работаю над приложением, в котором пользователю нужно, чтобы результат отображался на странице jsp в формате pdf, а pdf создается как поток вывода в HTTP-запросе, то есть когда пользователь нажимает кнопку (на jsp), чтобы генерировать PDF с результатом, т.е. PDF генерируется на лету и отправляется в браузер клиента.
Используя iText, я могу генерировать пользовательские PDF-файлы на лету
Вот фрагмент кода
<code>public class PdfSample extends HttpServlet {
public PdfSample() {
super();
}
//connection to DB.... code goes here.....
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws javax.servlet.ServletException, java.io.IOException {
DocumentException ex = null;
ByteArrayOutputStream baosPDF = null;
try {
baosPDF = generatePDFDocumentBytes(req, this.getServletContext());
StringBuffer sbFilename = new StringBuffer();
sbFilename.append("filename_");
sbFilename.append(System.currentTimeMillis());
sbFilename.append(".pdf");
resp.setHeader("Cache-Control", "max-age=30");
resp.setContentType("application/pdf");
StringBuffer sbContentDispValue = new StringBuffer();
sbContentDispValue.append("inline");
sbContentDispValue.append("; filename=");
sbContentDispValue.append(sbFilename);
resp.setHeader("Content-disposition", sbContentDispValue.toString());
resp.setContentLength(baosPDF.size());
ServletOutputStream sos;
sos = resp.getOutputStream();
baosPDF.writeTo(sos);
sos.flush();
} catch (DocumentException dex) {
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.println(this.getClass().getName() + " caught an exception: "
+ dex.getClass().getName() + "<br>");
writer.println("<pre>");
dex.printStackTrace(writer);
writer.println("
");
} в конце концов {
if (baosPDF! = null) {
baosPDF.reset ();
}
}
}
Защищенный ByteArrayOutputStream generatePDFDocumentBytes (
окончательный запрос HttpServletRequest, окончательный ServletContext ctx)
выбрасывает DocumentException
{
Документ doc = новый документ ();
ByteArrayOutputStream baosPDF = new ByteArrayOutputStream ();
PdfWriter docWriter = null;
пытаться {
docWriter = PdfWriter.getInstance (doc, baosPDF);
doc.addAuthor ( "Sample");
doc.addCreationDate ();
doc.addProducer ();
doc.addCreator ( "Sample");
doc.addTitle («Пример отчета»);
doc.setPageSize (PageSize.LETTER);
doc.open ();
String strServerInfo = ctx.getServerInfo ();
if (strServerInfo! = null) {
}
doc.add (makeHTTPParameterInfoElement (REQ));
} catch (DocumentException dex) {
baosPDF.reset ();
бросить декс;
} в конце концов {
if (doc! = null) {
doc.close ();
}
if (docWriter! = null) {
docWriter.close ();
}
}
if (baosPDF.size ()
Код Выше, извлекающий данные (количество) из базы данных путем установления соединения и отображения в ячейках. с помощью приведенного выше кода я могу создать PDF на лету и вывод, как показано ниже.
--------------------------------------------------------------------------------------------------
Car Report
--------------------------------------------------------------------------------------------------
| White Color Car |Black Color Car | Total
--------------------------------------------------------------------------------------------------
New Cars Sold out| 5 | 8 | 13
--------------------------------------------------------------------------------------------------
Total Cars Sold Out| 6 | 4 | 10
--------------------------------------------------------------------------------------------------
Запрос 1) Как выровнять отчет по автомобилю по центру?
Запрос 2) Данные и текст отображаются внутри ячейки, как я могу установить границу ячейки на «0».
Запрос 3) Как мне покрасить конкретную ячейку (пустую)?
Запрос 4) Можно ли вставить изображение поверх заголовка pdf?
Любая помощь будет принята с благодарностью !!!!!