IRONSOFTWAREHOME
IRONPDF KULLANARAK

IronPDF Kullanarak C#'da İki PDF Dosyasini Nasıl Karsilastirirsiniz

Curtis Chau
Curtis Chau
Updated: 12 Temmuz 2026

ASP.NET'te bir veritabanından PDF'leri göstermek için, depolanan ikili verileri alın ve IronPDF's PdfDocument sınıfı kullanarak işlemi gerçekleştirin. Bu sınıf, byte dizilerini verimli bir şekilde işler ve özelleştirme seçenekleriyle tarayıcı uyumlu çıktı sağlar.

ASP.NET'te PDF Veritabanı Görüntülemesi Nedir?

ASP.NET uygulamalarında PDF belgelerini yönetmek, genellikle PDF dosyalarını doğrudan veritabanında depolamayı içerir; bu, dosya sistemi yerine yapılır. Bu yöntem daha iyi güvenlik, merkezi yedekleme ve basitleştirilmiş dağıtım sunar. Ancak, veritabanından PDF belgelerini almak ve görüntülemek, doğru araçlar olmadan zor olabilir.

PDF dosyalarını bir veritabanı tablosunda ikili veri olarak saklamak, belge erişimi ve versiyon kontrolü üzerinde daha iyi kontrol sağlar. Kullanıcılara PDF belgelerini göstermeniz gerektiğinde, byte diziyi veritabanından verimli bir şekilde almalı ve tarayıcıda görüntülemelisiniz. IronPDF, ASP.NET uygulamalarında PDF belgeleriyle başa çıkmak için etkili bir API ile bu süreci basitleştirir.

Bu eğitim, IronPDF'nin kanıtlanmış özelliklerini kullanarak ASP.NET'te veritabanından PDF görüntüleme işlevselliğini göstermektedir. Yükleme, depolama ve PDF dosyalarını görüntüleme için tam bir çözüm oluşturmayı, optimum performans ve güvenlikle öğrenirsiniz. Kütüphane, üretim kalitesinde belge yönetim sistemleri oluşturmayı kolaylaştıran çeşitli render etme seçenekleri ve gelişmiş PDF işleme yeteneklerini destekler.

PDF Kütüphanesini ASP.NET Projenize Nasıl Kurarsınız?

PDF görüntüleme işlevselliğini uygulamadan önce ASP.NET projenizde IronPDF kurulu olduğundan emin olun. Visual Studio'da Paket Yöneticisi Konsolunu açın ve tercih ettiğiniz araçlara göre aşağıdaki komutlardan birini çalıştırın:

PM > Install-Package IronPdf

IronPDF'i NuGet Package Manager UI üzerinden de projelerinizin Gözat sekmesinde IronPdf arayarak kurabilirsiniz. Kurulumdan sonra, uygulama başlangıcında lisans anahtarınızı ayarlayın:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

Ücretsiz deneme lisansı değerlendirme sırasında tüm özelliklere tam erişim sağlar. Üretim dağıtımları için, projenizin ölçeğine uyan bir seçeneği bulmak için mevcut lisanslama katmanlarını gözden geçirin.

Hangi Veritabanı Yapısı Gereklidir?

Veri tabanı tablo yapınızın PDF dosyalarını ikili veri olarak saklamak için bir varbinary(max) sütununa ihtiyaç bulunmaktadır. Tablo, daha iyi belge yönetimi için dosya adı, yükleme tarihi ve dosya boyutu gibi meta veri alanlarını içermelidir. Bu senaryo için uygun tabloyu oluşturacak SQL aşağıdadır:

using IronPdf;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;

Veritabanı bağlantısını kurmak için, bağlantı dizginizi web.config dosyasında yapılandırın. PDF görüntüleyici uygulaması, veritabanından yüklenen dosyaları almak ve PDF içeriğini sorunsuz bir şekilde görüntülemek için bu bağlantıyı kullanacaktır.

Çözüm Hangi Ad Alanlarını Gerektiriyor?

Çözüm, IronPDF ad alanının yanı sıra standart ADO.NET ad alanlarını kullanır. Üçüncü taraf bir ORM'e gerek yoktur -- doğrudan ADO.NET yaklaşımı bağımlılıkları minimal tutar ve sorgu yürütme üzerinde tam kontrol sağlar. Bağlantı dizgesinin, PDF depolama tablonuzun bulunduğu bir SQL Server örneğine işaret ettiğinden emin olun.

PDF'ler İçin Veritabanı Tablosu Nasıl Oluşturulur?

PDF belgelerini depolamak için özel olarak tasarlanmış bir veritabanı tablosu oluşturarak başlayın. Tablo yapısı, PDF belgelerini yönetmek için hem ikili veriyi hem de gerekli meta verileri barındırmalıdır:

CREATE TABLE PdfDocuments (
    Id INT PRIMARY KEY IDENTITY(1,1),
    FileName NVARCHAR(255) NOT NULL,
    FileData VARBINARY(MAX) NOT NULL,
    ContentType NVARCHAR(100) DEFAULT 'application/pdf',
    FileSize INT,
    UploadDate DATETIME DEFAULT GETDATE(),
    CreatedBy NVARCHAR(100),
    LastModified DATETIME,
    DocumentVersion INT DEFAULT 1
);
Text

Bu tablo, her bir PDF dosyasını FileData sütununda bir bayt dizisi olarak saklar. varbinary(max) veri tipi 2 GB'a kadar dosya tutabilir, bu da çoğu PDF belgeleri için yeterlidir. FileName alanı, görüntüleme ve indirme amacıyla orijinal dosya adını saklar.

PDF Alma İşlemi İçin Veritabanı Performansı Nasıl Artırılır?

PDF belgelerini alırken daha iyi performans için sık sorgulanan sütunlarda indeksler eklemeyi düşünün. Aşağıdaki SQL, genellikle WHERE ve ORDER BY cümleciklerinde yer alacak sütunlar için indeksler oluşturur:

CREATE INDEX IX_PdfDocuments_UploadDate
ON PdfDocuments(UploadDate DESC);

CREATE INDEX IX_PdfDocuments_FileName
ON PdfDocuments(FileName);
Text

Bu yapı, yüklü dosyaların etkili bir şekilde depolanmasını ve alınmasını sağlarken gerektiğinde ek meta veri alanları ekleme esnekliği sağlar. Çok büyük PDF dosyaları için, veritabanı depolamasının mimariniz için uygun olup olmadığını veya dosyaların disk veya nesne depolama üzerinde tutulduğu ve yalnızca meta verilerin veritabanında tutulduğu bir hibrit yaklaşımın büyük ölçeklerde daha iyi performans gösterip göstermediğini düşünün.

PDF Depolama Stratejilerinin Karşılaştırılması
StratejiEn İyi İçinAvantajlarDikkat edilmesi gerekenler
Veritabanı (VARBINARY)Küçükten orta boyuta dosyalar, yüksek güvenlikTransactional tutarlılık, merkezi yedeklemeVeritabanı boyutunu hızla artırabilir
Dosya SistemiBüyük dosyalar, yüksek geçişHızlı dosya IO, düşük veritabanı yüküAyrı bir yedekleme stratejisi gerektirir
Nesne Depolama (Azure Blob/S3)Bulut dağıtımları, sınırsız ölçekMaliyet etkin, son derece kullanılabilirEk SDK bağımlılığı

PDF Dosyaları Veritabanına Nasıl Yüklenir?

Yükleme işlevselliğini ASP.NET'in FileUpload kontrolünü kullanarak uygulayın. Bu HTML etiketlemesini bir form elemanı içinde uygun doğrulama ile .aspx sayfanıza ekleyin:

<div class="pdf-upload-container">
    <asp:FileUpload ID="FileUpload1" runat="server" accept=".pdf" />
    <asp:Button ID="btnUpload" Text="Upload PDF"
                OnClick="btnUpload_Click" runat="server" CssClass="btn-primary" />
    <asp:Label ID="lblMessage" runat="server" CssClass="status-message" />
    <div class="file-info">
        <asp:Label ID="lblFileInfo" runat="server" />
    </div>
</div>
HTML

Örnek Kullanıcı Arayüzü Çıktısı

ASP.NET web uygulama arayüzü, 'Dosya Seç' düğmesi ve 'PDF Yükle' düğmesi ile bir PDF yükleme formu, ayrıca belgelerin yönetimi için alt kısımda boş bir PDF Belgeleri Listesi bölümü gösterilmektedir

Dosya Yükleme Olayları Nasıl İşlenir?

