KARşıLAşTıRMA

Sumatra PDF vs IronPDF: Teknik Karşılaştırma Rehberi

.NET geliştiricileri PDF çözümlerini değerlendirirken,Sumatra PDFveIronPDFtemelde farklı araç kategorilerini temsil eder.Sumatra PDFhafif bir masaüstü PDF görüntüleyici uygulamasıdır,IronPDFise programatik PDF oluşturma ve düzenleme için kapsamlı bir .NET kütüphanesidir. Bu teknik karşılaştırma, profesyonel geliştiricilere ve mimarlara her birinin ne zaman uygun olduğunu ve ekiplerin neden sıkçaSumatra PDFentegrasyon desenlerinden IronPDF'nin kütüphane tabanlı yaklaşımına geçtiğini anlamalarına yardımcı olmak için her iki çözümü inceliyor.

Sumatra PDF'yi Anlamak

Sumatra PDF, sadeliği ve hızı ile tanınan hafif, açık kaynaklı bir PDF okuyucusudur. Minimalizm tasarım felsefesi, eski sistemlerde bile üstün performans sağlar. Sumatra PDF, kullanıcılarına PDF belgelerini hızlı ve güvenilir bir şekilde görüntüleme olanağı sağlamak amacıyla tasarlanmış bir bağımsız uygulamadır.

Kritik Anlayış: Sumatra PDF, bir masaüstü PDF görüntüleyici uygulaması olup geliştirme kütüphanesi değildir. Eğer .NET uygulamanızdaSumatra PDFkullanıyorsanız, muhtemelen PDF'leri görüntülemek için harici bir işlem olarak başlatıyorsunuz veya komut satırı aracılığıyla PDF yazdırmak için kullanıyorsunuz ya da kullanıcılarınızın yüklemesi gereken bir bağımlılık olarak kullanıyorsunuz.

Aracın sadeliği, geliştiriciler için doğuştan gelen sınırlamalarla birlikte gelir:

  • Sadece Okuyucu — Yalnızca bir PDF okuyucu olup PDF oluşturma veya düzenleme işlevleri yoktur
  • Bağımsız uygulama — Diğer uygulamalara entegre edilebilen bir kütüphane değildir
  • GPL lisansı —GPLlisansı, ticari ürünlerde kullanımını kısıtlar

IronPDF'yi Anlama

IronPDF, uygulamalarına PDF işlevselliği entegre etmesi gereken geliştiriciler için özel olarak tasarlanmış kapsamlı bir .NET kütüphanesidir. Sumatra PDF'nin aksine IronPDF, C# uygulamaları içinde programatik olarak PDF oluşturma, düzenleme, okuma ve manipülasyon için tam yetenekler sağlar.

IronPDF, herhangi bir C# uygulamasına kolayca entegre olan, altyapı yükünü azaltan kendi kendine yeten bir kütüphane olarak işlev görür. Kütüphane, HTML'den PDF'ye dönüştürme için modern bir Chromium renderleme motoru kullanır ve harici işlemler veya kullanıcı yüklü bağımlılıklar gerektirmeyen yerel .NET entegrasyonu sağlar.

Temel Fark: Uygulama vs Kütüphane

Sumatra PDF ileIronPDFarasındaki en kritik fark, mimari amaçlarında yatmaktadır:

KarakteristikSumatra PDFIronPDF
TürüUygulamaKütüphane
EntegrasyonHarici süreçYerel .NET
Kullanıcı BağımlılığıKurulum gerekliUygulama ile paketlenmiş
APIYalnızca komut satırıTam C# API
Web DesteğiHayırEvet
Ticari LisansGPLEvet

Sumatra PDFEntegrasyonunda Temel Sorunlar

SorunEtkisi
Kütüphane DeğilProgramatik olarak PDF oluşturamaz veya düzenleyemez
Harici SüreçAyrı süreçlerin başlatılmasını gerektirir
GPL LisansıTicari yazılım için kısıtlayıcıdır
Kullanıcı BağımlılığıKullanıcıların Sumatra'yı ayrı yüklemesi gerekir
Hiçbir API YokKomut satırı argümanlarıyla sınırlı
Yalnızca GörüntülemePDF oluşturma, düzenleme veya manipülasyon yapamaz
Web Desteği YokYalnızca masaüstü uygulaması

HTML'den PDF'e Dönüşüm

HTML'den PDF'ye dönüşüm, bir görüntüleyici uygulaması ile geliştirme kütüphanesi arasındaki temel yetenek boşluğunu gösterir.

Sumatra PDF HTML'den PDF'ye

Sumatra PDF, HTML'yi PDF'ye dönüştüremez—aracı olarak harici araçlar gerektirir:

// NuGet: Install-Package SumatraPDF (Note: Sumatra is primarily a viewer, not a generator)
//Sumatra PDFdoesn't have direct C# integration forHTML'den PDF'yeconversion
// You would need to use external tools or libraries and then open with Sumatra
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        //Sumatra PDFcannot directly convert HTML to PDF
        // You'd need to use wkhtmltopdf or similar, then view in Sumatra
        string htmlFile = "input.html";
        string pdfFile = "output.pdf";

        // Using wkhtmltopdf as intermediary
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "wkhtmltopdf.exe",
            Arguments = $"{htmlFile} {pdfFile}",
            UseShellExecute = false
        };
        Process.Start(psi)?.WaitForExit();

        // Then open with Sumatra
        Process.Start("SumatraPDF.exe", pdfFile);
    }
}
// NuGet: Install-Package SumatraPDF (Note: Sumatra is primarily a viewer, not a generator)
//Sumatra PDFdoesn't have direct C# integration forHTML'den PDF'yeconversion
// You would need to use external tools or libraries and then open with Sumatra
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        //Sumatra PDFcannot directly convert HTML to PDF
        // You'd need to use wkhtmltopdf or similar, then view in Sumatra
        string htmlFile = "input.html";
        string pdfFile = "output.pdf";

        // Using wkhtmltopdf as intermediary
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "wkhtmltopdf.exe",
            Arguments = $"{htmlFile} {pdfFile}",
            UseShellExecute = false
        };
        Process.Start(psi)?.WaitForExit();

        // Then open with Sumatra
        Process.Start("SumatraPDF.exe", pdfFile);
    }
}
Imports System.Diagnostics
Imports System.IO

Module Program
    Sub Main()
        ' Sumatra PDF cannot directly convert HTML to PDF
        ' You'd need to use wkhtmltopdf or similar, then view in Sumatra
        Dim htmlFile As String = "input.html"
        Dim pdfFile As String = "output.pdf"

        ' Using wkhtmltopdf as intermediary
        Dim psi As New ProcessStartInfo With {
            .FileName = "wkhtmltopdf.exe",
            .Arguments = $"{htmlFile} {pdfFile}",
            .UseShellExecute = False
        }
        Process.Start(psi)?.WaitForExit()

        ' Then open with Sumatra
        Process.Start("SumatraPDF.exe", pdfFile)
    End Sub
End Module
$vbLabelText   $csharpLabel

Bu yaklaşım gerektirir:

  • Harici araç kurulumu (wkhtmltopdf)
  • Süreç başlatma ve yönetimi
  • Birden fazla hata noktası
  • Dönüşüm üzerinde programatik kontrol yok

IronPDF HTML'i PDF'e Dönüştürme

IronPDF, doğrudan HTML'den PDF'e dönüştürme sağlar:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<h1>Hello World</h1><p>This isHTML'den PDF'yeconversion.</p>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string htmlContent = "<h1>Hello World</h1><p>This isHTML'den PDF'yeconversion.</p>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim htmlContent As String = "<h1>Hello World</h1><p>This is HTML'den PDF'ye conversion.</p>"

        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")

        Console.WriteLine("PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

RenderHtmlAsPdf yöntemi, Chromium renderleme motorunu kullanarak HTML içeriğini doğrudan PDF'ye dönüştürür. Harici araçlar yok, süreç yönetimi yok, kullanıcı bağımlılıkları yok.

PDF'leri Açma ve Gösterme

Her iki çözüm de PDF görüntüleyebilir, ancak tamamen farklı mekanizmalarla.

Sumatra PDF Görüntüleme

Sumatra PDF, işlem yürütme yoluyla PDF'ler görüntülemede üstün:

// NuGet: Install-Package SumatraPDF.CommandLine (or direct executable)
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        string pdfPath = "document.pdf";

        //Sumatra PDFexcels at viewing PDFs
        ProcessStartInfo startInfo = new ProcessStartInfo
        {
            FileName = "SumatraPDF.exe",
            Arguments = $"\"{pdfPath}\"",
            UseShellExecute = true
        };

        Process.Start(startInfo);

        // Optional: Open specific page
        // Arguments = $"-page 5 \"{pdfPath}\""
    }
}
// NuGet: Install-Package SumatraPDF.CommandLine (or direct executable)
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        string pdfPath = "document.pdf";

        //Sumatra PDFexcels at viewing PDFs
        ProcessStartInfo startInfo = new ProcessStartInfo
        {
            FileName = "SumatraPDF.exe",
            Arguments = $"\"{pdfPath}\"",
            UseShellExecute = true
        };

        Process.Start(startInfo);

        // Optional: Open specific page
        // Arguments = $"-page 5 \"{pdfPath}\""
    }
}
Imports System.Diagnostics
Imports System.IO

Module Program
    Sub Main()
        Dim pdfPath As String = "document.pdf"

        ' Sumatra PDF excels at viewing PDFs
        Dim startInfo As New ProcessStartInfo With {
            .FileName = "SumatraPDF.exe",
            .Arguments = $"""{pdfPath}""",
            .UseShellExecute = True
        }

        Process.Start(startInfo)

        ' Optional: Open specific page
        ' .Arguments = $"-page 5 ""{pdfPath}"""
    End Sub
End Module
$vbLabelText   $csharpLabel

Bu yaklaşım:

  • Kullanıcının sistemineSumatra PDFkurulu olmasını gerektirir
  • Harici bir süreç başlatır
  • PDF içeriğine programatik erişim veya değiştirme yapamaz

IronPDF Görüntüleme

IronPDF, PDF'leri yükleyip manipüle edebilir ve ardından gösterebilir:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        // Extract information
        Console.WriteLine($"Page Count: {pdf.PageCount}");

        //IronPDFcan manipulate and save, then open with default viewer
        pdf.SaveAs("modified.pdf");

        // Open with default PDF viewer
        Process.Start(new ProcessStartInfo("modified.pdf") { UseShellExecute = true });
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        // Extract information
        Console.WriteLine($"Page Count: {pdf.PageCount}");

        //IronPDFcan manipulate and save, then open with default viewer
        pdf.SaveAs("modified.pdf");

        // Open with default PDF viewer
        Process.Start(new ProcessStartInfo("modified.pdf") { UseShellExecute = true });
    }
}
Imports IronPdf
Imports System
Imports System.Diagnostics

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("document.pdf")

        ' Extract information
        Console.WriteLine($"Page Count: {pdf.PageCount}")

        ' IronPDF can manipulate and save, then open with default viewer
        pdf.SaveAs("modified.pdf")

        ' Open with default PDF viewer
        Process.Start(New ProcessStartInfo("modified.pdf") With {.UseShellExecute = True})
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF'nin PdfDocument.FromFile() yöntemi, belgeyi programatik erişim için yükler—sayfa sayısını çıkarma, içeriği manipulate etme ve gösterim öncesinde değişiklikleri kaydetme.

Metin Çıkarma

PDF'lerden metin çıkarma, kritik bir yetenek boşluğunu ortaya çıkarır.

Sumatra PDF Metin Çıkarma

Sumatra PDF, metni programatik olarak çıkaramaz—harici komut satırı araçları gerektirir:

//Sumatra PDFdoesn't provide C# API for text extraction
// You would need to use command-line tools or other libraries
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        //Sumatra PDFis a viewer, not a text extraction library
        // You'd need to use PDFBox, iTextSharp, or similar for extraction

        string pdfFile = "document.pdf";

        // This would require external tools like pdftotext
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "pdftotext.exe",
            Arguments = $"{pdfFile} output.txt",
            UseShellExecute = false
        };

        Process.Start(psi)?.WaitForExit();

        string extractedText = File.ReadAllText("output.txt");
        Console.WriteLine(extractedText);
    }
}
//Sumatra PDFdoesn't provide C# API for text extraction
// You would need to use command-line tools or other libraries
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        //Sumatra PDFis a viewer, not a text extraction library
        // You'd need to use PDFBox, iTextSharp, or similar for extraction

        string pdfFile = "document.pdf";

        // This would require external tools like pdftotext
        ProcessStartInfo psi = new ProcessStartInfo
        {
            FileName = "pdftotext.exe",
            Arguments = $"{pdfFile} output.txt",
            UseShellExecute = false
        };

        Process.Start(psi)?.WaitForExit();

        string extractedText = File.ReadAllText("output.txt");
        Console.WriteLine(extractedText);
    }
}
Imports System.Diagnostics
Imports System.IO

Module Program
    Sub Main()
        ' Sumatra PDF is a viewer, not a text extraction library
        ' You'd need to use PDFBox, iTextSharp, or similar for extraction

        Dim pdfFile As String = "document.pdf"

        ' This would require external tools like pdftotext
        Dim psi As New ProcessStartInfo With {
            .FileName = "pdftotext.exe",
            .Arguments = $"{pdfFile} output.txt",
            .UseShellExecute = False
        }

        Process.Start(psi)?.WaitForExit()

        Dim extractedText As String = File.ReadAllText("output.txt")
        Console.WriteLine(extractedText)
    End Sub
End Module
$vbLabelText   $csharpLabel

Bu geçici çözüm:

  • Harici araç kurulumu gerektirir (pdftotext)
  • Ara dosyalara yazma yapar
  • Belirli sayfalardan programatik olarak çıkarma yapamaz
  • Karmaşıklık ve hata noktaları ekler

IronPDF Metin Çıkarma

IronPDF, yerel metin çıkarma API'ları sağlar:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        //Metin çıkarfrom all pages
        string allText = pdf.ExtractAllText();
        Console.WriteLine("Extracted Text:");
        Console.WriteLine(allText);

        //Metin çıkarfrom specific page
        string pageText = pdf.ExtractTextFromPage(0);
        Console.WriteLine($"\nFirst Page Text:\n{pageText}");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        //Metin çıkarfrom all pages
        string allText = pdf.ExtractAllText();
        Console.WriteLine("Extracted Text:");
        Console.WriteLine(allText);

        //Metin çıkarfrom specific page
        string pageText = pdf.ExtractTextFromPage(0);
        Console.WriteLine($"\nFirst Page Text:\n{pageText}");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("document.pdf")

        ' Metin çıkarfrom all pages
        Dim allText As String = pdf.ExtractAllText()
        Console.WriteLine("Extracted Text:")
        Console.WriteLine(allText)

        ' Metin çıkarfrom specific page
        Dim pageText As String = pdf.ExtractTextFromPage(0)
        Console.WriteLine(vbCrLf & "First Page Text:" & vbCrLf & pageText)
    End Sub
End Class
$vbLabelText   $csharpLabel

ExtractAllText() ve ExtractTextFromPage() yöntemleri, harici araçlar veya ara dosyalar olmadan PDF içeriğine doğrudan programatik erişim sağlar.

Eksiksiz Özellik Karşılaştırması

ÖzellikSumatra PDFIronPDF
PDF OkumaEvetEvet
PDF OluşturmaHayırEvet
PDF DüzenlemeHayırEvet
EntegrasyonSınırlı (bağımsız)Uygulamalarda tam entegrasyon
LisansGPLTicari

Detaylı Yetenek Karşılaştırması

YetenekSumatra PDFIronPDF
Oluşturma
HTML'den PDF'yeHayırEvet
URL'den PDF'yeHayırEvet
Metni PDF'e CevirHayırEvet
Görüntü PDF'e CevirHayırEvet
Manipulasyon
PDF'leri birleştirHayırEvet
PDF'leri BölHayırEvet
Sayfalari DondurHayırEvet
Sayfalari SilHayırEvet
Sayfalari Yeniden SiralaHayırEvet
İçerik
Filigran EklemeHayırEvet
Basliklar/Altliklar EkleHayırEvet
Metin DamgalaHayırEvet
Görüntüleri DamgalaHayırEvet
Güvenlik
Şifre KorumasıHayırEvet
Dijital İmzalarHayırEvet
ŞifrelemeHayırEvet
Yetki AyarlariHayırEvet
Ayiklama
Metin ÇıkarmaHayırEvet
Görüntüleri AyiklaHayırEvet
Formlar
Form DoldurHayırEvet
Form OluşturHayırEvet
Form Verilerini OkuHayırEvet
Platform
WindowsEvetEvet
LinuxHayırEvet
macOSHayırEvet
Web UygulamalariHayırEvet
Azure/AWSHayırEvet

Takimlar Sumatra PDF'den Tasinmayi Nasıl Degerlendirirler

Bazi faktorler, geliştirme takimlariniSumatra PDFentegrasyon modellerine alternatifleri degerlendirmeye tesvik eder:

Dis surec yonetimi yukleri uygulama mimarisini zorlastirir. Ayrik surecleri oluşturmak ve yonetmek, karmasikligi, hata yonetimi gerekliliklerini ve potansiyel ariza noktalarini artirir.

GPL lisans kisitlamalari ticari yazilim geliştirmeyi etkiler.GPLlisansi, Sumatra PDF'yi kurumsal uygulamalar icin uygunsuz hale getirerek, tescilli yazilim lisanslama gereksinimleriyle celisebilir.

Kullanıcı kurulum bagimliliklari dasitirma zorluklari yaratir. Kullanicilarin Sumatra PDF'yi ayri olarak kurmalarini gerektirmek, dasitim ve destek yukunu artirir.

