Создание PDF-файлов в веб-приложении iText - PullRequest
2 голосов
/ 11 сентября 2011

Я знаю, что это может быть глупый вопрос, который я задам здесь, так как я полный нуб-ява. Может быть, вы, ребята, можете помочь мне решить эту проблему.

Я работаю над приложением, в котором пользователю нужно, чтобы результат отображался на странице 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?

Любая помощь будет принята с благодарностью !!!!!

1 Ответ

0 голосов
/ 13 сентября 2011

Запрос 1) Как выровнять отчет по автомобилю по центру?

Решение: c.setHorizontalAlignment(Element.ALIGN_CENTER);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...