Altbilgi içeriğine atla
IRONPDF KULLANARAK
Veritabanından PDF Dosyalarını ASP .NET'te Nasıl Gösterirsiniz | IronPDF

C# .NET'te Nasıl PDF Dosyaları Birleştirirsiniz

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:

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";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
$vbLabelText   $csharpLabel

Ü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;
using IronPdf;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;
Imports IronPdf
Imports System.Data.SqlClient
Imports System.IO
Imports System.Configuration
$vbLabelText   $csharpLabel

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
);

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);

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ı
Strateji En İyi İçin Avantajlar Dikkat edilmesi gerekenler
Veritabanı (VARBINARY) Küçükten orta boyuta dosyalar, yüksek güvenlik Transactional tutarlılık, merkezi yedekleme Veritabanı boyutunu hızla artırabilir
Dosya Sistemi Bü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çek Maliyet etkin, son derece kullanılabilir Ek 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>
<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.";
    }
}
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.";
    }
}
Imports System
Imports System.IO
Imports System.Data.SqlClient
Imports System.Configuration
Imports IronPdf

Protected Sub btnUpload_Click(sender As Object, e As EventArgs)
    If FileUpload1.HasFile AndAlso FileUpload1.PostedFile.ContentType = "application/pdf" Then
        Try
            Dim fileName As String = FileUpload1.FileName
            Dim fileBytes As Byte() = FileUpload1.FileBytes
            Dim maxFileSize As Integer = 10 * 1024 * 1024 ' 10MB limit

            If fileBytes.Length > maxFileSize Then
                lblMessage.Text = "File size exceeds 10MB limit."
                Return
            End If

            ' Validate PDF using IronPDF
            Using stream As New MemoryStream(fileBytes)
                Dim testPdf As New IronPdf.PdfDocument(stream)
                If testPdf.PageCount = 0 Then
                    lblMessage.Text = "Invalid PDF file."
                    Return
                End If
            End Using

            Dim constr As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString
            Using conn As New SqlConnection(constr)
                Dim query As String = "INSERT INTO PdfDocuments (FileName, FileData, FileSize, CreatedBy) " &
                                      "VALUES (@FileName, @FileData, @FileSize, @CreatedBy)"
                Using cmd As New SqlCommand(query, conn)
                    cmd.Parameters.AddWithValue("@FileName", fileName)
                    cmd.Parameters.AddWithValue("@FileData", fileBytes)
                    cmd.Parameters.AddWithValue("@FileSize", fileBytes.Length)
                    cmd.Parameters.AddWithValue("@CreatedBy", If(User.Identity.Name, "Anonymous"))

                    conn.Open()
                    cmd.ExecuteNonQuery()
                End Using
            End Using
            lblMessage.Text = "PDF document uploaded successfully!"
            lblFileInfo.Text = $"File: {fileName} ({fileBytes.Length \ 1024}KB)"
            LoadPdfList()
        Catch ex As Exception
            lblMessage.Text = "Error uploading file: " & ex.Message
        End Try
    Else
        lblMessage.Text = "Please select a valid PDF file."
    End If
End Sub
$vbLabelText   $csharpLabel

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();
    }
}
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();
    }
}
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports IronPdf

Private Sub LoadPdfList()
    Dim constr As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString
    Using conn As New SqlConnection(constr)
        Dim query As String = "SELECT Id, FileName, FileSize, UploadDate, CreatedBy FROM PdfDocuments ORDER BY UploadDate DESC"
        Using cmd As New SqlCommand(query, conn)
            conn.Open()
            Dim adapter As New SqlDataAdapter(cmd)
            Dim dt As New DataTable()
            adapter.Fill(dt)

            For Each row As DataRow In dt.Rows
                Dim fileSize As Integer = Convert.ToInt32(row("FileSize"))
                row("FileSize") = FormatFileSize(fileSize)
            Next

            GridView1.DataSource = dt
            GridView1.DataBind()
        End Using
    End Using
End Sub

Private Function FormatFileSize(bytes As Integer) As String
    If bytes < 1024 Then Return bytes & " B"
    If bytes < 1048576 Then Return (bytes \ 1024) & " KB"
    Return (bytes \ 1048576) & " MB"
End Function

Private Function GetPdfFromDatabase(id As Integer) As PdfData
    Dim pdfBytes As Byte() = Nothing
    Dim filename As String = ""
    Dim constr As String = ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString
    Using conn As New SqlConnection(constr)
        Dim query As String = "SELECT FileData, FileName FROM PdfDocuments WHERE Id = @Id"
        Using cmd As New SqlCommand(query, conn)
            cmd.Parameters.AddWithValue("@Id", id)
            conn.Open()
            Using reader As SqlDataReader = cmd.ExecuteReader()
                If reader.Read() Then
                    pdfBytes = CType(reader("FileData"), Byte())
                    filename = reader("FileName").ToString()
                End If
            End Using
        End Using
    End Using
    If pdfBytes IsNot Nothing Then
        Return New PdfData With {.Bytes = pdfBytes, .FileName = filename}
    End If
    Return Nothing
End Function

Protected Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs)
    If e.CommandName = "ViewPdf" Then
        Dim documentId As Integer = Convert.ToInt32(e.CommandArgument)
        ViewPdfDocument(documentId)
    ElseIf e.CommandName = "DownloadPdf" Then
        Dim documentId As Integer = Convert.ToInt32(e.CommandArgument)
        DownloadPdfDocument(documentId)
    End If
End Sub

Private Sub ViewPdfDocument(id As Integer)
    Dim pdfData = GetPdfFromDatabase(id)
    If pdfData IsNot Nothing Then
        Dim pdf As PdfDocument
        Using stream As New MemoryStream(pdfData.Bytes)
            pdf = New PdfDocument(stream)
        End Using

        ' 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()
    End If
End Sub
$vbLabelText   $csharpLabel

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;
// 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;
' 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
$vbLabelText   $csharpLabel

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';
}
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.

Sıkça Sorulan Sorular

ASP.NET'te bir veritabanından PDF görüntülemenin ana hedefi nedir?

Ana hedef, geliştiricilere ASP.NET web uygulaması içinde doğrudan bir veritabanından PDF görüntülemek için etkili yöntemler sunarak, projenin işlevselliğini ve kullanıcı deneyimini geliştirmektir.

IronPDF, ASP.NET'te bir veritabanından PDF'leri görüntülemede nasıl yardımcı olabilir?

IronPDF, veritabanı depolamasından PDF'leri sorunsuz bir şekilde işlemek için geliştiricilere güçlü kütüphaneler sunarak süreci basitleştirebilir, bu da ASP.NET uygulamalarına sorunsuz bir entegrasyon sağlar.

ASP.NET'te PDF görüntüleme için IronPDF kullanmanın faydaları nelerdir?

IronPDF kullanmak, kolay entegrasyon, yüksek kaliteli işleme ve çeşitli PDF özelliklerini destekleme gibi avantajlar sunar ve bu da ASP.NET uygulamanızın kullanımını ve performansını önemli ölçüde artırabilir.

IronPDF, bir veritabanından gelen büyük PDF dosyalarını verimli bir şekilde işleyebilir mi?

Evet, IronPDF, büyük PDF dosyalarını hızlı yükleme ve işleme sürelerini garanti ederek verimli bir şekilde işlemek için tasarlandı, bu da uygulama performansını sürdürmek için kritiktir.

IronPDF, ASP.NET'te PDF görüntülemeyi özelleştirme imkanı sunar mı?

Kesinlikle, IronPDF, geliştiricilere ASP.NET ortamındaki belirli gereksinimlerine göre PDF görüntülemeyi özelleştirme imkanı sunan çeşitli özelleştirme seçenekleri sağlar.

IronPDF, ASP.NET uygulamalarında hangi dosya formatlarını PDF'ye dönüştürebilir?

IronPDF, ASP.NET uygulamalarında dinamik içerik oluşturma için HTML, görüntüler ve daha fazlası gibi çeşitli dosya formatlarını PDF'ye dönüştürmeyi destekler.

IronPDF, ASP.NET uygulamaları için güvenli PDF işleme desteği sağlıyor mu?

Evet, IronPDF, şifreleme ve parola koruma dahil, güvenli PDF işleme desteği sunar ve bu da ASP.NET uygulamalarında hassas bilgilerin korunmasına yardımcı olur.

IronPDF, işlevselliği artırmak için diğer Iron Software ürünleriyle entegre edilebilir mi?

Evet, IronPDF, belgelerin yönetimi ve işlemeye yönelik kapsamlı çözümler sunmak için IronOCR ve IronBarcode gibi diğer Iron Software ürünleriyle entegre edilebilir.

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

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara