Altbilgi içeriğine atla
IRONPDF KULLANARAK

ASP.NET içinde Veri Tabanından PDF Görüntüleme (Geliştirici Kılavuzu)

ASP.NET'te bir veritabanından PDF'leri görüntülemek için, saklanan ikili veriyi alın ve IronPDF'nin PdfDocument sınıfını kullanarak işleyin, bu sınıf bayt dizilerini verimli bir şekilde ele alır ve özelleştirme seçenekleriyle tarayıcı uyumlu çıktı sağlar.

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

ASP.NET uygulamalarında PDF belgeleri yönetimi, ç çoğunlukla PDF dosyalarını dosya sisteminden ziyade doğrudan bir veritabanında saklamayı içerir. Bu yöntem daha iyi güvenlik, merkezi yedekleme ve basitleştirilmiş dağıtım sunar. Ancak, doğru araçlar olmadan bir veritabanından PDF belgelerini almak ve görüntülemek zor olabilir.

PDF dosyalarının bir veritabanı tablosunda ikili veri olarak saklanması, belge erişimi ve sürüm kontrolü üzerinde daha iyi kontrol sağlar. Kullanıcılara PDF belgeleri göstermeniz gerektiğinde, veritabanından bayt dizisini verimli bir şekilde almanız ve tarayıcıda işlemeniz gerekir. IronPDF, ASP.NET uygulamalarında PDF belgeleri yönetimi için etkili bir API ile bu tüm süreci basitleştirir.

Bu öğretici, IronPDF'nin kanıtlanmış özelliklerinden yararlanarak ASP.NET'te veritabanından PDF görüntüleme işlevselliğini gösterir. Yükleme, saklama ve PDF dosyalarını optimal performans ve güvenlikle görüntülemeyi kapsayan tam bir çözüm oluşturmayı öğreneceksiniz. Kütüphane, üretim seviyesinde belge yönetim sistemleri oluşturmayı kolaylaştıran çeşitli işleme seçeneklerini ve gelişmiş PDF manipülasyon 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 projenizin IronPDF yüklü olduğundan emin olun. Visual Studio'da Paket Yöneticisi Konsolunu açın ve tercihinize bağlı olarak aşağıdaki komutlardan birini çalıştırın:

Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
SHELL

IronPDF'yi NuGet Package Manager arayüzü üzerinden proje Gezin sekmesinde IronPdf aratarak da yükleyebilirsiniz. Kurulumdan sonra, lisans anahtarınızı uygulama başlatıldığında 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 uygun bir seçenek bulmak için mevcut lisans seviyelerini inceleyin.

Hangi Veritabanı Yapısı Gereklidir?

Veritabanı tablonuzun, PDF dosyalarını ikili veri olarak depolamak için bir varbinary(max) sütununa ihtiyaçı vardır. Daha iyi belge yönetimi için tablo, dosya adı, yükleme tarihi ve dosya boyutu gibi meta veri alanlarını içermelidir. Bu durumda uygun bir tablo oluşturmak için aşağıdaki SQL kullanılı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ı dizenizi web.config dosyasında yapılandırın. PDF görüntüleyici uygulaması, veritabanından yüklenen dosyaları alıp PDF içeriğini sorunsuzca görüntülemek için bu bağlantıyı kullanacaktır.

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

Çözüm, standart ADO.NET ad alanlarını ve IronPDF ad alanını kullanır. Hiçbir üçüncü taraf ORM'ye ihtiyaçınız yoktur, doğrudan ADO.NET yaklaşımı bağımlılıkları en aza indirir ve sorgu yürütme üzerinde tam kontrol sağlar. Bağlantı dizginizin, PDF saklama tablonuzun bulunduğu bir SQL Server örneğini işaret ettiğinden emin olun.

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

PDF belgelerini saklamak için özel olarak tasarlanmış bir veritabanı tablosu oluşturarak başlayın. Tablo yapısı, hem ikili verileri hem de PDF belgelerinin yönetimi için gerekli olan temel meta verileri kapsamalı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 PDF dosyasını FileData sütununda bir bayt dizisi olarak depolar. varbinary(max) veri tipi, çoğu PDF belgesi için yeterli olacak şekilde 2 GB'a kadar dosyaları depolayabilir. FileName alanı, görüntüleme ve indirme amacıyla orijinal dosya adını korur.

PDF Alımı için Veritabanı Performansını Nasıl İyileştirebilirsiniz?

PDF belgelerini alırken daha iyi performans için sıkça sorgulanan sütunlara dizin eklemeyi düşünün. Aşağıdaki SQL, WHERE ve ORDER BY ifadelerinde görünmesi muhtemel sütunlar üzerinde dizinler oluşturur:

CREATE INDEX IX_PdfDocuments_UploadDate
ON PdfDocuments(UploadDate DESC);

CREATE INDEX IX_PdfDocuments_FileName
ON PdfDocuments(FileName);

Bu yapı, gerektiğinde ek meta veri alanları ekleyebilme esnekliğini korurken yüklenen dosyaların verimli bir şekilde saklanmasını ve alınmasını sağlar. Çok büyük PDF dosyaları için, veritabanı depolamanın mimariniz için uygun olup olmadığını veya dosyaları disk veya nesne depolamada saklayarak yalnızca meta verileri veritabanında tutmanın ölçekli bir şekilde daha iyi performans göstereceği hibrit bir yaklaşımı değerlendirmenizi öneririz.

PDF Depolama Stratejilerinin Karşılaştırılması
Strateji En İyi Kullanım Amacı Avantajlar Hususlar
Veritabanı (VARBINARY) Küçük ila orta boyutlu dosyalar, yüksek güvenlik İşlemsel tutarlılık, merkezi yedekleme Veritabanı boyutunu hızla artırabilir
Dosya Sistemi Büyük dosyalar, yüksek veri işleme hızı 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çeklenebilirlik Maliyet açısından etkin, yüksek kullanılabilirlik Ek SDK bağımlılığı

PDF Dosyalarını Veritabanına Nasıl Yüklersiniz?

Yükleme fonksiyonunu ASP.NET'in FileUpload kontrolünü kullanarak uygulayın. Doğru doğrulama ile form elementinin içinde .aspx sayfanıza bu HTML işaretlemesini 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ı

'Dosya Seç' ve 'PDF Yükle' butonları ile PDF yükleme formu gösteren ASP.NET web uygulama arayüzü ve belgesel yönetim için boş bir PDF Belgeleri Listesi bölümü

Dosya Yükleme Olaylarını Nasıl Yönetirsiniz?

Yükleme düğmesi, sunucu tarafı olay işleyiciyi tetikler. İşte yüklenen dosyaları bir bayt dizisine dönüştüren ve doğru hata yönetimi ile bunları saklayan yükleme işlevinin tam uygulaması:

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, veritabanında yalnızca geçerli PDF dosyalarının saklanmasını sağlamak için yüklemeden önce dosya türünü doğrular. Bayt dizisi dönüşümü FileBytes özelliği aracılığıyla otomatik olarak gerçekleşir. Ek doğrulamalar, PDF bütünlüğünün ve dosya boyutu sınırlarının kontrol edilmesini içerir. IronPDF kullanarak bayt dizisini kaydetmeden önce açmak, dosyanın yalnızca uzantısı değiştirilmiş bir dosya yerine gerçek, ayrıştırılabilir bir PDF belgesi olduğunu doğrular.

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

'Dosya yükleme formu ve yüklenen PDF belgelerini gösterme ve indirme aksiyon butonları ile tam belge yönetimine sahip PDF yükleme fonksiyonunu gösteren ASP.NET web uygulama arayüzü

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

IronPDF, veritabanından alınan PDF belgelerinin render edilmesinde üstünlük sağlar. Kütüphane, gelişmiş render yetenekleri ile PDF içeriğini tarayıcılarda görüntülemek için birden fazla seçenek sunar. Önce veritabanı tablonuzdan ikili veriyi alın, sonra bunu işleme için IronPDF'e aktarın ve ardından müşteri tarafına tekrar akıtı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, uygun güvenlik ayarlarıyla belgeyi istemciye geri yansıtır. İçerik yerleşimi inline, tarayıcıya PDF'yi indirmek yerine görüntülemesini söyler. Yazdırma izinleri ve kopyala-yapıştır kısıtlamaları gibi güvenlik ayarlarını belge politika gereksinimlerinize uyacak şekilde ayarlayabilirsiniz.

PDF Render Parametrelerini Nasıl Yönetirsiniz?

SQL komutu için parametreler, birincil anahtarıyla belirli bir PDF'yi güvenli bir şekilde almak için kritik öneme sahiptir. Parametrik sorgular, SQL enjeksiyon saldırılarını önler ve doğru veri bağlamasını sağlar. İkili veri elde edildikten sonra, IronPDF bir MemoryStream yüklemesi gerçekleştirir ve belge tarayıcıya gönderilmeden önce daha fazla düzenleme için tam erişim sağlar.

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

Navigasyon kontrolleri ve çok sayfalı destek göstergeleri ile %100 zoomda görüntülenen 'Bir PDF Nedir?' başlıklı bir belgesi ve Taşınabilir Belge Formatı hakkında açıklayıcı metin içeren PDF görüntüleyici arayüzü

PDF'lere Görüntülemeden Önce Hangi İleri Düzey Özellikler Eklenebilir?

IronPDF'in PDF işleme yetenekleri basit görüntülemenin ötesine uzanır. Bir PDF'yi filigran, başlıklar ve altbilgiler ve dijital imzalar ile render etmeden önce manipüle edebilirsiniz:

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

Filigranlı PDF Görüntüleme

IronPDF'nin belge güvenliği için filigranlama yeteneklerini gösteren ve eğik 'GİZLİ' filigranı ile detaylı metin içeriği sunan 'Bir PDF Nedir?' başlıklı bir belgeyi gösteren PDF görüntüleyici

Filigranlama, kullanıcıların görmesine ancak kelimesi kelimesine kopyalamamasına izin verilen belgeleri görüntülerken özellikle yararlıdır. PDF'yi görüntülemeden önce metin çıkartabilir ve arama dizinleri oluşturabilir veya belirli sayfaları küçük resim oluşturma için resimlere dönüştürebilirsiniz.

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

ADO.NET ile IronPDF'i birleştirmek, küçük iç araçlardan kurumsal belge yönetim sistemlerine kadar ölçeklenebilir bir model sunar. Yaklaşım tamamen sunucu tarafındadır -- istemci tarafında PDF render kütüphanesi gerekmez ve doğru MIME türü döndüğünde tarayıcının yerleşik PDF görüntüleyicisi gösterimi yönetir.

Bu modelin temel güçlü yönleri şunlardır:

  • Yükleme anında doğrulama: IronPDF, dosya veritabanına ulaşmadan önce açarak bozuk veya PDF olmayan dosyaları hemen reddeder.
  • Görüntüleme anında güvenlik kontrolü: Yazdırma ve kopyala-yapıştır izinleri, baytlar tarayıcıya ulaşmadan önce IronPDF tarafından uygulanır.
  • Minimal istemci tarafı kod: Tarayıcı, yerel olarak render etmeyi gerektirir, JavaScript karmaşıklığını azaltır.
  • Esnek ön işleme: Sunucu tarafı yöntemin tamamında HTML dizesini PDF'ye dönüştürme, belgelerde birleştirme ve ayırma işlemleri veya özel filigran ekleyebilirsiniz - bu esneklik sağlanır.

Tarayıcı Entegrasyonu ve İndirme Seçeneklerini Nasıl Yönetirsiniz?

Daha iyi web entegrasyonu için, belgeleri yeni bir sekmede açmak için JavaScript kullanın, mevcut sayfanın yerine geçmeyin. Bu, kullanıcıların belge listesini gözden geçirirken daha iyi bir deneyim sağlar:

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ı veritabanı alma mantığını izler fakat içerik yerleşimi olarak inline yerine attachment kullanı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ıyı paylaşır.

Form tabanlı belge iş akışları için IronPDF'in PDF form doldurma yeteneklerini keşfedin -- bir belgeyi görüntülemeden veya indirmeden önce form alanlarını önceden doldurabilirsiniz, bu, fatura oluşturma ve sözleşme yönetim senaryoları için yararlıdır.

PDF Sunumu İçin Güvenlik Hususları Nelerdir?

Her zaman isteyen kullanıcının, istenen döküman ID'sine erişim izninin olduğunu doğrulayın, yoksa baytları sunmayın. Bir sorgu dizisinde basit bir tamsayı ID, numaralanması kolaydır -- yetkilendirme denetimleri olmadan, kimlik doğrulanmış herhangi bir kullanıcı ID'leri tahmin ederek herhangi bir dökümanı görüntüleyebilir.

En iyi uygulamalar şunları içerir:

  • Geçerli kullanıcı kimliğine karşı doğrulamak için bir CreatedBy veya OwnerId sütunu depolayın ve FileData sorgulamadan önce bunu doğrulayın.
  • Belge tanımlayıcılar olarak peş peşe gelen tamsayılar yerine GUID'ler kullanın, bu sayede numaralandırmayı zorlaştırın. Uygulamanızın dışında erişilse bile dosyanın kendisinin korunması için çok hassas belgeler için yükleme anında PDF parola koruması uygulayın.
  • Audit izi için tüm görüntüleme ve indirme olaylarını kaydedin.

ASP.NET güvenlik kalıplarıyla ilgili dış başvurular için OWASP ASP.NET Güvenlik Cheat Sheet ve Microsoft'un ASP.NET için güvenli kodlama kılavuzları otoriter rehberlik sağlar. IronPdf için NuGet galeri girişi, ayrıca sürüm geçmişi ve bağımlılıkları belgeliyor.

PDF Veritabanı Görüntülemeyle Nasıl Başlarsınız?

Kendi projenizde bu çözümü uygulamak için:

  1. IronPDF'yi NuGet aracılığıyla yükleyin (Install-Package IronPdf veya dotnet add package IronPdf).
  2. Yukarıdaki SQL şemasını kullanarak PdfDocuments tablosunu oluşturun. .aspx kod dosyanızın arkasına yükleme işleyicisini ekleyin. IronPDF aracılığıyla baytları yayarak görüntüleme ve indirme işleyicilerini ekleyin. GridView'e işleyicilere işaret eden satır komutları ekleyin.

IronPDF özellik setini keşfederek belge yönetimi iş akışlarına doğal bir şekilde uyum sağlayan HTML'den PDF'ye dönüştürme ve PDF birleştirme ve ayırma gibi ek yetenekleri keşfedebilirsiniz. ücretsiz bir deneme başlatarak, bir lisansa taahhüt oluşturmadan önce tam API'yi test edin.

Sıkça Sorulan Sorular

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

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

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

IronPDF, veritabanı depolamasından PDF'leri sorunsuz bir şekilde işlemek için sağlam kütüphaneler sağlayarak süreci basitleştirebilir ve ASP.NET uygulamalarına sorunsuz bir entegrasyon sağlar.

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

IronPDF kullanmanın avantajları arasında kolay entegrasyon, yüksek kaliteli işleme ve çeşitli PDF özellikleri için destek bulunur, bu da ASP.NET uygulamanızın kullanılabilirliğini ve performansını önemli ölçüde artırabilir.

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

Evet, IronPDF, büyük PDF dosyalarını verimli bir şekilde işlemek için tasarlanmıştır ve hızlı yükleme ve işleme sürelerini sağlar, bu da uygulama performansını sürdürmek için çok önemlidir.

ASP.NET'te IronPDF kullanarak PDF görüntülemeyi özelleştirmek mümkün mü?

Kesinlikle, IronPDF geliştiricilere ASP.NET ortamında PDF görüntülemeyi kendi özel gereksinimlerine göre özelleştirme imkanı veren çeşitli özelleştirme seçenekleri sunar.

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 özellikle yararlı olabilecek, HTML, görüntüler ve daha fazlası gibi çeşitli dosya formatlarını PDF'lere dönüştürmeyi destekler.

IronPDF, ASP.NET uygulamaları için güvenli PDF işlemini destekliyor mu?

Evet, IronPDF, ASP.NET uygulamaları içinde hassas bilgilerin korunmasına yardımcı olan şifreleme ve parola koruması da dahil olmak üzere güvenli PDF işlemini destekler.

IronPDF, ileri düzey işlevsellik için diğer Iron Software ürünleriyle entegre edilebilir mi?

Evet, IronPDF, ASP.NET uygulamalarında belge yönetimi ve işleme için kapsamlı çözümler sağlamak amacıyla IronOCR ve IronBarcode gibi diğer Iron Software ürünleriyle entegre edilebilir.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

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