Offre d'emploi

Utiliser la bannière Case Hero

Lorsque vous utilisez un site web à plusieurs utilisateurs, il est essentiel de concevoir une expérience qui garantisse une expérience fluide à chacun.

Imaginez le scénario suivant : vous avez un site Web qui permet aux employeurs de charger des offres. Pour les chercheurs d'emploi, il est pratique de consulter facilement tous les documents relatifs à une publication dans un format cohérent. Toutefois, il est pratique pour les employeurs de joindre des renseignements dans n'importe quel format de fichier. Pour faciliter la tâche des deux types d'utilisateurs, vous pouvez convertir automatiquement tous les documents téléchargés en PDF et les intégrer directement dans la publication.

Ce que vous pouvez apprendre

Ce tutoriel pratique passe en revue un exemple Node.js qui utilise Adobe Acrobat Services et son Node.js SDK pour ajouter ces fonctionnalités à un site de publication d'offres d'emploi. Cela crée un site Web plus facile à utiliser et plus attrayant pour les employeurs et les demandeurs d'emploi. Voici le fichier terminer code de projet, au cas où vous voudriez suivre ce que vous lisez.

Pour commencer, configurez une application web Node.js simple basée sur Express. Express est un cadre d'application web minimaliste offrant des fonctionnalités telles que le routage et la création de modèles. Le code de l’application est disponible sur GitHub. Installez également le fichier Base de données PostgreSQL et configurez-le pour stocker le PDF.

Pertinent Acrobat Services API

Création des identifiants d’API Adobe

D'abord, vous devez créer des identifiants pour l’API Adobe PDF Embed (gratuite) et l’API Adobe PDF Services (gratuite pendant six mois) pay-as-you-go pour seulement $0.05 par transaction de document). Lors de la création d’informations d’identification pour l’API PDF Services, sélectionnez l’option "Créer un exemple de code personnalisé". Enregistrez le fichier ZIP et extrayez pdftools-api-credentials.json et private.key dans le répertoire racine de votre projet Node.js Express.

Vous avez également besoin d’une clé API pour l’API Incorporer disponible gratuitement. De Projets, accédez au projet que vous avez créé. Cliquez ensuite sur Ajouter au projet et sélectionnez API. Enfin, cliquez sur API PDF Embed.

Spécifiez le domaine pour l’API PDF Embed. La clé API doit être publique (elle se trouve dans le code exécuté par le navigateur). En spécifiant un domaine, vous vous assurez que quelqu’un d’autre dans un autre domaine ne peut pas utiliser la clé API.

Vous ne pouvez pas utiliser "localhost" comme domaine. Spécifiez un domaine, tel que "testing.local", et modifiez le fichier d'hôtes sur votre ordinateur pour rediriger ce domaine vers 127.0.0.1, qui est votre ordinateur. Ensuite, au lieu de tester votre application sur localhost:3000, vous pouvez la tester sur testing.local:3000. Une fois terminé, recherchez la clé API pour l’API PDF Embed sur la page du projet.

Ajout d’un formulaire et d’un gestionnaire de téléchargement

Avec une application Express opérationnelle et des identifiants d’API, vous avez également besoin d’un formulaire permettant aux utilisateurs de télécharger leurs documents sur le site web. Modifiez le modèle index.jade à cette fin.

Créez un champ de saisie pour le nom de la publication d'emploi téléchargée et pour un document contenant plus d'informations.

Dans le bloc de contenu du modèle, ajoutez le formulaire suivant :

extends layout

block content
  h1= title

  form(action="/upload", enctype="multipart/form-data", method="POST")
    label Job posting name: 
    input(type="text", name="name", required="required")
    br
    br
    label Describing document: 
    input(type="file", name="attachment", required="required")
    br
    br
    input(type="submit", value="Submit job posting")

Ensuite, ajoutez un gestionnaire pour la demande de POST à l’action /upload. Ensuite, ajoutez un itinéraire pour /upload au fichier routes/index.js. Vous pouvez créer un fichier pour cet itinéraire, mais vous devrez mettre à jour le fichier app.js pour refléter le nouveau fichier. Dans ce gestionnaire d'itinéraire, vous pouvez accéder au nom donné et au fichier téléchargé.

router.post('/upload', async function (req, res, next) {
    const name = req.body.name;
    const fileContents = req.files.attachment.data;

    // code to work with the uploaded document
  });

La fonction est asynchrone, vous pouvez donc utiliser le mot clé await dans la fonction, ce qui est pratique lorsque vous appelez les méthodes qui effectuent des appels API.

Capture décran du site de publication

Utilisation de l’API PDF Services

Avant d'utiliser l'API PDF Services, vous devez ajouter les importations suivantes en haut du fichier d'itinéraires :

const PDFToolsSdk = require('@adobe/documentservices-pdftools-node-sdk');
  const { Readable } = require('stream');

