Yazılım

.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.

Ali UYSAL

IT alanında 16 sene önce donanım ile başlayan tecrübem, network ve sonrasında iş analizi, yazılım geliştirme ve proje yöneticiliği alanlarında devam etmiştir. Endüstriyel yazılımlar, sahadan veri toplama ve analizleri, otomatik etiketleme ve barkod sistemleri, otomatik tartım ve robotik konularında tecrübe sahibiyim. Sanayi 4.0 kapsamında imalat sanayinin dijital dönüşümünde çok fazla projenin hayata geçmesini sağladım.Open Source projelerle uzun süre ilgilendim, analiz ve implementasyonu konularında tecrübe edindim. Bunlar dışında hobi amacıyla başlasam da sonradan ürüne dönüşen, geliştirme kartları ile farklı çalışmalarım olmuştur.Raspberry Pi üzerinde yaptığım donanımsal ve yazılımsal işler ile çok farklı ürünler ortaya çıkartarak tecrübe edindim.

İlgili Makaleler

Bir Yorum

  1. İyi günler kolay gelsin, Bir mvc projemin içerisinde node.js entegre ettim projem local’da sağlıklı bir şekilde çalışırken ortak bir sunucuya kurduğumda node.js ile çalışan kodlarımdan hata alıyorum. Projeyi publish ederken node.js ile ilgili ekstra yapmam gereken bir durum var mı? Zira projeyi publish ettikten sonra publish ettiğim klasörün içerisinde node_modules klasörüm ya da node.js ile ilgili klasörlerimi göremedim. Şimdiden teşekkür ederim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu