Léon  Peltier

Léon Peltier

1659022266

Comment Générer De Beaux PDF Avec React Et Puppeteer

J'ai récemment dû fournir une nouvelle fonctionnalité sur mon projet : celle du "téléchargement en PDF". La première chose que je me suis demandé était pourquoi devrions-nous fournir cette fonctionnalité ? N'existe-t-il pas déjà nativement avec à peu près tous les navigateurs Web avec une option clic droit / imprimer / "enregistrer en pdf" ? Eh bien, j'ai essayé sur ma page Web et le résultat était vraiment décevant:

  • J'ai eu des sauts de page au milieu de mes tableaux de données, de mes graphiques ou de tout composant React qui ne sont pas censés être divisés sur différentes pages
  • Je n'avais pas de titre, d'en-tête, de numéro de page à l'exception des vilains défauts fournis par les options du navigateur
  • J'ai eu beaucoup d'autres problèmes UX/UI qui rendaient le PDF assez illisible

Exemple sur une page aléatoire Boursorama , qui ressemble à :

le rendu:

C'est alors que j'ai dit "ok cette fonctionnalité en vaut peut-être la peine", mais comment dois-je faire ? Il existe de nombreuses bibliothèques open source capables de générer des PDF. Mais mon choix s'est porté naturellement sur la bibliothèque bien connue développée par google : Puppeteer. Selon moi, c'est le moyen le plus simple de gérer la génération PDF d'applications à page unique. Ce n'est peut-être pas le cas si vous ne traitez pas avec des bundles javascript mais avec du HTML/CSS brut. En effet, il existe des solutions plus simples pour ce cas d'utilisation comme wkhtmltopdf, html-pdf-node ou jspdf par exemple.

Dans cet article, je souhaite vous donner quelques astuces pour générer de beaux PDF de SPA avec Puppeteer. Dans un premier temps, je vais vous expliquer comment vous pouvez créer une version imprimable de votre page avec React et Puppeteer. Ensuite, je vous montrerai comment utiliser Puppeteer pour la génération de votre nouvelle page imprimable.

Rendre une version imprimable de votre page

Pour cette partie, vous n'avez pas réellement besoin d'avoir Puppeteer ou tout autre service d'impression configuré. Vous pouvez apporter vos modifications à votre code comme d'habitude, puis ctrl+P sur votre page pour voir à quoi il ressemble :

Cependant, la boucle de rétroaction n'est pas aussi rapide que d'habitude.

Pour adapter votre code à l'impression, vous devez contourner les 2 principales différences entre une page web et un PDF :

  • Les composants d'une application React sont dynamiques alors qu'un PDF est un fichier statique
  • Un PDF a des sauts de page et une taille fixe alors qu'une page Web est une application "d'une page" avec une taille de fenêtre d'affichage variable

De la page Web dynamique au rendu statique

Créez la "version imprimable" de votre SPA avec React. Pour créer la version imprimable de notre page, vous devrez ajouter/supprimer/modifier les différents éléments qui composent la page.

Vous avez essentiellement 2 solutions pour cette partie :

  • créer un tout nouveau design personnalisé pour votre page
  • adapter votre page actuelle

Si vous optez pour la deuxième solution (moins coûteuse), vous devrez adapter vos composants existants. Par exemple, si vous avez un tableau avec 3 onglets, vous souhaiterez probablement afficher le contenu de tous les onglets. Quelque chose comme afficher les onglets les uns après les autres peut faire l'affaire :

Uniquement dynamique :

<Table selectedTabIndex="tab1" />

Dynamique et Statique :

const tabNames = ['tab1', 'tab2', 'tab3']