Directement sous les importations, vous pouvez charger des identifiants d’API et créer un fichier contenu exécution. Comme vous pouvez réutiliser un contexte d'exécution pour différentes opérations, il est logique de le faire une seule fois.

  const credentials = PDFToolsSdk.Credentials
  .serviceAccountCredentialsBuilder()
  .fromFile("pdftools-api-credentials.json")
  .build();

  const executionContext = PDFToolsSdk.ExecutionContext.create(credentials);

Revenez maintenant à l’écriture de code dans le gestionnaire de requêtes au niveau du commentaire dans le router.post s'affiche. Commencez par convertir le document en PDF.

  const createPdfOperation = PDFToolsSdk.CreatePDF.Operation.createNew();

  const input = PDFToolsSdk.FileRef.createFromStream(Readable.from(fileContents),
  req.files.attachment.mimetype);

  createPdfOperation.setInput(input);

  let result = await createPdfOperation.execute(executionContext);

  result.saveAsFile('output-pdf' + new Date().getTime() + '.pdf');
  return res.send('success!');

La plupart des opérations suivent les mêmes quatre étapes. Commencez par initialiser le type d'opération, en utilisant la méthode createNew de la classe appropriée. Ensuite, créez l'entrée pour l'opération, qui est FileRef. Les opérations suivantes peuvent ignorer cette étape, car le résultat d'une opération est également un FileRef. Pour cette opération initiale, créez un FileRef à partir des octets du fichier téléchargé. Troisièmement, vous devez affecter l'entrée à l'opération. Enfin, l'opération s'exécute avec le contexte d'exécution comme paramètre dans la méthode d'exécution. Cette méthode renvoie une promesse afin que vous puissiez attendre le résultat.

Le code enregistre le PDF retourné dans un fichier et envoie une simple réponse "success" au navigateur. La partie "Date" du nom de fichier garantit un nom de fichier unique. SaveAsFile renvoie une erreur si le fichier de destination existe.

Conversion d’images en texte et compression du PDF

Vous pouvez maintenant utiliser la reconnaissance optique de caractères (ROC) pour convertir des images en texte, puis compresser le résultat. Pour ce faire, utilisez les opérations OCR et CompressPDF similaires à l’opération CreatePDF . Ajoutez les éléments suivants au fichier d’itinéraires, dans router.post:

  const name = req.body.name;
  const fileContents = req.files.attachment.data;

  const createPdfOperation = PDFToolsSdk.CreatePDF.Operation.createNew();
  const input = PDFToolsSdk.FileRef.createFromStream(Readable.from(fileContents),
  req.files.attachment.mimetype);
  createPdfOperation.setInput(input);

  let result = await createPdfOperation.execute(executionContext);

  const ocrOperation = PDFToolsSdk.OCR.Operation.createNew();
  ocrOperation.setInput(result);
  result = await ocrOperation.execute(executionContext);

  const compressPdfOperation = PDFToolsSdk.CompressPDF.Operation.createNew();
  compressPdfOperation.setInput(result);
  result = await compressPdfOperation.execute(executionContext);

  result.saveAsFile('output-pdf' + new Date().getTime() + '.pdf');
  return res.send('success!');

Cette opération n'est nécessaire qu'une seule fois, car le résultat est un FileRef, que le code peut transmettre à setInput.

Il existe une meilleure alternative que d’enregistrer le fichier sur un disque dur et de renvoyer une réponse HTTP trop simplifiée. Stockez plutôt le PDF dans une base de données et affichez une page Web qui intègre le PDF à l’aide de l’API d’intégration de PDF gratuite d’Adobe. De cette façon, l'offre d'emploi ou la brochure de l'employeur est visible sur le site Web pour les demandeurs d'emploi à trouver et à consulter, avec les logos de l'entreprise et d'autres éléments de conception.

Stockage du PDF dans une base de données

Stockez les PDF dans une base de données PostgreSQL. Obtenez le package node-postgres pour vous connecter à Postgres dans Node.js. Installez le package stream-buffers car, à un moment donné, vous devez stocker le contenu du PDF dans un tampon et FileRef fonctionne uniquement avec les flux. Donc, utilisez le paquet stream-buffers pour écrire le contenu dans un buffer.

npm install pg stream-buffers

Créez maintenant une table de base de données pour les offres d'emploi. Il a besoin d'une colonne pour un identificateur unique, d'une colonne pour un nom et d'une colonne pour le mot de PDF joint. Vous pouvez créer une table de base de données à partir de l'interface de ligne de commande (CLI) Postgres :

CREATE TABLE job_postings (id TEXT PRIMARY KEY, name TEXT NOT NULL, attachment
BYTEA NOT NULL);

Revenez aux fichiers Node.js. Ajoutez des importations dans la partie supérieure du fichier :

  const { Client } = require('pg');
  const streamBuffers = require('stream-buffers');

Pour stocker le PDF dans la table de base de données, modifiez la fonction de téléchargement. Remplacez les deux dernières lignes (saveAsFile et send) par ce fragment de code :

  const pgClient = new Client();
  pgClient.connect();

  const id = Math.random().toString(36).substr(2, 6); // not securely random at all,
  but serves the purpose for this demo

  const writableStream = new streamBuffers.WritableStreamBuffer();
  writableStream.on("finish", async () => {
    await pgClient.query("INSERT INTO job_postings VALUES ($1, $2, $3)", [
      id,
      name,
      writableStream.getContents()
    ]);
    res.redirect(`/job/${id}`);
  })
  result.writeToStream(writableStream);

Pour écrire le contenu, créez un WritableStreamBuffer. Avec l'événement finish, il est temps d'exécuter la requête SQL. Le paquet node-postgres convertit automatiquement le paramètre Buffer au format BYTEA. La requête redirige l'utilisateur vers /job/{id}, un point de terminaison créé ultérieurement.

Pour l’API PDF Embed, vous avez également besoin d’un point de terminaison qui renvoie uniquement le contenu du PDF :

  router.get('/pdf/:id', async function (req, res, next) {
    const id = req.params.id;

    const pgClient = new Client();
    pgClient.connect();

  const pgResult = await pgClient.query("SELECT attachment FROM job_postings WHERE id
  = $1", [id]);
  const buffer = pgResult.rows[0].attachment;
  res.type('pdf');
    return res.send(buffer);
  });

Intégration du PDF

Maintenant, créez le fichier /job/{id} point de terminaison, qui affiche un modèle contenant le nom de la publication de tâche demandée et un mot de PDF incorporé.

router.get('/job/:id', async function(req, res, next) {
    const id = req.params.id;

    const pgClient = new Client();
    pgClient.connect();

    const pgResult = await pgClient.query("SELECT name FROM job_postings WHERE id =
  $1", [id]);
    const name = pgResult.rows[0].name;

    res.render('job', { pdf_url: `/pdf/${id}`, name });
  });

Dans le répertoire views/, créez un fichier job.jade avec ce contenu :

  extends layout

  block content
    h1= name
    div(id='adobe-dc-view')
    script(src='https://documentcloud.adobe.com/view-sdk/main.js')
    script.
      window.embedUrl = "!{pdf_url}";
    script(src='/javascripts/embed-pdf.js')

Le premier script est le SDK View d’Adobe, qui facilite l’intégration du PDF. Le deuxième script est un serveur de ligne unique qui définit la valeur de window.embedUrl sur l'URL du PDF fourni par le gestionnaire d'itinéraire Express. Créez vous-même le troisième script comme suit :

  document.addEventListener("adobe_dc_view_sdk.ready", function () {
    var adobeDCView = new AdobeDC.View({ clientId: "YOUR API KEY HERE", divId:
   "adobe-dc-view" });
    adobeDCView.previewFile({
      content: { location: { url: '//' + window.location.host + window.embedUrl }
         },
      metaData: { fileName: "Job posting" }
    });
  });

Vous pouvez désormais tester l’ensemble du processus de téléchargement d’un document, de redirection vers la page /job/id et d’affichage du PDF incorporé. Vos utilisateurs suivent les mêmes étapes pour ajouter une offre d’emploi ou tout autre document à votre site web.

Capture d’écran du test d’un document de PDF chargé

Pour voir une intégration en ligne en action, consultez cette page démonstration en direct.

Marche à suivre

Ce tutoriel pratique explique comment utiliser Node.js avec Acrobat Services pour convertir un fichier publication de travaux dans différents formats vers un PDF. Le PDF obtenu a ensuite été incorporé dans une page Web. Désormais, vous pouvez ajouter la même fonction à votre site web, ce qui permet aux employeurs de télécharger plus facilement des descriptions d’emploi, des brochures et plus encore pour les chercheurs d’emploi. Ces capacités permettent à chacun d'obtenir les informations nécessaires pour trouver le travail de ses rêves.

Acrobat Services vous aident à ajouter des fonctions clés de gestion de documents à votre site web ou votre application. Si vous souhaitez approfondir les fonctionnalités de ces API, reportez-vous à la documentation de démarrage rapide suivante :

Pour commencer à ajouter des fonctions conviviales de gestion de documents à votre site Web, inscrivez-vous à l’essai gratuit. L’API Adobe PDF Embed est toujours gratuite et l’API Adobe PDF Services est gratuite pendant six mois. Dans ce cas, vous ne pouvez utiliser que l’API $0.05 par transaction de document pay-as-you-go à mesure que votre entreprise se développe.

recommendation-more-help
61c3404d-2baf-407c-beb9-87b95f86ccab