From bf412a896b52694891bc4b72dee092e026f6e667 Mon Sep 17 00:00:00 2001 From: ulrich@undisclosed <ulrich@ulrich-vaio> Date: Thu, 28 May 2020 08:06:37 +0000 Subject: [PATCH] Revert "Fehler bei PDF-Umwandlung behoben" --- src/de/uhilger/wbx/web/AdocServlet.java | 171 ++++++++++++++++++++++++++++++++------------------------- 1 files changed, 96 insertions(+), 75 deletions(-) diff --git a/src/de/uhilger/wbx/web/AdocServlet.java b/src/de/uhilger/wbx/web/AdocServlet.java index e0c43d2..af4736b 100644 --- a/src/de/uhilger/wbx/web/AdocServlet.java +++ b/src/de/uhilger/wbx/web/AdocServlet.java @@ -24,16 +24,17 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; +import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; -import static org.asciidoctor.AttributesBuilder.attributes; -import static org.asciidoctor.OptionsBuilder.options; import static org.asciidoctor.Asciidoctor.Factory.create; import org.asciidoctor.Asciidoctor; +import static org.asciidoctor.AttributesBuilder.attributes; +import static org.asciidoctor.OptionsBuilder.options; @@ -41,59 +42,66 @@ * Das AdocServlet wandelt AsciiDoc-Inhalte (*.adoc) * zu HTML-Seiten und PDF-Dokumenten * - * ?pdf=true im URL fuegt PDF-Ausgabe hinzu + * Mit Angabe des Parameters ?pdf=true im URL wird PDF erzeugt, andernfalls HTML */ public class AdocServlet extends HttpServlet { private static final String DOT = "."; - private static final String HTMLEXT = ".html"; - private static final String PDFEXT = ".pdf"; + private static final String HTML = "html"; private static final String PDF = "pdf"; private static final String SERVLET_NAME = "AdocServlet"; /** - * Processes requests for both HTTP <code>GET</code> and <code>POST</code> - * methods. + * Die Methode processRequest verarbeitet HTTP-Anfragen des Typs + * <code>GET</code> und <code>POST</code>. * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs + * @param request die Servlet-Anfrage + * @param response die Servlet-Antwort + * @throws ServletException wenn ein Servlet-spezifischer Fehler passiert + * @throws IOException wenn ein Eingabe- oder Ausgabe-Fehler passiert */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.setContentType("text/html;charset=UTF-8"); - try (PrintWriter out = response.getWriter()) { - // Asciidoc-Quelldatei aus HTTP-Request ermitteln - String vPath = request.getServletPath(); - String absname = getServletContext().getRealPath(vPath); - File adocfile = new File(absname); - - // HTML-Datei ermitteln - String nameext = adocfile.getName(); - String fname = nameext.substring(0, nameext.lastIndexOf(DOT)); - File htmlfile = new File(adocfile.getParentFile(), fname + HTMLEXT); - - /* - transformieren, wenn die Quelle sich geandert hat oder - die HTML-Datei noch nicht existiert - */ - if(!htmlfile.exists() || adocfile.lastModified() > htmlfile.lastModified()) { - transform(absname, htmlfile); + // Asciidoc-Quelldatei aus HTTP-Request ermitteln + String vPath = request.getServletPath(); + String absname = getServletContext().getRealPath(vPath); + File adocfile = new File(absname); + + // HTML-Datei ermitteln + String nameext = adocfile.getName(); + String fname = nameext.substring(0, nameext.lastIndexOf(DOT)); + File htmlfile = new File(adocfile.getParentFile(), fname + DOT + HTML); + File outfile = htmlfile; // Standardmaessig wird HTML zurueckgegeben + response.setContentType("text/html;charset=UTF-8"); + + /* + nach HTML transformieren, wenn die Quelle sich geandert hat oder + die HTML-Datei noch nicht existiert + */ + if(!htmlfile.exists() || adocfile.lastModified() > htmlfile.lastModified()) { + transform(absname); + } + + /* + nach PDF transformieren, wenn der Parameter pdf=true existiert und + wenn die Quelle sich geandert hat oder + die PDF-Datei noch nicht existiert + */ + String pdf = request.getParameter(PDF); + if(null != pdf && pdf.equalsIgnoreCase(Boolean.TRUE.toString())) { + File pdffile = new File(adocfile.getParentFile(), fname + DOT + PDF); + outfile = pdffile; // PDF soll zurueckgegeben werden + response.setContentType("application/pdf;charset=UTF-8"); + if(!pdffile.exists() || adocfile.lastModified() > pdffile.lastModified()) { + transform(absname, PDF); } - - String pdf = request.getParameter(PDF); - if(null != pdf && pdf.length() > 0 && pdf.equalsIgnoreCase(Boolean.TRUE.toString())) { - File pdffile = new File(adocfile.getParentFile(), fname + PDFEXT); - if(!pdffile.exists() || adocfile.lastModified() > pdffile.lastModified()) { - transform(absname, pdffile); - } - } + } - // HTML-Datei ausgeben - FileInputStream in = new FileInputStream(htmlfile); + try (PrintWriter out = response.getWriter()) { + // abhaengig vom Parameter pdf HTML- oder PDF-Datei ausgeben + FileInputStream in = new FileInputStream(outfile); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; while ((line = reader.readLine()) != null) { @@ -102,39 +110,52 @@ } } - private void transform(String absoluteFileName, File target) { - Map<String, Object> options = null; - Map<String, Object> attributes; - Asciidoctor asciidoctor = create(); - String fname = target.getName().toLowerCase(); - - if(fname.endsWith(HTMLEXT)) { - attributes = attributes().noFooter(false) - .sourceHighlighter("highlightjs") - //.tableOfContents(true) - //.sectionNumbers(true) - .asMap(); - options = options().inPlace(false) - .attributes(attributes) - .asMap(); - } else if(fname.endsWith(PDFEXT)) { - attributes = attributes().noFooter(false) - .asMap(); - options = options().inPlace(false) - .attributes(attributes) - .backend("pdf") - .asMap(); - } - asciidoctor.convertFile(new File(absoluteFileName), options); + /** + * Nach HTML transformieren + * @param fileName der Dateiname der Quelldatei samt absoluter Pfadangabe + */ + private void transform(String fileName) { + transform(fileName, null); } + + /** + * In ein Format transformieren, das von einem 'Backend' von Asciidoctor + * unterstuetzt wird + * @param fileName der Dateiname der Quelldatei samt absoluter Pfadangabe + * @param backend das Kuerzel des Backends, z.B. der String 'pdf', wenn + * nach PDF transformiert werden soll + */ + private void transform(String fileName, String backend) { + /* + Map<String, Object> attributes = new HashMap<>(); + attributes.put("no_footer", false); + //attributes.put("source_highlighter", "highlightjs"); + + Map<String, Object> options = new HashMap<>(); + options.put("attributes", attributes); + options.put("in_place", false); + if(null != backend) { + options.put("backend", backend); + } + */ + + Map<String, Object> attributes = attributes().sourceHighlighter("highlightjs") + .asMap(); + Map<String, Object> options = options().inPlace(false).attributes(attributes) + .asMap(); + + + Asciidoctor asciidoctor = create(); + asciidoctor.convertFile(new File(fileName), options); + } /** - * Handles the HTTP <code>GET</code> method. + * Die HTTP-<code>GET</code>-Methode verarbeiten. * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs + * @param request die Servlet-Anfrage + * @param response die Servlet-Antwort + * @throws ServletException wenn ein Servlet-spezifischer Fehler passiert + * @throws IOException wenn ein Eingabe- oder Ausgabe-Fehler passiert */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) @@ -143,12 +164,12 @@ } /** - * Handles the HTTP <code>POST</code> method. + * Die HTTP-<code>POST</code>-Methode verarbeiten. * - * @param request servlet request - * @param response servlet response - * @throws ServletException if a servlet-specific error occurs - * @throws IOException if an I/O error occurs + * @param request die Servlet-Anfrage + * @param response die Servlet-Antwort + * @throws ServletException wenn ein Servlet-spezifischer Fehler passiert + * @throws IOException wenn ein Eingabe- oder Ausgabe-Fehler passiert */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) @@ -157,9 +178,9 @@ } /** - * Returns a short description of the servlet. + * Eine Kurzbeschreibung des Servlets ausgeben. * - * @return a String containing servlet description + * @return einen String mit der Kurzbeschreibung des Servlets */ @Override public String getServletInfo() { -- Gitblit v1.9.3