Yükleme düğmesi sunucu tarafı olay işleyicisini tetikler. Yükleme işlevi için eksiksiz uygulama burada verilmiştir; yüklü dosyaları bir byte dizisine dönüştürür ve uygun hata yönetimiyle saklar:

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile && FileUpload1.PostedFile.ContentType == "application/pdf")
    {
        try
        {
            string fileName = FileUpload1.FileName;
            byte[] fileBytes = FileUpload1.FileBytes;
            int maxFileSize = 10 * 1024 * 1024; // 10MB limit

            if (fileBytes.Length > maxFileSize)
            {
                lblMessage.Text = "File size exceeds 10MB limit.";
                return;
            }

            // Validate PDF using IronPDF
            using (var stream = new MemoryStream(fileBytes))
            {
                var testPdf = new IronPdf.PdfDocument(stream);
                if (testPdf.PageCount == 0)
                {
                    lblMessage.Text = "Invalid PDF file.";
                    return;
                }
            }

            string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(constr))
            {
                string query = "INSERT INTO PdfDocuments (FileName, FileData, FileSize, CreatedBy) " +
                               "VALUES (@FileName, @FileData, @FileSize, @CreatedBy)";
                using (SqlCommand cmd = new SqlCommand(query, conn))
                {
                    cmd.Parameters.AddWithValue("@FileName", fileName);
                    cmd.Parameters.AddWithValue("@FileData", fileBytes);
                    cmd.Parameters.AddWithValue("@FileSize", fileBytes.Length);
                    cmd.Parameters.AddWithValue("@CreatedBy", User.Identity.Name ?? "Anonymous");

                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            lblMessage.Text = "PDF document uploaded successfully!";
            lblFileInfo.Text = $"File: {fileName} ({fileBytes.Length / 1024}KB)";
            LoadPdfList();
        }
        catch (Exception ex)
        {
            lblMessage.Text = "Error uploading file: " + ex.Message;
        }
    }
    else
    {
        lblMessage.Text = "Please select a valid PDF file.";
    }
}

Bu kod, yalnızca geçerli PDF dosyalarının veritabanında saklanmasını sağlamak için dosya türünü yüklemeden önce doğrular. Bayt dizisi dönüşümü FileBytes özelliği aracılığıyla otomatik olarak gerçekleştirilmektedir. Ek doğrulama, PDF bütünlüğünü ve dosya boyutu sınırlarını kontrol etmeyi içerir. Kaydetmeden önce byte dizisini açmak için IronPDF kullanmak, dosyanın yalnızca uzantısı değiştirilen bir dosya değil, gerçek ve analiz edilebilir bir PDF belgesi olduğunu doğrular.

Yüklenen Dosyalarla Kullanıcı Arayüzü

ASP.NET web uygulama arayüzü, bir dosya yükleme formu ve yüklenmiş PDF belgelerini görüntüleme ve indirme işlem düğmeleri ile birlikte tam belge yönetimi sağlayan bir tablo listelemesi ile PDF yükleme işlevselliği göstermektedir

Veritabanından PDF'ler Nasıl Alınır ve Görüntülenir?

IronPDF, veritabanından alınan PDF belgelerini render etmekte mükemmeldir. Kütüphane, gelişmiş render etme yetenekleriyle tarayıcılarda PDF içeriği göstermenin birçok seçeneğini sunar. İlk olarak, veritabanı tablonuzdan ikili veriyi alın, ardından işlemeden önce IronPDF'ye aktararak istemciye geri yayın:

private void LoadPdfList()
{
    string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(constr))
    {
        string query = @"SELECT Id, FileName, FileSize, UploadDate, CreatedBy
                        FROM PdfDocuments
                        ORDER BY UploadDate DESC";
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            conn.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);

            foreach (DataRow row in dt.Rows)
            {
                int fileSize = Convert.ToInt32(row["FileSize"]);
                row["FileSize"] = FormatFileSize(fileSize);
            }

            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }
}

private string FormatFileSize(int bytes)
{
    if (bytes < 1024) return bytes + " B";
    if (bytes < 1048576) return (bytes / 1024) + " KB";
    return (bytes / 1048576) + " MB";
}

private PdfData GetPdfFromDatabase(int id)
{
    byte[] pdfBytes = null;
    string filename = "";
    string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(constr))
    {
        string query = "SELECT FileData, FileName FROM PdfDocuments WHERE Id = @Id";
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            cmd.Parameters.AddWithValue("@Id", id);
            conn.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                {
                    pdfBytes = (byte[])reader["FileData"];
                    filename = reader["FileName"].ToString();
                }
            }
        }
    }
    if (pdfBytes != null)
    {
        return new PdfData { Bytes = pdfBytes, FileName = filename };
    }
    return null;
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "ViewPdf")
    {
        int documentId = Convert.ToInt32(e.CommandArgument);
        ViewPdfDocument(documentId);
    }
    else if (e.CommandName == "DownloadPdf")
    {
        int documentId = Convert.ToInt32(e.CommandArgument);
        DownloadPdfDocument(documentId);
    }
}

private void ViewPdfDocument(int id)
{
    var pdfData = GetPdfFromDatabase(id);
    if (pdfData != null)
    {
        IronPdf.PdfDocument pdf;
        using (var stream = new System.IO.MemoryStream(pdfData.Bytes))
        {
            pdf = new IronPdf.PdfDocument(stream);
        }

        // Apply security settings
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        Response.Clear();
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", $"inline; filename={pdfData.FileName}");
        Response.AddHeader("content-length", pdf.BinaryData.Length.ToString());
        Response.BinaryWrite(pdf.BinaryData);
        Response.End();
    }
}

ViewPdfDocument yöntemi, belgeleri güvenlik ayarları uygulanmış şekilde istemciye geri aktarır. inline içerik düzenlemesi tarayıcıya PDF belgesini indirme yerine görüntüleme talimatı verir. Yazdırma izinleri ve kopya yapıştırma kısıtlamaları gibi güvenlik ayarlarını belge politika gereksinimlerinize uyması için ayarlayabilirsiniz.

PDF Render Etme Parametreleri Nasıl Yönetilir?

SQL komutunun parametreleri, birincil anahtarıyla belirli bir PDF'nin güvenli bir şekilde alınması için kritiktir. Parametreli sorgular, SQL enjeksiyon saldırılarını önler ve doğru veri bağlamasını sağlar. İkili veriler elde edildikten sonra, IronPDF bunları bir MemoryStream'den yükler ve belge nesnesine tam erişim sağlayarak tarayıcıya göndermeden önce daha fazla manipülasyon yapılmasına olanak tanır.

Yüklenen Bir PDF Dosyasını Görüntüleme

PDF görüntüleyici arayüzü, taşınabilir belge formatı hakkında açıklayıcı metin içeren 'Bir PDF Nedir?' başlıklı bir belgenin, yüzde 100 yakınlaştırma, gezinme kontrolleri ve çok sayfalı destek göstergeleriyle görüntülendiğini göstermektedir

PDF'leri Görüntülemeden Önce Hangi Gelişmiş Özellikler Eklenebilir?

IronPDF'nin PDF işleme yetenekleri, basit görüntülemenin ötesine geçer. PDF belgesini render etmeden önce filigranlar, başlıklar ve altbilgiler ve dijital imzalar ile işleyebilirsiniz:

// Add a confidentiality watermark before displaying
pdf.ApplyWatermark("<h2 style='color:red; font-family:Arial'>CONFIDENTIAL</h2>",
                   rotation: 30,
                   opacity: 50);

// Add page numbers in the footer
pdf.AddTextHeaders("{page} of {total-pages}",
                  IronPdf.Editing.TextHeaderFooter.DisplayLocation.BottomCenter);

// Add document metadata
pdf.MetaData.Author = "Your Application";
pdf.MetaData.ModifiedDate = DateTime.Now;

Filigran ile PDF Görüntüleme

PDF görüntüleyici, detaylı metin içeriği ve IronPDF'in belge güvenliği için filigranlama yeteneklerini gösteren 'GİZLİ' yazısı eğik filigran ile 'Bir PDF Nedir?' hakkında bir belge göstermektedir

Filigranlar, kullanıcıların görüntülemeli fakat kelimesi kelimesine çoğaltmamalı olduğu belgeleri gösterirken özellikle faydalıdır. Ayrıca, görüntülemeden önce PDF'den metin çıkarabilir ve arama indeksleri oluşturabilir veya belirli sayfaları görüntülere dönüştürebilir, küçük resim oluşturma amacıyla kullanabilirsiniz.

Bu Yaklaşım Neden Üretim Uygulamaları İçin İyi Çalışır?

ADO.NET ile IronPDF'nin birleştirilmesi, küçük iç araçlardan büyük belge yönetim sistemlerine kadar ölçeklenebilir basit bir model sağlar. Yaklaşım tamamen sunucu tarafındadır -- istemci tarafında bir PDF render kütüphanesine ihtiyaç duyulmaz ve doğru MIME türü döndürüldüğünde tarayıcının yerleşik PDF görüntüleyicisi görüntülemeyi gerçekleştirir.

Bu modelin temel güçlü yönleri:

  • Yükleme zamanında doğrulama: IronPDF, dosya veritabanına ulaşmadan önce dosyayı açar, bozuk veya PDF olmayan dosyaları hemen reddeder.
  • Görünüm zamanında güvenlik kontrolü: Yazdırma ve kopyala-yapıştır gibi izinler, byte'lar tarayıcıya ulaşmadan önce IronPDF tarafından uygulanır.
  • Minimum istemci tarafı kodu: Tarayıcı yerel olarak render işlemi yapar, JavaScript karmaşıklığını azaltır.
  • Esnek ön işleme: Akış öncesinde HTML string to PDF dönüştürme, belgeleri birleştirme ve ayırma işlemleri ile birleştirebilir veya özel filigranlar ekleyebilirsiniz -- hepsi sunucu tarafında aynı yöntem içinde.

Tarayıcı Entegrasyonu ve İndirme Seçenekleri Nasıl Yönetilir?

Daha iyi web entegrasyonu için JavaScript kullanarak belgeleri yeni bir sekmede açın, mevcut sayfayı değiştirmek yerine. Bu, kullanıcıların bir belge listesini gözden geçirirken daha iyi bir deneyim sunar:

function openPdfInNewTab(documentId) {
    window.open('/PdfHandler.ashx?id=' + documentId, '_blank');
}

function openPdfInModal(documentId) {
    var modal = document.getElementById('pdfModal');
    var iframe = document.getElementById('pdfFrame');
    iframe.src = '/PdfHandler.ashx?id=' + documentId;
    modal.style.display = 'block';
}
JavaScript

İndirme yolu, aynı veri tabanı alma mantığını takip eder ancak içerik düzenlemesi olarak inline yerine attachment kullanılır. Bu, tarayıcıyı dosyayı görüntülemek yerine kaydetmeye zorlar. Her iki yol da veri erişim kodunu DRY tutarak aynı GetPdfFromDatabase yardımcısını paylaşır.

Form tabanlı belge iş akışları için, IronPDF'nin PDF form doldurma yeteneklerini keşfedin -- bu, fatura oluşturma ve sözleşme yönetimi senaryolarında kullanmak üzere bir belgede gösterim veya indirme işlemi öncesinde form alanlarını önceden doldurmanızı sağlar.

PDF Sunumu İçin Güvenlik Dikkatleri Nelerdir?

Her zaman talep eden kullanıcının, istenen belge kimliğine erişim iznine sahip olduğunu doğrulayın. Sorgu dizgisinde basit bir tamsayı kimliği kolayca numaralanabilir -- yetkilendirme kontrolleri olmadan, herhangi bir kimlik doğrulamış kullanıcı, kimlikleri tahmin ederek herhangi bir belgeyi görüntüleyebilir.

En iyi uygulamalar şunları içermektedir:

  • CreatedBy veya OwnerId sütununu saklayın ve FileData sorgulamadan önce mevcut kullanıcı kimliğine karşı doğrulayın.
  • Belge tanımlayıcıları olarak ardışık tamsayılar yerine GUID'ler kullanarak numaralandırmayı imkansız hale getirin.
  • Yükleme sırasında, dosyanın kendisi uygulamanızın dışında erişilse bile korunan, son derece hassas belgeler için PDF parola koruması uygulayın.
  • Tüm görüntüleme ve indirme olaylarını denetim izleri için kaydedin.

ASP.NET güvenlik desenleri için dış referanslar için, OWASP ASP.NET Security Cheat Sheet ve Microsoft'un ASP.NET için güvenli kodlama kılavuzları yetkili kılavuzluk sağlar. IronPDF için NuGet galeri giriş) ayrıca, sürüm geçmişini ve bağımlılıkları belgelendirir.

PDF Veritabanı Görüntülemeye Nasıl Başlanır?

Bu çözümü kendi projenizde uygulamak için:

  1. IronPDF'i NuGet üzerinden (Install-Package IronPdf veya dotnet add package IronPdf) kurun.
  2. Yukarıdaki SQL şemasını kullanarak PdfDocuments tablosunu oluşturun.
  3. Aspx kod arka planınıza yükleme işleyicisi ekleyin.
  4. Byte'ları IronPDF üzerinden yayınlayan görünüm ve indirme işleyicilerini ekleyin.
  5. Satır komutlarını işleyicilere yönlendiren GridView ile kablolayın.

IronPDF özellik setinin tamamını keşfedebilir, belge yönetim iş akışlarına doğal olarak uyan HTML to PDF dönüştürme ve PDF birleştirme ve ayırma gibi ek yetenekler keşfedebilirsiniz. Ücretsiz bir deneme başlatın, bir lisansa başlamadan önce tam API'yi test edin.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez