.NET Core’da NodeServices ile Node.js Modüllerinin Kullanımı

Merhabalar;
Bu yazımda NodeServices ile Node.js modüllerinin kullanımını anlatacağım.

Yapacağımız örnekte bir html sayfasını PDF’e dönüştürmek için bir npm paketi olan phantomjs kullanacağız. phontomjs’nin tüm özelliklerini kullanmayacağız, sadece NodeServices ile nasıl çalışabileceğimizi anlamak adına pdf dönüşümünü öğreneceğiz.

Öncelikle çalışacağımız cihazda Node.js yüklü değil ise https://nodejs.org sitesinden gerekli adımları takip ederek kurulumu gerçekleştiriyoruz.

Bir ASP.NET Core uygulaması oluşturarak devam ediyoruz, uygulamayı oluşturduktan sonra uygulama klasörünün içerisine aşağıdaki verilerin bulunduğu bir package.json dosyası oluşturuyoruz, bu bize gerekli paketlerin yüklenmesi için lazım olacak.

package.json

{  
  "version": "1.0.0",  
  "name": "exp.pdfgen",  
  "private": true,  
  "dependencies": {  
    "html-pdf": "^2.2.0"  
  }  
}  

json oluşturulduktan sonra bir komut penceresi açarak proje dizinimize gidiyor ve aşağıdaki komutu çalıştırıyoruz.

Gerekli kurulumlar tamamlandıktan sonra projemize generatePDF.js isminde bir JavaScript dosyası ekliyoruz. Bu html sayfamızı okumayacak npm paketimizi kullanarak pdf dosyasına dönüştürme işlemini yapacaktır.

generatePDF.js

module.exports = function (callback, inputFilePath, outputFilePath) {  
  
    //callback : This is node style callback, since the NodeServices invokes the javascript Asynchronously  
    //inputFilePath : The html file path  
    //outputFilePath : The file path where the pdf is to be generated  
  
  
    var fs = require('fs'); // get the FileSystem module, provided by the node envrionment  
    var pdf = require('html-pdf'); // get the html-pdf module which we have added in the dependency and downloaded.  
    var html = fs.readFileSync(inputFilePath, 'utf8'); //read the contents of the html file, from the path  
    var options = { format: 'Letter' }; //options provided to html-pdf module. More can be explored in the module documentation  
  
    //create the pdf file  
    pdf.create(html, options).toFile(outputFilePath, function (err, res) {  
        if (err) return callback(null, "Failed to generate PDF");  
        callback(null, "Generated PDF Successfully");  
    });  
  
}

Projemize NodeServices nuget paketini ekliyoruz;

Daha sonra Program.cs dosyamızın içeriğini aşağıdaki gibi kodluyoruz;

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.NodeServices;
using Microsoft.Extensions.DependencyInjection;

namespace NodeServiceSample
{
    class Program
    {
        static void Main(string[] args)
        {
            //Instantiate DI container for the application  
            var serviceCollection = new ServiceCollection();


            //Register NodeServices  
            serviceCollection.AddNodeServices();

            //Request the DI container to supply the shared INodeServices instance  
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var nodeService = serviceProvider.GetRequiredService<INodeServices>();


            //Input file path of html file   
            var inputFilePath = "C:\\Users\\auysa\\source\\repos\\NodeServicesSample\\NodeServices_Sample\\sample.html";

            //Output file path of pdf file  
            var outputFilePath = "C:\\Users\\auysa\\source\\repos\\NodeServicesSample\\NodeServices_Sample\\sampleOutput.pdf";

            var taskResult = GeneratePdf(nodeService, inputFilePath, outputFilePath);

            Task.WaitAll(taskResult);

            if (taskResult.IsCompletedSuccessfully)
            {
                Console.WriteLine(taskResult.Result);
            }

            Console.ReadKey();
        }

        private static async Task<string> GeneratePdf(INodeServices nodeService, string inputFilePath, string outputFilePath)
        {

            //Invoke the javascript module with parameters to execute in Node environment.  
            return await nodeService.InvokeAsync<string>(@"C:\\Users\\auysa\\source\\repos\\NodeServicesSample\\NodeServices_Sample\\generatePDF.js", inputFilePath, outputFilePath);

        }


    }
}

Daha sonra projeye sample.html dosyası ekliyoruz, içeriği aşağıdaki gibi olacaktır.

<html>  
  
<body>  
    <p>Örnek Metin</p>  
    <p style="font:20px;color:magenta;">Örnek Metin</p>  
  
</body>  
  
</html> 

Uygulamayı çalıştırdığızda pdf dosyası oluşacaktır.

Exit mobile version