Example usage for com.itextpdf.tool.xml.pipeline.css CSSResolver addCssFile

List of usage examples for com.itextpdf.tool.xml.pipeline.css CSSResolver addCssFile

Introduction

In this page you can find the example usage for com.itextpdf.tool.xml.pipeline.css CSSResolver addCssFile.

Prototype

void addCssFile(String href, boolean isPersistent) throws CssResolverException;

Source Link

Document

Add a

Usage

From source file:Servlet.PDFServlet.java

/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request//from w w  w  .  j a  va2s .c om
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String strData = request.getParameter("hidden_pdfData");
    //System.out.println("strData_new --> " + strData);
    String[] strSplitData = strData.split("###");
    String strBerichtname;
    String strTable;

    strBerichtname = strSplitData[0];
    strTable = strSplitData[1];

    String strAusgabe = "Es ist ein unerwartetes Problem aufgetreten";
    boolean boolLeerbericht = true;
    HttpSession userSession = request.getSession();
    switch (strBerichtname) {
    case "Einsatzbericht leer":
        strAusgabe = generiereAusgabeEinsatzberichtLeer(strTable, strSplitData[2]);
        break;
    case "bungsbericht leer":
        strAusgabe = generiereAusgabeUebungsberichtLeer(strTable, strSplitData[2]);
        break;
    case "Ttigkeitsbericht leer":
        strAusgabe = generiereAusgabeTaetigkeitsberichtLeer(strTable, strSplitData[2]);
        break;
    case "Dynamisch":
        strAusgabe = "<h1>" + strBerichtname + "</h1>" + strTable;
        boolLeerbericht = false;
        break;
    case "Kursstatistik":
        if (strTable.split("<td>").length > 1 && strSplitData[2].split("<td>").length > 1) {
            strAusgabe = "<h1>" + strBerichtname + "</h1>" + strSplitData[2].replace("</br>", "")
                    + "<p>&nbsp;</p>" + strTable;
        } else if (strTable.split("<td>").length < 2) {
            strAusgabe = "<h1>" + strBerichtname + "</h1>" + strSplitData[2].replace("</br>", "");
        } else if (strSplitData[2].split("<td>").length < 2) {
            strAusgabe = "<h1>" + strBerichtname + "</h1>" + strTable;
        }
        boolLeerbericht = false;
        break;
    case "Digitales Fahrtenbuch":
        if (strSplitData.length > 2) {
            strAusgabe = "<h1>" + strBerichtname + "</h1>" + strSplitData[2] + "<p>&nbsp;</p>" + strTable;
        } else {
            strAusgabe = "<h1>" + strBerichtname + "</h1>" + strTable;
        }
        boolLeerbericht = false;
        break;
    case "Stundenauswertung je Mitglied je Instanz":
        strAusgabe = "<h1>" + strBerichtname + "</h1>"
                + generiereStundenauswertungJeMitgliedJeInstanz(strTable);
        boolLeerbericht = false;
        break;
    case "Geburtstagsliste":
        strAusgabe = "<h1>" + strBerichtname + " " + userSession.getAttribute("attJahr") + "</h1>" + strTable;
        boolLeerbericht = false;
        break;
    case "Dienstzeitliste":
        strAusgabe = "<h1>" + strBerichtname + " " + userSession.getAttribute("attJahrDienst") + "</h1>"
                + strTable;
        boolLeerbericht = false;
        break;
    default:
        strAusgabe = "<h1>" + strBerichtname + "</h1>" + strTable;
        boolLeerbericht = false;
    }
    String strContextPath = this.getServletContext().getRealPath("/");
    String strCSSPath1 = strContextPath + File.separator + "css" + File.separator + "pdfSimpel.css";
    String strFontPath = strContextPath + File.separator + "res" + File.separator + "Cambria.ttf";

    //FAIL - just ignore
    //strAusgabe = strAusgabe.substring(0, pos+5) + ("<thead>" + strAusgabe.split("<thead>")[1].split("</thead>")[0] + "</thead>") + strAusgabe.substring(pos+5);
    //String strHead = "<thead>" + strAusgabe.split("<thead>")[1].split("</thead>")[0] + "</thead>";
    //String strUeberschrift = "<h1>" + strAusgabe.split("<h1>")[1].split("</h1")[0] + "</h1>";
    if (!strBerichtname.contains("leer")) {
        strAusgabe = strAusgabe.replace("<table", "<table style='repeat-header: yes;' ");
    }

    Rectangle rect;
    try {
        Document document;
        if (liBerHochformat.contains(strBerichtname)) {
            document = new Document(PageSize.A4, 36, 36, 100, 54);
            rect = new Rectangle(36, 54, 559, 788);
        } else {
            document = new Document(PageSize.A4.rotate(), 36, 36, 70, 54);
            rect = new Rectangle(36, 54, 805, 559);
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter writer = PdfWriter.getInstance(document, baos);
        PDF_KopfFuzeile event = new PDF_KopfFuzeile(strFontPath, writer);
        writer.setBoxSize("pageRect", rect);
        writer.setPageEvent(event);

        document.open();
        HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
        htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
        CSSResolver cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(false);
        //hier werden die CSS files eingebunden
        cssResolver.addCssFile(strCSSPath1, true);

        if (liBerHochformat.contains(strBerichtname)) {
            cssResolver.addCssFile(strCSSPath1.replace("Simpel", "Hoch"), true);
        } else {
            cssResolver.addCssFile(strCSSPath1.replace("Simpel", "Quer"), true);
        }
        if (!boolLeerbericht) {
            cssResolver.addCssFile(strCSSPath1.replace("Simpel", "StandartBericht"), true);
        } else {
            cssResolver.addCssFile(strCSSPath1.replace("Simpel", "Leerbericht"), true);
        }
        Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,
                new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));

        XMLWorker worker = new XMLWorker(pipeline, true);
        XMLParser p = new XMLParser(worker);
        XMLParser p2 = new XMLParser(worker);
        p.toString();
        //ByteArrayInputStream bis = new ByteArrayInputStream(strAusgabe.toString().getBytes());
        //ByteArrayInputStream cis = new ByteArrayInputStream(strCSSPath1.replace("Simple", "Hoch").toString().getBytes());
        //XMLWorkerHelper.getInstance().parseXHtml(writer, document, bis, cis);
        //p.selectState().selfClosing();

        p.parse(new StringReader(strAusgabe));

        document.close();
        writer.close();
        strBerichtname = strBerichtname.replaceAll(" ", "_");
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "filename=" + strBerichtname + ".pdf");
        response.setContentLength(baos.size());

        ServletOutputStream os = response.getOutputStream();
        baos.writeTo(os);
        os.flush();
        os.close();
    } catch (DocumentException de) {
        throw new IOException(de.getMessage());
    } catch (CssResolverException ex) {
        Logger.getLogger(PDFServlet.class.getName()).log(Level.SEVERE, null, ex);
    }

}