(isPrintable ?
	tabNames.map(tabName => <Table key={tabName} selectedTab={tabName} /> :
	<Table selectedTabIndex='tab1' />
);

Dans ce cas, les isPrintableprops détermineront s'il faut afficher les 3 onglets, ou juste le premier. Vous pouvez transmettre ces accessoires à chaque composant dynamique de votre page, qui doit être adapté pour l'impression.

Gérer les sauts de page et la taille fixe avec CSS

Comme vous pouvez le voir avec l'exemple Boursorama, vos composants peuvent être coupés entre 2 pages lorsque vous essayez d'imprimer votre page. Cela se produit parce que votre navigateur Web n'a aucune idée de l'endroit où couper la page si vous ne le lui dites pas. C'est là qu'intervient la break-insidepropriété CSS. Vous ne voulez évidemment pas que votre ensemble d'onglets précédent soit coupé au milieu. Ni vos graphiques ni presque aucun composant de votre page. Ensuite, vous devrez adapter le code précédent pour ajouter cette propriété CSS. Cela fonctionnerait avec inline-css mais vous ne voulez probablement pas ajouter le style={{ breakInside: 'avoid' }}partout dans vos fichiers jsx/tsx.

Vous préférez utiliser des feuilles de style. Et au lieu d'ajouter cette propriété sur chaque classe CSS déjà existante, vous voudrez utiliser l' media @printoption. Cela vous permettra de personnaliser votre page Web pour l'impression uniquement ! Par exemple, vous voudrez peut-être que votre texte soit un peu plus grand ou qu'il ait une couleur grise lisse sur la version imprimable, pour une raison esthétique ou de commodité.

Nous allons simplement ajouter ceci @media objectdans votre fichier CSS :

media @print {
  body: {
    font-size: "16px";
    color: "lightgrey";
  }

  .no-break-inside {
    // apply this class to every component that shouldn't be cut off between to pages of your PDF
    break-inside: "avoid";
  }

  .break-before {
    // apply this class to every component that should always display on next page
    break-before: "always";
  }
}
<MyComponent isPrintable=true className="no-break-inside" />

Ces quelques astuces CSS devraient vous aider à améliorer considérablement le rendu de votre page web.

Comment utiliser Puppeteer pour générer vos PDF

Maintenant, votre page est prête à être imprimée. Vous le savez lorsque vous passez les isPrintableaccessoires à votre page, faites un clic droit + imprimer sur votre navigateur, et vous êtes assez à l'aise avec ce que vous voyez. Voici la partie de l'impression. Vous avez maintenant une version imprimable de votre page Web, mais les utilisateurs n'en ont aucune idée, et même si le ctrl + P sur le site Web, ils verront la version "dynamique" de la page Web. Pour leur permettre de générer la version PDF et d'automatiser la génération de la dernière, vous souhaitez probablement ajouter un bouton qui générera directement le PDF côté serveur, et même ajouter quelques personnalisations. C'est à cela, entre autres, que Marionnettiste sert.

Comment fonctionne Marionnettiste ?

Puppeteer est un moyen courant et naturel de contrôler Chrome. Il offre un accès complet aux fonctionnalités du navigateur et, plus important encore, peut exécuter Chrome en mode entièrement sans tête sur un serveur distant [...]

—Dima Bekerman, https://www.imperva.com/blog/headless-chrome-devops-love-it-so-do-hackers-heres-why/

Schéma du fonctionnement de Puppeteer côté serveur

La génération de l'application React est effectuée par un navigateur Web. Nous avons besoin d'un environnement minimal capable d'exécuter du javascript pour rendre un DOM. Marionnettiste le fera en lançant un chrome sans tête. Désormais, et puisque la génération se fait sur le serveur, le navigateur web n'a plus besoin d'avoir une interface utilisateur graphique (GUI). Chromium avec générer la version imprimable : la même page que l'utilisateur voit sur son navigateur Web mais avec les isPrintableaccessoires activés. Ensuite, Puppeteer exécutera la pdffonction sur la page avec des options personnalisées qui déclencheront l'impression de la page.

Ajoutez simplement le bouton avec l'URL qui appelle le service d'impression :

<Button onClick={window.open(downloadUrl, "_blank")}>Download as PDF</Button>

Il downloadUrls'agit en fait d'une requête GET sur votre serveur qui exécutera Puppeteer sur le serveur et renverra le contenu avec le type de contenuapplication/pdf

Alors, à quoi ressemble ce code Puppeteer ?

Comment l'utiliser?

Pour pouvoir réellement télécharger le PDF, il vous suffit de quelques lignes de code.

Le code minimal ressemblerait alors à :

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch(); // launch a browser (chromium by default but you can chose another one)
  const page = await browser.newPage(); // open a page in the browser
  await page.goto("https://printable-version-of-my-wbe-page.com", {
    waitUntil: "networkidle2",
  }); // visit the printable version of your page
  await page.pdf({ format: "a4", path: "./my_file.pdf" }); // generate the PDF 🎉
  await browser.close(); // don't forget to close the browser. Otherwise, it may cause performances issues or the server may even crash..
})();

