Creare PDF con Angular e jsPDF
jsPDF è una libreria per Javascript per la creazione / modifica di PDF.
Oggi vediamo come usarla in un progetto Angular e con Typescript.
jsPDF è una libreria per Javascript per la creazione / modifica di PDF.
Oggi vediamo come usarla in un progetto Angular e con Typescript.
Ho trovato un plugin per jQuery che permette di creare pannelli dentro una pagina web in maniera veramente easy: jsPanel!
Se guardate gli esempi e la documentazione, potete notare che le possibilità sono veramente tante.
C'è anche l'integrazione con la prossima versione di Bootstrap, ed è possibile creare pannelli espandibili, finestre modali, toolbar, menu contestuali, ecc.
Insomma tanta roba.
Chi ha programmato almeno una volta in Asp.NET, conosce già il concetto di Master Page; una pagina HTML che funziona da template, nella quale alcuni parti sono dinamiche e altre fisse.
Di base le JSP non prevedono una cosa del genere, a parte il meccanismo degli include (come PHP).
Però se usiamo un framework, e nello specifico JSF, abbiamo la possiblità di usare i template.
Vediamo un semplice esempio; una volta creato il progetto (Netbeans ci permette di includere da subito le librerie che ci servono) create una pagina che chiamiamo template.xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<h:outputStylesheet name="style.css" library="css" />
</h:head>
<h:body>
<div id="page">
<div id="header">
<ui:insert name="header" ></ui:insert>
</div>
<div id="content">
<ui:insert name="content"></ui:insert>
</div>
<div id="footer">
<ui:insert name="footer"></ui:insert>
</div>
</div>
</h:body>
</html>
Come vedete è una semplice pagina con alcuni tag specifici.
E' da un pò che voglio scrivere questo articolo, ma tra una cosa e l'altra non ci sono mai riuscito.
Lo trovo un pò complicato, visto anche il numero di passaggi e il tempo che è passato.
Quindi ho deciso che, una volta tanto, non lo scriverò io, ma vi rimanderò al link che ho usato.
Non è nel mio stile lo sapete, ma stavolta ho seguito il concetto "perchè reinventare sempre la ruota?".
Gestire le sessioni con le Servlet è abbastanza semplice.
Prendiamo uno scenario del genere:
-form di login
-se l'utente esiste viene creato un oggetto User
-l'oggetto viene passato alla Servlet che crea una sessione
Quindi partendo da un form del genere:
<table>
<form action="ServletLogin" method="post">
<tbody>
<tr>
<td>User:</td>
<td><input type="text" id="focus" name="username" value="" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" value="" /></td>
</tr>
<tr>
<td><input type="submit" value="Submit" name="submit" /></td>
</tr>
</form>
</table>
Questo form richiama la ServletLogin in POST:
public class ServletLogin extends HttpServlet {
private DBManager db = DBManager.getInstance(); // CLASSE PER LA CONNESSIONE
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean success = false;
HttpSession session = request.getSession(true);
if (session.getAttribute("user") == null) {
try {
User user = db.login(request.getParameter("username").trim(), request.getParameter("password").trim());
String userCreato = user.getName().toString();
int userCreatoId = user.getId();
session.setAttribute("user_id", userCreatoId);
session.setAttribute("user_name", userCreato);
success = true;
if (success) {
response.sendRedirect("index.jsp");
} else {
response.sendRedirect("error.jsp?err=Atenticazione fallita");
}
} catch (ClassNotFoundException ex) {
response.sendRedirect("error.jsp?err=" + ex.getMessage());
} catch (SQLException ex) {
response.sendRedirect("error.jsp?err=" + ex.getMessage());
} catch (NoSuchAlgorithmException ex) {
response.sendRedirect("error.jsp?err=" + ex.getMessage());
}
}
}
}
Istanzia un oggetto HttpSession con il quale prendiamo la sessione corrente.
Dopo un week-end di pausa riprendiamo con un argomento molto in voga: la conversione da valori esadecimali a String.
Nel mio caso mi è servito per il login in una wb application in JSP e Servlet.
Nel db sia utente e password sono cripati in SHA1.
Partiamo da questo metodo:
public User login(String name, String pwd) throws ClassNotFoundException, SQLException, NoSuchAlgorithmException, UnsupportedEncodingException {
User user = new User();
conn = DBManager.getInstance().takeConnection();
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] encodeName = md.digest(name.getBytes("UTF-8"));
byte[] encodePwd = md.digest(pwd.getBytes("UTF-8"));
String convName = ConvertHexToString.convert(encodeName);
String convPwd = ConvertHexToString.convert(encodePwd);
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user WHERE user_name = ? AND user_pass = ?");
pstmt.setString(1, convName);
pstmt.setString(2, convPwd);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
user.setId(rs.getInt("user_id"));
user.setName(name);
user.setPwd(pwd);
rs.close();
pstmt.close();
} else {
user.setId(0);
user.setName("");
user.setPwd("");
rs.close();
pstmt.close();
}
return user;
}
Al metodo passo due String.