Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
L'interactivité en temps réel et la création de contenu dynamique sont désormais des prérequis dans le monde du développement web moderne pour offrir des expériences utilisateur captivantes. Le partage instantané de données est rendu possible par des technologies telles queSocket.IO, qui permet une communication bidirectionnelle en temps réel entre les clients et les serveurs. En attendant,IronPDFfournit des fonctionnalités puissantes pour produire des documents PDF de qualité exceptionnelle à partir de texte HTML dans un environnement Node.js.
QuandSocket.IO etIronPDFsont intégrées, les développeurs peuvent créer des applications qui permettent aux utilisateurs d'interagir en temps réel et de voir immédiatement les effets de leurs actions. Des exemples de ces applications incluent la capacité de générer et de télécharger des rapports PDF, des factures et d'autres documents créés dynamiquement. Cette combinaison puissante est particulièrement adaptée aux cas d'utilisation dans le commerce électronique, les systèmes de rapport, les plateformes éducatives et d'autres domaines où des mises à jour en temps réel et un retour d'information rapide sont nécessaires.
Pour montrer comment ces technologies peuvent être combinées pour produire une expérience utilisateur fluide et engageante, nous allons examiner comment mettre en place une application Node.js qui utilise Socket.IO pour la communication en temps réel par sockets et IronPDF pour la génération de PDF.
La communication en temps réel, bidirectionnelle et basée sur des événements entre clients et serveurs est rendue possible par la robuste bibliothèque javascript client de Socket.IO. Construit comme une extension de WebSockets, il offre des fonctionnalités supplémentaires et des options de secours pour garantir une communication fiable dans divers environnements. Pour créer des applications en ligne dynamiques nécessitant un partage de données instantané, telles que des programmes de chat, des outils de collaboration, des mises à jour en temps réel et des plateformes de jeux, la bibliothèque cliente Socket.IO en javascript est une excellente option.
Permet au serveur HTTP, au client, à l'application IO et au serveur IO de communiquer dans les deux sens instantanément. Il est parfait pour les applications qui nécessitent des mises à jour de données en temps réel, car il garantit une livraison de messages à faible latence.
Permet aux développeurs de créer et de gérer facilement des événements sur mesure grâce à l'utilisation d'un paradigme basé sur les événements. réduit la complexité de la gestion des interactions complexes client-serveur.
Fonctionne parfaitement sur divers systèmes et navigateurs. offre des choix de secours(comme le sondage étendu)dans les situations où les WebSockets ne sont pas pris en charge.
Prend en charge la connexion de plusieurs adaptateurs, y compris Redis, pour l'échelle de connexion horizontale, permettant à l'application de se connecter et de gérer de nombreux clients connectés simultanément. Grâce à son design efficace d'utilisation des ressources, il peut être utilisé dans des applications à fort trafic.
Résilience et fiabilité en essayant automatiquement de se reconnecter avec succès et de se reconnecter à jamais en cas de perte de connexion. Logique de reconnexion configurable pour réguler la fréquence et la nature des tentatives de reconnexion.
Permet d'organiser les sockets connectés aux clients en "salles", de sorte que les messages puissent être diffusés à un objet socket d'un client particulier ou à des sous-ensembles de clients socket plus facilement. L'entrée et la sortie dynamiques des salles sont prises en charge, ce qui est utile pour les jeux, les applications de chat et d'autres outils de langues et de travail d'équipe.
Permet le traitement des événements, l'émission de données d'événement et de messages par des fonctions de middleware avant leur réception par des gestionnaires. bénéfique pour des tâches comme la validation de données des messages de chat, la journalisation des messages de chat et l'authentification.
prend en charge plusieurs fonctionnalités de sécurité, notamment l'autorisation, l'authentification et CORS(Partage de ressources entre origines)paramètres. S'intègre avec HTTPS et d'autres protocoles de sécurité pour garantir des voies de communication sécurisées.
Les capacités intégrées de débogage et de journalisation facilitent le diagnostic des problèmes suite au code, ainsi que la surveillance du comportement du programme. Les niveaux de journalisation ajustables vous permettent de gérer le niveau de détail de la sortie du journal de la console.
La bibliothèque Socket.IO permet aux clients et aux serveurs de communiquer en temps réel, dans les deux sens et sur la base d'événements. Voici un tutoriel étape par étape sur la configuration d'un client Socket.IO dans un programme Node.js.
Utilisez npm pour installer les packages socket.io et express :
npm install express
npm install socket.io
npm install express
npm install socket.io
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install express npm install socket.io
Établissez le serveur WebSocket Express fondamental avec l'intégration de Socket.IO en créant un fichier appelé server.js.
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
// Serve static files from the "public" directory
app.use(express.static('public'));
// Handle socket connection
io.on('connection', (socket) => {
console.log('a user connected');
// Handle custom event from client
socket.on('message', (msg) => {
console.log('message received: ' + msg);
// Broadcast the message to all clients
io.emit('message', msg);
});
// Handle disconnection
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
const PORT = process.env.PORT
3000;
server.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
// Serve static files from the "public" directory
app.use(express.static('public'));
// Handle socket connection
io.on('connection', (socket) => {
console.log('a user connected');
// Handle custom event from client
socket.on('message', (msg) => {
console.log('message received: ' + msg);
// Broadcast the message to all clients
io.emit('message', msg);
});
// Handle disconnection
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
const PORT = process.env.PORT
3000;
server.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Private const express = require( 'express');
Private const http = require( 'http');
Private const socketIo = require( 'socket.io');
Private const app = express()
Private const server = http.createServer(app)
Private const io = socketIo(server)
' Serve static files from the "public" directory
app.use(express.static( 'public'));
' Handle socket connection
io.on( 'connection', (socket) =>
If True Then
console.log( 'a user connected');
socket.on( 'message', (msg) =>
If True Then
console.log( 'message received: ' + msg);
io.emit( 'message', msg);
End If
)
socket.on( 'disconnect', () =>
If True Then
console.log( 'user disconnected');
End If
)
End If
)
const PORT = process.env.PORT 3000
server.listen(PORT, Sub()
console.log(`TypeOf Server Is running on port ${PORT}`)
End Sub)
Pour agir en tant que client, créez un répertoire appelé public et un fichier nommé index.html à l'intérieur de celui-ci.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Socket.IO Demo</title>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>Socket.IO Demo</h1>
<button onclick="sendMessage()">Send</button>
<ul id="messages"></ul>
<script>
const socket = io();
// Listen for messages from the server
socket.on('message', (msg) => {
const li = document.createElement('li');
li.textContent = msg;
document.getElementById('messages').appendChild(li);
});
// Function to send a message to the server
function sendMessage() {
const msg = document.getElementById('messageInput').value;
socket.emit('message', msg);
document.getElementById('messageInput').value = '';
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Socket.IO Demo</title>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>Socket.IO Demo</h1>
<button onclick="sendMessage()">Send</button>
<ul id="messages"></ul>
<script>
const socket = io();
// Listen for messages from the server
socket.on('message', (msg) => {
const li = document.createElement('li');
li.textContent = msg;
document.getElementById('messages').appendChild(li);
});
// Function to send a message to the server
function sendMessage() {
const msg = document.getElementById('messageInput').value;
socket.emit('message', msg);
document.getElementById('messageInput').value = '';
}
</script>
</body>
</html>
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Socket.IO Demo</title> <script src="/socket.io/socket.io.js"></script> </head> <body> <h1> Socket.IO Demo</h1> <button onclick="sendMessage()"> Send</button> <ul id="messages"></ul> <script> const socket = io();
"messages"></ul> (Of script) const socket = io()
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Socket.IO Demo</title> <script src="/socket.io/socket.io.js"></script> </head> <body> <h1> Socket.IO Demo</h1> <button onclick="sendMessage()"> Send</button> <ul id="messages"></ul> <script> const socket
"sendMessage()"> Send</button> <ul id="messages"></ul> (Of script) const socket
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Socket.IO Demo</title> <script src="/socket.io/socket.io.js"></script> </head> <body> <h1> Socket.IO Demo</h1> <button onclick="sendMessage()"> Send</button> <ul id
"/socket.io/socket.io.js"></script> </head> (Of body) (Of h1) Socket.IO Demo</h1> <button onclick="sendMessage()"> Send</button> <ul id
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Socket.IO Demo</title> <script src="/socket.io/socket.io.js"></script> </head> <body> <h1> Socket.IO Demo</h1> <button onclick
"width=device-width, initial-scale=1.0"> (Of title) Socket.IO Demo</title> <script src="/socket.io/socket.io.js"></script> </head> (Of body) (Of h1) Socket.IO Demo</h1> <button onclick
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Socket.IO Demo</title> <script src
"viewport" content="width=device-width, initial-scale=1.0"> (Of title) Socket.IO Demo</title> <script src
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content
"UTF-8"> <meta name="viewport" content
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name
"en"> (Of head) <meta charset="UTF-8"> <meta name
Private Private Private Private Private Private Private Private <(Not DOCTYPE) html> <html lang="en"> (Of head) <meta charset
' Listen for messages from the server
socket.on( 'message', (msg) =>
If True Then
const li = document.createElement( 'li');
li.textContent = msg
document.getElementById( 'messages').appendChild(li);
End If
)
' Function to send a message to the server
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' @function sendMessage()
' {
' const msg = document.getElementById('messageInput').value;
' socket.emit('message', msg);
''INSTANT VB TODO TASK: The following line uses invalid syntax:
'' document.getElementById('messageInput').value = ''; } </script> </body> </html>
Nous pouvons créer des applications web interactives qui peuvent générer et servir des PDF rapidement en combinantIronPDFpour la génération dynamique de PDF avec Socket.IO afin de permettre une communication en temps réel via socket. Vous apprendrez à configurer un projet Node.js qui intègre IronPDF et Socket.IO en suivant ce guide.
Utilisez la bibliothèque robuste IronPDF Node.js pour créer, modifier et convertir des fichiers PDF. Il permet aux programmeurs de travailler avec des PDF existants, de convertir du HTML en PDF et d'effectuer un certain nombre de tâches de programmation liées aux PDF. IronPDF offre un moyen flexible et intuitif de créer des documents PDF de haute qualité, ce qui en fait un bon choix pour les applications nécessitant une génération et un traitement dynamique des PDF.
Certaines des principales fonctionnalités d'IronPDF sont les suivantes :
Nous pouvons convertir le contenu de vos fichiers HTML en documents PDF en utilisant IronPDF. Avec cela, le contenu web peut être transformé en publications PDF esthétiquement belles en utilisant les dernières versions de HTML5, CSS3 et JavaScript.
Du texte, des images, des tableaux et d'autres éléments peuvent être ajoutés aux documents PDF programmatiques nouvellement générés. IronPDF vous permet d'ouvrir et de modifier des documents PDF existants. Vous pouvez ajouter ou modifier le contenu du PDF, ainsi que supprimer des sections spécifiques.
Utilisez le CSS pour styliser le navigateur de l'utilisateur lors de la visualisation de PDFs. Cela inclut la prise en charge de mises en page complexes, de polices, de couleurs et d'autres éléments de conception. Utiliser JavaScript pour rendre le contenu HTML permet à votre navigateur d'ajouter du contenu dynamique aux fichiers PDF.
Installez le package IronPDF requis dans Node.js en utilisant le gestionnaire de packages node pour activer la fonctionnalité IronPDF. Ajoutez la commande suivante :
npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @ironsoftware/ironpdf
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
<title>WebSocket Client</title>
</head>
<body>
<button onclick="sendMessage()">Send</button>
<script>
const socket = io('http://localhost:3000');
// Listen for messages from the server
socket.on('message', (msg) => {
const li = document.createElement('li');
li.textContent = msg;
document.getElementById('messages').appendChild(li);
});
function sendMessage() {
const ITitle = document.getElementById('Title');
const IContent = document.getElementById('content');
const message = {
Title:ITitle.value,
content:IContent.value
};
//ws.send(message);
socket.emit('message', message);
ITitle.value = '';
IContent.value = '';
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
<title>WebSocket Client</title>
</head>
<body>
<button onclick="sendMessage()">Send</button>
<script>
const socket = io('http://localhost:3000');
// Listen for messages from the server
socket.on('message', (msg) => {
const li = document.createElement('li');
li.textContent = msg;
document.getElementById('messages').appendChild(li);
});
function sendMessage() {
const ITitle = document.getElementById('Title');
const IContent = document.getElementById('content');
const message = {
Title:ITitle.value,
content:IContent.value
};
//ws.send(message);
socket.emit('message', message);
ITitle.value = '';
IContent.value = '';
}
</script>
</body>
</html>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script> <title> WebSocket Client</title> </head> <body> <button onclick="sendMessage()"> Send</button> <script> const socket = io('http: socket.on('message', (msg) => { const li = document.createElement('li'); li.textContent = msg; document.getElementById('messages').appendChild(li); }); @function sendMessage() { const ITitle = document.getElementById('Title'); const IContent = document.getElementById('content'); const message = { Title:ITitle.value, content:IContent.value }; socket.emit('message', message); ITitle.value = ''; IContent.value = ''; } </script> </body> </html>
Examinons de plus près le code pour voir comment Socket.IO et IronPDF sont utilisés pour créer des PDF instantanément dans une application Node.js.
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const IronPdf = require("@ironsoftware/ironpdf");
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
const document=IronPdf.PdfDocument;
app.use(express.static('public'));
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('generatePDF', async (data) => {
try {
const pdfPath = await generatePDF(data);
socket.emit('pdfGenerated', { pdfUrl: pdfPath });
} catch (error) {
socket.emit('error', error.message);
}
});
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
const generatePDF = async (data) => {
console.log('pdf generated started');
const htmlContent = `<h1>${data.title}${data.content}</h1>`;
console.log(`Received message into HTML content: ${htmlContent}`);
const pdf = await document.fromHtml(htmlContent);
const filePath = `./public/pdfs/${Date.now()}.pdf`;
await pdf.saveAs(filePath);
console.log('pdf generated completed');
return filePath.replace('./public', '');
};
const PORT = process.env.PORT
3000;
server.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const IronPdf = require("@ironsoftware/ironpdf");
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
const document=IronPdf.PdfDocument;
app.use(express.static('public'));
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('generatePDF', async (data) => {
try {
const pdfPath = await generatePDF(data);
socket.emit('pdfGenerated', { pdfUrl: pdfPath });
} catch (error) {
socket.emit('error', error.message);
}
});
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
const generatePDF = async (data) => {
console.log('pdf generated started');
const htmlContent = `<h1>${data.title}${data.content}</h1>`;
console.log(`Received message into HTML content: ${htmlContent}`);
const pdf = await document.fromHtml(htmlContent);
const filePath = `./public/pdfs/${Date.now()}.pdf`;
await pdf.saveAs(filePath);
console.log('pdf generated completed');
return filePath.replace('./public', '');
};
const PORT = process.env.PORT
3000;
server.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Private const express = require( 'express');
Private const http = require( 'http');
Private const socketIo = require( 'socket.io');
Private const IronPdf = require("@ironsoftware/ironpdf")
Private const app = express()
Private const server = http.createServer(app)
Private const io = socketIo(server)
Private const document=IronPdf.PdfDocument
app.use(express.static( 'public'));
io.on( 'connection', (socket) =>
If True Then
console.log( 'a user connected');
socket.on( 'generatePDF', async(data) =>
If True Then
Try
const pdfPath = Await generatePDF(data)
socket.emit( 'pdfGenerated', { pdfUrl: pdfPath });
Catch e1 As [error]
socket.emit( '@error', @error.message);
End Try
End If
)
socket.on( 'disconnect', () =>
If True Then
console.log( 'user disconnected');
End If
)
End If
)
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
const generatePDF = async(data) =>
If True Then
console.log( 'pdf generated started');
const htmlContent = `(Of h1) $
If True Then
data.title
End If
$
If True Then
data.content
End If
</h1>`
console.log(`Received message into HTML content:= ${htmlContent}`)
const pdf = Await document.fromHtml(htmlContent)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' const filePath = `./public/pdfs/$
' {
' @Date.now()
' }
.pdf`
Await pdf.saveAs(filePath)
console.log( 'pdf generated completed');
Return filePath.replace( './public', '');
End If
const PORT = process.env.PORT 3000
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
server.listen(PORT, () =>
Le code ci-dessus intègre IronPDF pour la production dynamique de PDF et Socket.IO pour la communication en temps réel dans une application Node.js. Les modules requis, tels que socket.io pour la communication en temps réel, ironpdf pour la production de PDF, un serveur HTTP pour générer le client et un serveur d'appel, ainsi qu'une instance côté serveur, et express pour la création du serveur web, sont importés en premier dans le code côté serveur. Les fichiers statiques sont créés dans un répertoire public et servis par l'application Express. Ensuite, le serveur gère un événement personnalisé generatePDF en écoutant les connexions Socket.IO. Le serveur utilise IronPDF pour créer un PDF à partir de contenu HTMLen fonction des données fournies par le client lors de la réception de cet événement. Le PDF est ensuite enregistré dans le système de fichiers, et le côté client reçoit alors un événement de génération de PDF en retour du serveur ainsi que le chemin du fichier du PDF créé.
Un formulaire simple est configuré à la fois côté serveur et côté client via un fichier HTML pour recueillir le titre et le contenu. Lors de la soumission, le formulaire cesse d'exécuter le comportement de soumission par défaut et envoie les données du formulaire avec l'événement generatePDF au serveur.
De plus, le client affiche un lien de téléchargement après avoir écouté l'événement de génération du PDF pour obtenir l'URL du PDF créé. De plus, le client reste attentif à tout événement d'erreur et, si l'un d'eux se produit, affiche une alerte accompagnée du message d'erreur. Cette intégration montre comment utiliser Socket.IO et IronPDF pour créer une application web réactive permettant aux utilisateurs de créer et recevoir des PDF en temps réel.
Une solution puissante pour la production interactive et en temps réel de PDF dans les applications Node.js est d'intégrer leSocket.IOclient avecIronPDF. Les développeurs peuvent construire des applications réactives qui offrent aux utilisateurs un retour d'information rapide en utilisant les capacités de communication en temps réel du client Socket.IO, ce qui peut grandement améliorer l'expérience du serveur et de l'utilisateur. La combinaison avec IronPDF permet le développement dynamique de documents PDF de haute qualité à partir de contenu HTML. Cela le rend parfait pour des applications telles que les systèmes de gestion de contenu, les outils de reporting et les systèmes de facturation qui doivent générer des documents rapidement.
Cette configuration illustre comment la création de contenu dynamique et la communication en temps réel fonctionnent ensemble. Il démontre comment les technologies web de pointe peuvent être utilisées de manière fluide pour apporter des solutions fiables et efficaces à des problèmes complexes. Avec IronPDF gérant la génération de PDF et Socket.IO s'occupant de la transmission de données en temps réel, les développeurs peuvent se concentrer sur la création d'applications web riches en fonctionnalités qui offrent aux utilisateurs des résultats visibles et instantanés. Cette méthode crée de nouvelles opportunités pour le développement d'applications interactives et axées sur les données, en plus d'améliorer la fonctionnalité et l'utilisabilité des applications client en ligne.
En incorporantIronPDFet les produits de Iron Software dans votre pile de développement, nous pouvons garantir que les clients et utilisateurs finaux reçoivent des solutions logicielles haut de gamme et riches en fonctionnalités. De plus, cela permettra l'optimisation des projets et des processus.
IronPDF offre un service deessai gratuità partir de 749 $, en font des partenaires fiables pour les projets de développement de logiciels modernes.
9 produits de l'API .NET pour vos documents de bureau