Ce sont les étapes courantes dont vous aurez besoin pour générer le PDF. En fonction de votre backend, vous ne souhaitez probablement pas ne pas télécharger le PDF sur le serveur mais le rendre sur un objet de réponse, pour le renvoyer au client (le navigateur Web de l'utilisateur). Il faut ensuite adapter la page.pdf()méthode avec const buffer = await page.pdf({ format: 'a4'});et renvoyer ce tampon sur la _blankpage que l'utilisateur a ouverte sur son navigateur, en attente d'une réponse.

Ajouter quelques options pour personnaliser le PDF

Vous pouvez bien sûr adapter les options dont vous disposez naturellement sur votre navigateur, comme la taille du papier, l'échelle, les marges, etc. à l'aide de la documentation officielle : https://github.com/puppeteer/puppeteer/blob/v10 .4.0/docs/api.md#pagepdfoptions .

Une option intéressante que je recommande, principalement parce que celle par défaut fournie par Google Chrome est vraiment moche, est le modèle d'en-tête ou de pied de page. Il vous suffit de lire un modèle de fichier HTML et de lui transmettre les données que vous souhaitez afficher, telles que la date actuelle, le numéro de page pour chaque page ou même une image/logo :

const footerBase = fs.readFileSync("./footer.html", "utf8");

customFooter = footerBase
  .replace("{{date}}", new Date())
  .replace("{{image_data}}", imageData);

await page.pdf({ format: "a4", footerTemplate: customFooter });

à l'aide d'un modèle html

<style>
#logo {
  height: 40px;
  content: url("data:image/png;base64,{{image_data}}");
}
</style>

<div id="body">
  <div id="page-number-paragraph">
    <span id="date">{{date}}</span>
    <span>Page</span>
    <span class="pageNumber"/></span>
    <span>/</span>
    <span class="totalPages"></span>
  </div>
  <div id="brand-container">
    <span id="logo"></span>
  </div>
</div>

Vous avez maintenant fourni à votre PDF un pied de page entièrement personnalisé.

Il existe de nombreuses autres options concernant, la génération de PDF, mais aussi pour les étapes précédentes de lancement du navigateur, d'ouverture d'une nouvelle page, d'aller à l'URL, qui vous permettront de personnaliser entièrement votre génération de PDF sur le serveur.

Conclusion

Enfin, en adaptant votre code React/CSS et en utilisant Puppeteer, vous pouvez facilement fournir un PDF entièrement personnalisé de votre page. De plus, Puppeteer fait tout le travail côté serveur. Ce qui rend cette fonctionnalité totalement transparente, assez rapide pour l'utilisateur final, et avec le même résultat pour chaque utilisateur sur n'importe quel navigateur ! Puppeteer est vraiment puissant et possède de nombreuses options qui rendent la génération de PDF assez facile pour les développeurs, et avec un rendu beaucoup plus personnalisé et beau que celui par défaut sur les navigateurs des utilisateurs.

Source : https://blog.theodo.com/2021/10/pdf-generation-react-puppeteer/

 #puppeteer #pdf #react 

What is GEEK

Buddha Community

Comment Générer De Beaux PDF Avec React Et Puppeteer
Autumn  Blick

Autumn Blick

1598839687

How native is React Native? | React Native vs Native App Development

If you are undertaking a mobile app development for your start-up or enterprise, you are likely wondering whether to use React Native. As a popular development framework, React Native helps you to develop near-native mobile apps. However, you are probably also wondering how close you can get to a native app by using React Native. How native is React Native?

In the article, we discuss the similarities between native mobile development and development using React Native. We also touch upon where they differ and how to bridge the gaps. Read on.

A brief introduction to React Native

Let’s briefly set the context first. We will briefly touch upon what React Native is and how it differs from earlier hybrid frameworks.

React Native is a popular JavaScript framework that Facebook has created. You can use this open-source framework to code natively rendering Android and iOS mobile apps. You can use it to develop web apps too.

Facebook has developed React Native based on React, its JavaScript library. The first release of React Native came in March 2015. At the time of writing this article, the latest stable release of React Native is 0.62.0, and it was released in March 2020.

Although relatively new, React Native has acquired a high degree of popularity. The “Stack Overflow Developer Survey 2019” report identifies it as the 8th most loved framework. Facebook, Walmart, and Bloomberg are some of the top companies that use React Native.

The popularity of React Native comes from its advantages. Some of its advantages are as follows:

  • Performance: It delivers optimal performance.
  • Cross-platform development: You can develop both Android and iOS apps with it. The reuse of code expedites development and reduces costs.
  • UI design: React Native enables you to design simple and responsive UI for your mobile app.
  • 3rd party plugins: This framework supports 3rd party plugins.
  • Developer community: A vibrant community of developers support React Native.

Why React Native is fundamentally different from earlier hybrid frameworks

Are you wondering whether React Native is just another of those hybrid frameworks like Ionic or Cordova? It’s not! React Native is fundamentally different from these earlier hybrid frameworks.

React Native is very close to native. Consider the following aspects as described on the React Native website:

  • Access to many native platforms features: The primitives of React Native render to native platform UI. This means that your React Native app will use many native platform APIs as native apps would do.
  • Near-native user experience: React Native provides several native components, and these are platform agnostic.
  • The ease of accessing native APIs: React Native uses a declarative UI paradigm. This enables React Native to interact easily with native platform APIs since React Native wraps existing native code.

Due to these factors, React Native offers many more advantages compared to those earlier hybrid frameworks. We now review them.

#android app #frontend #ios app #mobile app development #benefits of react native #is react native good for mobile app development #native vs #pros and cons of react native #react mobile development #react native development #react native experience #react native framework #react native ios vs android #react native pros and cons #react native vs android #react native vs native #react native vs native performance #react vs native #why react native #why use react native

Léon  Peltier

Léon Peltier

1659022266

Comment Générer De Beaux PDF Avec React Et Puppeteer

J'ai récemment dû fournir une nouvelle fonctionnalité sur mon projet : celle du "téléchargement en PDF". La première chose que je me suis demandé était pourquoi devrions-nous fournir cette fonctionnalité ? N'existe-t-il pas déjà nativement avec à peu près tous les navigateurs Web avec une option clic droit / imprimer / "enregistrer en pdf" ? Eh bien, j'ai essayé sur ma page Web et le résultat était vraiment décevant:

  • J'ai eu des sauts de page au milieu de mes tableaux de données, de mes graphiques ou de tout composant React qui ne sont pas censés être divisés sur différentes pages
  • Je n'avais pas de titre, d'en-tête, de numéro de page à l'exception des vilains défauts fournis par les options du navigateur
  • J'ai eu beaucoup d'autres problèmes UX/UI qui rendaient le PDF assez illisible

Exemple sur une page aléatoire Boursorama , qui ressemble à :

le rendu:

C'est alors que j'ai dit "ok cette fonctionnalité en vaut peut-être la peine", mais comment dois-je faire ? Il existe de nombreuses bibliothèques open source capables de générer des PDF. Mais mon choix s'est porté naturellement sur la bibliothèque bien connue développée par google : Puppeteer. Selon moi, c'est le moyen le plus simple de gérer la génération PDF d'applications à page unique. Ce n'est peut-être pas le cas si vous ne traitez pas avec des bundles javascript mais avec du HTML/CSS brut. En effet, il existe des solutions plus simples pour ce cas d'utilisation comme wkhtmltopdf, html-pdf-node ou jspdf par exemple.

Dans cet article, je souhaite vous donner quelques astuces pour générer de beaux PDF de SPA avec Puppeteer. Dans un premier temps, je vais vous expliquer comment vous pouvez créer une version imprimable de votre page avec React et Puppeteer. Ensuite, je vous montrerai comment utiliser Puppeteer pour la génération de votre nouvelle page imprimable.

Rendre une version imprimable de votre page

Pour cette partie, vous n'avez pas réellement besoin d'avoir Puppeteer ou tout autre service d'impression configuré. Vous pouvez apporter vos modifications à votre code comme d'habitude, puis ctrl+P sur votre page pour voir à quoi il ressemble :

Cependant, la boucle de rétroaction n'est pas aussi rapide que d'habitude.

Pour adapter votre code à l'impression, vous devez contourner les 2 principales différences entre une page web et un PDF :

  • Les composants d'une application React sont dynamiques alors qu'un PDF est un fichier statique
  • Un PDF a des sauts de page et une taille fixe alors qu'une page Web est une application "d'une page" avec une taille de fenêtre d'affichage variable

De la page Web dynamique au rendu statique

Créez la "version imprimable" de votre SPA avec React. Pour créer la version imprimable de notre page, vous devrez ajouter/supprimer/modifier les différents éléments qui composent la page.

Vous avez essentiellement 2 solutions pour cette partie :

  • créer un tout nouveau design personnalisé pour votre page
  • adapter votre page actuelle

Si vous optez pour la deuxième solution (moins coûteuse), vous devrez adapter vos composants existants. Par exemple, si vous avez un tableau avec 3 onglets, vous souhaiterez probablement afficher le contenu de tous les onglets. Quelque chose comme afficher les onglets les uns après les autres peut faire l'affaire :

Uniquement dynamique :

<Table selectedTabIndex="tab1" />

Dynamique et Statique :

const tabNames = ['tab1', 'tab2', 'tab3']

(isPrintable ?
	tabNames.map(tabName => <Table key={tabName} selectedTab={tabName} /> :
	<Table selectedTabIndex='tab1' />
);

Dans ce cas, les isPrintableprops détermineront s'il faut afficher les 3 onglets, ou juste le premier. Vous pouvez transmettre ces accessoires à chaque composant dynamique de votre page, qui doit être adapté pour l'impression.

Gérer les sauts de page et la taille fixe avec CSS

Comme vous pouvez le voir avec l'exemple Boursorama, vos composants peuvent être coupés entre 2 pages lorsque vous essayez d'imprimer votre page. Cela se produit parce que votre navigateur Web n'a aucune idée de l'endroit où couper la page si vous ne le lui dites pas. C'est là qu'intervient la break-insidepropriété CSS. Vous ne voulez évidemment pas que votre ensemble d'onglets précédent soit coupé au milieu. Ni vos graphiques ni presque aucun composant de votre page. Ensuite, vous devrez adapter le code précédent pour ajouter cette propriété CSS. Cela fonctionnerait avec inline-css mais vous ne voulez probablement pas ajouter le style={{ breakInside: 'avoid' }}partout dans vos fichiers jsx/tsx.

Vous préférez utiliser des feuilles de style. Et au lieu d'ajouter cette propriété sur chaque classe CSS déjà existante, vous voudrez utiliser l' media @printoption. Cela vous permettra de personnaliser votre page Web pour l'impression uniquement ! Par exemple, vous voudrez peut-être que votre texte soit un peu plus grand ou qu'il ait une couleur grise lisse sur la version imprimable, pour une raison esthétique ou de commodité.

Nous allons simplement ajouter ceci @media objectdans votre fichier CSS :

media @print {
  body: {
    font-size: "16px";
    color: "lightgrey";
  }

  .no-break-inside {
    // apply this class to every component that shouldn't be cut off between to pages of your PDF
    break-inside: "avoid";
  }

  .break-before {
    // apply this class to every component that should always display on next page
    break-before: "always";
  }
}
<MyComponent isPrintable=true className="no-break-inside" />

Ces quelques astuces CSS devraient vous aider à améliorer considérablement le rendu de votre page web.

Comment utiliser Puppeteer pour générer vos PDF

Maintenant, votre page est prête à être imprimée. Vous le savez lorsque vous passez les isPrintableaccessoires à votre page, faites un clic droit + imprimer sur votre navigateur, et vous êtes assez à l'aise avec ce que vous voyez. Voici la partie de l'impression. Vous avez maintenant une version imprimable de votre page Web, mais les utilisateurs n'en ont aucune idée, et même si le ctrl + P sur le site Web, ils verront la version "dynamique" de la page Web. Pour leur permettre de générer la version PDF et d'automatiser la génération de la dernière, vous souhaitez probablement ajouter un bouton qui générera directement le PDF côté serveur, et même ajouter quelques personnalisations. C'est à cela, entre autres, que Marionnettiste sert.

Comment fonctionne Marionnettiste ?

Puppeteer est un moyen courant et naturel de contrôler Chrome. Il offre un accès complet aux fonctionnalités du navigateur et, plus important encore, peut exécuter Chrome en mode entièrement sans tête sur un serveur distant [...]

—Dima Bekerman, https://www.imperva.com/blog/headless-chrome-devops-love-it-so-do-hackers-heres-why/

Schéma du fonctionnement de Puppeteer côté serveur

La génération de l'application React est effectuée par un navigateur Web. Nous avons besoin d'un environnement minimal capable d'exécuter du javascript pour rendre un DOM. Marionnettiste le fera en lançant un chrome sans tête. Désormais, et puisque la génération se fait sur le serveur, le navigateur web n'a plus besoin d'avoir une interface utilisateur graphique (GUI). Chromium avec générer la version imprimable : la même page que l'utilisateur voit sur son navigateur Web mais avec les isPrintableaccessoires activés. Ensuite, Puppeteer exécutera la pdffonction sur la page avec des options personnalisées qui déclencheront l'impression de la page.

Ajoutez simplement le bouton avec l'URL qui appelle le service d'impression :

<Button onClick={window.open(downloadUrl, "_blank")}>Download as PDF</Button>

Il downloadUrls'agit en fait d'une requête GET sur votre serveur qui exécutera Puppeteer sur le serveur et renverra le contenu avec le type de contenuapplication/pdf

Alors, à quoi ressemble ce code Puppeteer ?

Comment l'utiliser?

Pour pouvoir réellement télécharger le PDF, il vous suffit de quelques lignes de code.

Le code minimal ressemblerait alors à :

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch(); // launch a browser (chromium by default but you can chose another one)
  const page = await browser.newPage(); // open a page in the browser
  await page.goto("https://printable-version-of-my-wbe-page.com", {
    waitUntil: "networkidle2",
  }); // visit the printable version of your page
  await page.pdf({ format: "a4", path: "./my_file.pdf" }); // generate the PDF 🎉
  await browser.close(); // don't forget to close the browser. Otherwise, it may cause performances issues or the server may even crash..
})();

Ce sont les étapes courantes dont vous aurez besoin pour générer le PDF. En fonction de votre backend, vous ne souhaitez probablement pas ne pas télécharger le PDF sur le serveur mais le rendre sur un objet de réponse, pour le renvoyer au client (le navigateur Web de l'utilisateur). Il faut ensuite adapter la page.pdf()méthode avec const buffer = await page.pdf({ format: 'a4'});et renvoyer ce tampon sur la _blankpage que l'utilisateur a ouverte sur son navigateur, en attente d'une réponse.

Ajouter quelques options pour personnaliser le PDF

Vous pouvez bien sûr adapter les options dont vous disposez naturellement sur votre navigateur, comme la taille du papier, l'échelle, les marges, etc. à l'aide de la documentation officielle : https://github.com/puppeteer/puppeteer/blob/v10 .4.0/docs/api.md#pagepdfoptions .

Une option intéressante que je recommande, principalement parce que celle par défaut fournie par Google Chrome est vraiment moche, est le modèle d'en-tête ou de pied de page. Il vous suffit de lire un modèle de fichier HTML et de lui transmettre les données que vous souhaitez afficher, telles que la date actuelle, le numéro de page pour chaque page ou même une image/logo :

const footerBase = fs.readFileSync("./footer.html", "utf8");

customFooter = footerBase
  .replace("{{date}}", new Date())
  .replace("{{image_data}}", imageData);

await page.pdf({ format: "a4", footerTemplate: customFooter });

à l'aide d'un modèle html

<style>
#logo {
  height: 40px;
  content: url("data:image/png;base64,{{image_data}}");
}
</style>

<div id="body">
  <div id="page-number-paragraph">
    <span id="date">{{date}}</span>
    <span>Page</span>
    <span class="pageNumber"/></span>
    <span>/</span>
    <span class="totalPages"></span>
  </div>
  <div id="brand-container">
    <span id="logo"></span>
  </div>
</div>

Vous avez maintenant fourni à votre PDF un pied de page entièrement personnalisé.

Il existe de nombreuses autres options concernant, la génération de PDF, mais aussi pour les étapes précédentes de lancement du navigateur, d'ouverture d'une nouvelle page, d'aller à l'URL, qui vous permettront de personnaliser entièrement votre génération de PDF sur le serveur.

Conclusion

Enfin, en adaptant votre code React/CSS et en utilisant Puppeteer, vous pouvez facilement fournir un PDF entièrement personnalisé de votre page. De plus, Puppeteer fait tout le travail côté serveur. Ce qui rend cette fonctionnalité totalement transparente, assez rapide pour l'utilisateur final, et avec le même résultat pour chaque utilisateur sur n'importe quel navigateur ! Puppeteer est vraiment puissant et possède de nombreuses options qui rendent la génération de PDF assez facile pour les développeurs, et avec un rendu beaucoup plus personnalisé et beau que celui par défaut sur les navigateurs des utilisateurs.

Source : https://blog.theodo.com/2021/10/pdf-generation-react-puppeteer/

 #puppeteer #pdf #react 

joe biden

1615785369

Converta e-mails EML para Adobe PDF com o conversor de EML para PDF

Para converter arquivos EML em formato PDF, o Datavare é o aplicativo mais adequado. O aplicativo oferece muitas vantagens para que os usuários possam converter os arquivos facilmente. Isso ajuda a fazer uma conversão direta. O aplicativo é mais adequado para cada usuário e, portanto, converte os arquivos EML de uma forma precisa e sem erros. Qualquer usuário pode fazer a conversão de arquivos EML para o formato PDF, pois o aplicativo é muito fácil de operar. Usuários sem formação técnica também podem usar este aplicativo incrível sem qualquer problema.

Embora o aplicativo seja muito avançado, ainda assim, com sua interface gráfica amigável, é fácil converter arquivos EML para o formato PDF. Para tal não é necessária qualquer tipo de assistência técnica. A tarefa de conversão é fácil e simples de fazer com este aplicativo de terceiros. É um aplicativo altamente compatível que funciona perfeitamente em qualquer versão do Windows. Para usar o aplicativo, não é necessário que a versão do Windows seja a mais recente ou a mais antiga.

Além disso, há muitas vantagens em usar esse aplicativo notável. Vamos falar sobre algumas dessas vantagens que ela confere:

  • Concede conversão direta
  • Transfere arquivos em alta velocidade
  • Sem restrição de tamanho
  • Aplicação independente
  • Conversão sem erros

Essas vantagens tornam o aplicativo mais adequado para uso. Vale a pena usar este aplicativo para converter arquivos EML em formato PDF. Baixe sua versão de teste agora.

Passos para conversão

Para continuar a tarefa de conversão, é necessário seguir alguns passos. O processo de conversão ocorre em um processo passo a passo. Essas etapas são muito fáceis de executar por qualquer usuário. Não há necessidade de nenhuma orientação técnica para auxiliar essas etapas.

Agora, vamos apenas dar uma olhada nessas etapas simples, depois de baixar e iniciar o aplicativo;
Passo 1- Abra o aplicativo e escolha os arquivos EML que você deseja apenas converter.
Etapa 2 - Escolha o local onde deseja salvar os arquivos convertidos.
Etapa 3- Clique no botão converter agora.

Com essas 3 etapas fáceis, você pode converter seus arquivos EML em formato PDF.

Essas etapas são muito fáceis, e o aplicativo também fornece instantâneos adequados das etapas fornecidas para a assistência adequada do usuário. Além disso, uma interface de usuário fácil é fornecida pelo aplicativo para oferecer suporte a seus usuários. Em primeiro lugar, use a versão demo do aplicativo.

Características principais

Com muitas vantagens, o aplicativo também disponibiliza alguns recursos fundamentais aos seus usuários para a melhor conversão dos arquivos EML. Vejamos alguns desses recursos:

Conversão perfeita
Com uma velocidade rápida, é imprescindível que seus arquivos sejam convertidos na perfeição, sem nenhuma alteração dos dados. Este aplicativo é adequado para converter seus dados na perfeição.

Conversão seletiva
É necessário que os arquivos que você escolher sejam os que somente devem ser convertidos. Portanto, este aplicativo inteligente converte apenas os arquivos que você seleciona para a conversão. Não, outros arquivos EML são convertidos para o formato PSF.

Conversão em lote
Os dados que você escolher são convertidos em lotes. Isso significa que você pode escolher os arquivos que deseja converter ou pode escolher a pasta. Somando-se a isso, a filtragem de arquivos é fornecida no modo de arquivo

Salve os dados de acordo
Você pode escolher os arquivos a serem convertidos, bem como o local. O aplicativo oferece suporte ao salvamento personalizado de dados. Isso significa que, sem qualquer obrigação, você pode salvar seus dados de forma fácil e adequada. Esses recursos fornecem um resultado proveitoso para os usuários.

Declaração final

Os usuários podem baixar o EML para PDF Converter para converter seus arquivos EML para o formato PD. O aplicativo é fácil de usar em qualquer versão do Windows. O usuário pode converter quantos arquivos quiser sem qualquer obrigação, uma vez que adquira a versão licenciada do aplicativo.

Recursos como conversão em alta velocidade, excelente precisão e grande compatibilidade tornam o uso do aplicativo mais útil. Este aplicativo independente executa a tarefa de conversão diretamente sem qualquer problema. Portanto, experimente a versão demo gratuita do aplicativo agora e examine-o convertendo seus poucos arquivos EML em formato PDF.
Se você enfrentar algum tipo de problema também pode entrar em contato com o número de atendimento ao cliente fornecido pelo aplicativo ao seu usuário. Este serviço de ajuda ao cliente está disponível 24 horas por dia, 7 dias por semana.

Mais informações:- https://www.datavare.com/software/eml-to-pdf-converter-expert.html

#conversor de eml para pdf #migração de eml para pdf #exportador de eml para pdf #converter eml para pdf #importar eml para pdf

Cayla  Erdman

Cayla Erdman

1594369800

Introduction to Structured Query Language SQL pdf

SQL stands for Structured Query Language. SQL is a scripting language expected to store, control, and inquiry information put away in social databases. The main manifestation of SQL showed up in 1974, when a gathering in IBM built up the principal model of a social database. The primary business social database was discharged by Relational Software later turning out to be Oracle.

Models for SQL exist. In any case, the SQL that can be utilized on every last one of the major RDBMS today is in various flavors. This is because of two reasons:

1. The SQL order standard is genuinely intricate, and it isn’t handy to actualize the whole standard.

2. Every database seller needs an approach to separate its item from others.

Right now, contrasts are noted where fitting.

#programming books #beginning sql pdf #commands sql #download free sql full book pdf #introduction to sql pdf #introduction to sql ppt #introduction to sql #practical sql pdf #sql commands pdf with examples free download #sql commands #sql free bool download #sql guide #sql language #sql pdf #sql ppt #sql programming language #sql tutorial for beginners #sql tutorial pdf #sql #structured query language pdf #structured query language ppt #structured query language

Mathew Rini

1615544450

How to Select and Hire the Best React JS and React Native Developers?

Since March 2020 reached 556 million monthly downloads have increased, It shows that React JS has been steadily growing. React.js also provides a desirable amount of pliancy and efficiency for developing innovative solutions with interactive user interfaces. It’s no surprise that an increasing number of businesses are adopting this technology. How do you select and recruit React.js developers who will propel your project forward? How much does a React developer make? We’ll bring you here all the details you need.

What is React.js?

Facebook built and maintains React.js, an open-source JavaScript library for designing development tools. React.js is used to create single-page applications (SPAs) that can be used in conjunction with React Native to develop native cross-platform apps.

React vs React Native

  • React Native is a platform that uses a collection of mobile-specific components provided by the React kit, while React.js is a JavaScript-based library.
  • React.js and React Native have similar syntax and workflows, but their implementation is quite different.
  • React Native is designed to create native mobile apps that are distinct from those created in Objective-C or Java. React, on the other hand, can be used to develop web apps, hybrid and mobile & desktop applications.
  • React Native, in essence, takes the same conceptual UI cornerstones as standard iOS and Android apps and assembles them using React.js syntax to create a rich mobile experience.

What is the Average React Developer Salary?

In the United States, the average React developer salary is $94,205 a year, or $30-$48 per hour, This is one of the highest among JavaScript developers. The starting salary for junior React.js developers is $60,510 per year, rising to $112,480 for senior roles.

* React.js Developer Salary by Country

  • United States- $120,000
  • Canada - $110,000
  • United Kingdom - $71,820
  • The Netherlands $49,095
  • Spain - $35,423.00
  • France - $44,284
  • Ukraine - $28,990
  • India - $9,843
  • Sweden - $55,173
  • Singapore - $43,801

In context of software developer wage rates, the United States continues to lead. In high-tech cities like San Francisco and New York, average React developer salaries will hit $98K and $114per year, overall.

However, the need for React.js and React Native developer is outpacing local labour markets. As a result, many businesses have difficulty locating and recruiting them locally.

It’s no surprise that for US and European companies looking for professional and budget engineers, offshore regions like India are becoming especially interesting. This area has a large number of app development companies, a good rate with quality, and a good pool of React.js front-end developers.

As per Linkedin, the country’s IT industry employs over a million React specialists. Furthermore, for the same or less money than hiring a React.js programmer locally, you may recruit someone with much expertise and a broader technical stack.

How to Hire React.js Developers?

  • Conduct thorough candidate research, including portfolios and areas of expertise.
  • Before you sit down with your interviewing panel, do some homework.
  • Examine the final outcome and hire the ideal candidate.

Why is React.js Popular?

React is a very strong framework. React.js makes use of a powerful synchronization method known as Virtual DOM, which compares the current page architecture to the expected page architecture and updates the appropriate components as long as the user input.

React is scalable. it utilises a single language, For server-client side, and mobile platform.

React is steady.React.js is completely adaptable, which means it seldom, if ever, updates the user interface. This enables legacy projects to be updated to the most new edition of React.js without having to change the codebase or make a few small changes.

React is adaptable. It can be conveniently paired with various state administrators (e.g., Redux, Flux, Alt or Reflux) and can be used to implement a number of architectural patterns.

Is there a market for React.js programmers?
The need for React.js developers is rising at an unparalleled rate. React.js is currently used by over one million websites around the world. React is used by Fortune 400+ businesses and popular companies such as Facebook, Twitter, Glassdoor and Cloudflare.

Final thoughts:

As you’ve seen, locating and Hire React js Developer and Hire React Native developer is a difficult challenge. You will have less challenges selecting the correct fit for your projects if you identify growing offshore locations (e.g. India) and take into consideration the details above.

If you want to make this process easier, You can visit our website for more, or else to write a email, we’ll help you to finding top rated React.js and React Native developers easier and with strives to create this operation

#hire-react-js-developer #hire-react-native-developer #react #react-native #react-js #hire-react-js-programmer