PDF oluşturma özelliklerinin olmamasi uygulama fonksiyonlarini sinirlar.Sumatra PDFyalnizca PDF görüntüleyebilir—PDF oluşturma gerektiren uygulamalara ek araclar entegre etmek gerekir.

Programatik manipulasyo yok gelişmiş calisma akislarini engeller. PDF'leri birlestirme, bolme, damgalama veya guvence altina alma gibi gorevler,Sumatra PDFile imkansizdir.

Masaustu siniri web ve bulut dasitimlarini engeller. Sumatra PDF, ASP.NET uygulamalarinda, Azure Fonksiyonlarinda veya konteyner dasitimlarinda kullanilamaz.

Güçlü Yönler ve Tavizler

Sumatra PDF'nin Guclu Yonleri

  • Hafif ve hizli bir PDF görüntüleyici
  • Acik kaynakli ve ücretsiz kullanimi
  • Basit ve kullanıcı dostu arayuzu
  • Daha eski sistemlerde muhtesem performans
  • Komut satiri yazdirma destegi

Sumatra PDF Sinirliliklari

  • Yalnizca okuyucu—PDF oluşturma veya duzenleme işlemleri yok
  • Bagimsiz uygulama—entegrasyon icin bir kutuphane değil -GPLlisansi ticari kullanimi kisitlar
  • Dis surec yonetimi gerektirir
  • Manipulasyon icin bir programatik API yok
  • Yalnizca masaustu—web veya bulut destegi yok
  • Kullanıcı mustakil kurulum yapmali
  • Metin ayiklama API'si yok

IronPDF'nin Gucleri

  • Kapsamli PDF oluşturma ve duzenleme
  • Yerel .NET kutuphane entegrasyonu
  • Kurumsal kullanim icin ticari lisans
  • Chromium tabanli HTML rendering
  • Tam programatik API
  • Çok platformlu destek (Windows, Linux, macOS)
  • Web uygulamasi destegi
  • Bulut dasitim uyumlu
  • Metin ve görüntü ayiklama
  • Guvenlik ve dijital imza destegi

IronPDF dusunulecekler

  • Ticari lisanslama modeli
  • Basit bir görüntüleyiciden daha buyuk bir dasitim alani

API Karsilastirmasi Ozeti

İşlemSumatra PDFIronPDF
PDF GörüntüleProcess.Start("SumatraPDF.exe", "file.pdf")PdfDocument.FromFile() + sistem görüntüleyici
PDF'yi yazdırProcess.Start("SumatraPDF.exe", "-print-to-default file.pdf")pdf.Print()
PDF OluşturMümkün değilrenderer.RenderHtmlAsPdf()
Metin çıkarHarici araclar gerektirirpdf.ExtractAllText()
PDF'leri birleştirMümkün değilPdfDocument.Merge()
Filigran ekleMümkün değilpdf.ApplyWatermark()
Sifre korumaMümkün değilpdf.SecuritySettings

Sonuç

Sumatra PDF ve IronPDF, .NET ekosisteminde tamamen farkli amaclara hizmet eder. Sumatra PDF, hizli ve hafif bir PDF okuyucu uygulamasina ihtiyaçi olan son kullanicilar icin muhtesem bir deneyim sunar. Ancak, uygulamalari icinde programatik PDF yeteneklerine ihtiyaç duyan geliştiriciler ve isletmeler icin, Sumatra PDF'nin sadece izleyici tasarimi veGPLlisanslamasi onemli kisitlamalar yaratir.

PDF oluşturma, manipulasyon, metin ayiklama veya basit görüntülemenin otesinde entegrasyon gerektiren uygulamalar icin, IronPDF, Sumatra PDF'nin sunamiycagi kapsamli kutuphane yeteneklerini sunar. HTML'den PDF oluşturma, belgeleri birlestirme, iceriği ayiklama ve web ile bulut ortamlara dağıtma yetenegi, bir izleyici uygulama ile elde edilemeyen common geliştirme gereksinimlerini karsilar.

Sumatra PDF'dan IronPDF'ye gecisi degerlendirirken, takimlar kendi PDF oluşturma, manipulasyon, lisanslama ve dağıtim platformlarindaki ozel gereksinimlerini goz onune almalidir. .NET 10 ve C# 14'i 2026'da hedefleyen web veya bulut dağıtim amaclari olan takimlar icin, IronPDF'nin kutuphane mimarisi, izleyici uygulamalarinin temel olarak sunamiyacagi yetenekler saglar.


Uygulama kılavuzu için,IronPDFHTML'den PDF'ye öğreticisini ve modern .NET uygulamaları için PDF oluşturma desenlerini kapsayan belgeleri inceleyin.