+++ /dev/null
-/**
- *
- */
-package fr.mbdx.service;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.activiti.engine.impl.util.json.JSONException;
-import org.activiti.engine.impl.util.json.JSONObject;
-import org.apache.log4j.Logger;
-
-import com.itextpdf.text.DocumentException;
-import com.itextpdf.text.pdf.PdfAConformanceLevel;
-import com.itextpdf.text.pdf.PdfAStamper;
-import com.itextpdf.text.pdf.PdfContentByte;
-import com.itextpdf.text.pdf.PdfReader;
-import com.itextpdf.text.pdf.PdfStamper;
-
-import fr.mbdx.pdf.TableauRecapitulatif;
-import fr.mbdx.pdf.TableauRecapitulatifDeliberation;
-import fr.mbdx.pdf.TableauRecapitulatifUrbanisme;
-
-/**
- * Classe regroupant les services de transformation & modification de documents au format PDF
- */
-public class ServicePDF {
-
- private final Logger log = Logger.getLogger(getClass());
-
- private ServiceRestAlfresco serviceRestAlfresco;
-
- /**
- * Permet de transformer un document au format PDF en passant par un webscript Alfresco
- *
- * @param nodeRef
- * référence du noeud Alfresco à transformer
- * @param name
- * nom du fichier PDF à générer dans le même dossier que le fichier d'origine
- * @return référence Alfresco du document PDF obtenu
- */
- public String transformToPdf(String nodeRef, String name) {
- String result = null;
- String req = "/wcs/fr/mbdx/noyau/transform/pdf";
-
- Map<String, String> param = new HashMap<String, String>();
- if (!nodeRef.startsWith("workspace://SpacesStore/")) {
- nodeRef = "workspace://SpacesStore/" + nodeRef;
- }
- param.put("nodeRef", nodeRef);
- param.put("pdfName", name);
-
- JSONObject res = serviceRestAlfresco.get(req, param);
- try {
- JSONObject data = res.getJSONObject("data");
- result = data.getString("pdfRef");
- } catch (JSONException e) {
- log.error(e.getMessage(), e);
- }
-
- return result;
- }
-
- /**
- * Crée un nouveau tableau récapitulatif
- * @param typeGed
- * @return
- */
- public TableauRecapitulatif createTableau(String typeGed) {
- TableauRecapitulatif tab = null;
- if (typeGed.equals("delib") || typeGed.equals("publicites")) {
- tab = new TableauRecapitulatifDeliberation();
- } else {
- tab = new TableauRecapitulatifUrbanisme();
- }
- tab.setBoldFontName("/fr/mbdx/pdf/fonts/OPENSANS-BOLD.TTF");
- tab.setLightFontName("/fr/mbdx/pdf/fonts/OPENSANS-REGULAR.TTF");
- tab.setItalicFontName("/fr/mbdx/pdf/fonts/OPENSANS-ITALIC.TTF");
- return tab;
- }
-
- /**
- * Ajoute un tableau en bas de la première page d'un document PDF
- *
- * @param pdfIn
- * Contenu binaire du document PDF source
- * @param tab
- * Tableau à ajouter
- * @param removeFirstPage
- * Supprimer la 1e page (bordereau parapheur)
- * @param putTableOnFirstPage
- * Placer le tableau sur la 1e page plutôt que la dernière
- * @return Contenu binaire du document PDF obtenu
- * @throws DocumentException
- * @throws IOException
- */
- public byte[] ecrireTableauRecapitulatif(byte[] pdfIn, TableauRecapitulatif tab, boolean removeFirstPage, boolean putTableOnFirstPage) throws DocumentException, IOException {
- byte[] pdfOut = null;
-
- PdfReader reader = new PdfReader(pdfIn);
-
- // 2e reader au cas où ce ne serait pas du PDFA
-
- PdfReader reader2 = null;
-
- int pages = reader.getNumberOfPages();
-
- String ranges = null;
- if (pages > 1 && removeFirstPage) {
- // On élimine la 1e page correspondant au bordereau parapheur
- ranges = pages > 2 ? "2-" + String.valueOf(pages) : "2";
- reader.selectPages(ranges);
- pages--;
- }
-
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- PdfStamper stamper = null;
- try {
- // on fait un premier essai en PDFA
- stamper = new PdfAStamper(reader, os, '\0', false, PdfAConformanceLevel.PDF_A_1B);
-
- } catch (Exception e) {
- // on se rabat sur du PDF classique si ce n'est pas le cas
- reader2 = new PdfReader(pdfIn);
- if (ranges != null) {
- reader2.selectPages(ranges);
- }
- stamper = new PdfStamper(reader2, os, '\0', false);
- }
- //On récupère le contenu de la 1e page afin d'y écrire le contenu de notre tableau
- int pageNum = putTableOnFirstPage ? 1 : pages;
- PdfContentByte cb = stamper.getOverContent(pageNum);
- tab.write(cb);
- stamper.close();
- reader.close();
- if (reader2 != null) {
- reader2.close();
- }
- os.close();
- pdfOut = os.toByteArray();
-
- return pdfOut;
- }
-
- /**
- * @param serviceRestAlfresco
- * the serviceRestAlfresco to set
- */
- public void setServiceRestAlfresco(ServiceRestAlfresco serviceRestAlfresco) {
- this.serviceRestAlfresco = serviceRestAlfresco;
- }
-}