Altbilgi içeriğine atla
IRONWORD KULLANıMı

ASP .NET Core Word Dosyası İthalat ve İhracat

Bu kılavuz, mevcut Word belgelerini nasıl içeri aktaracağınızı, içeriklerini nasıl göstereceğinizi ve IronWord kütüphanesi kullanarak sıfırdan belge nasıl oluşturacağınızı keşfeder. Bu öğreticinin sonunda, aşağıdaki özelliklere sahip bir ASP.NET Core web uygulaması oluşturmuş olacaksınız:

  1. Word belgelerini yükleyin ve okuyun
  2. Bu belgelerin içeriğini bir metin kutusunda gösterin
  3. Docx dosyasını dışa aktarın

Bu proje, web uygulamalarında Word belge işlemleri entegrasyonu gerektiren geliştiriciler için mükemmeldir; belge yönetim sistemleri, rapor üreticileri veya Microsoft Word dosyalarını içeren diğer senaryolarda olduğu gibi.

Ön Koşullar

Bu öğreticiyi takip etmek için, sahip olmanız gerekenler:

  • Temel C# ve ASP.NET Core bilgisi
  • Visual Studio 2019 veya üstü kurulu (alternatif olarak, C# eklentisi ile Visual Studio Code'u kullanabilirsiniz)
  • .NET Core SDK 3.1 veya üzeri

Bu teknolojilerde uzman değilseniz endişelenmeyin - sürecin her adımında size rehberlik edeceğiz!

IronWord nedir?

IronWord, geliştiricilere Microsoft Word belgelerini programlı olarak okuma, manipüle etme ve oluşturabilme imkanı tanıyan bir .NET kütüphanesidir. Word dosyaları ile çalışmayı basitleştiren yüksek seviyeli bir API sağlar, bu da projelerimiz için mükemmel bir seçim olmasını sağlar.

IronWord'un bazı önemli özellikleri şunlardır:

  • Çeşitli Word formatlarını (DOCX, DOC, vb.) okuma ve yazma
  • Belge içeriğini ve yapısını manipüle etme
  • Metin ve paragrafları biçimlendirme
  • Tablolar, görüntüler ve diğer belge öğeleriyle çalışma
  • Belgelerde Posta Birleştirme süreci
  • Word belgesini, kolaylıkla bir PDF belgesine dönüştürme, böylece nihai Word belgelerinizi paylaşımı kolay PDF dosyaları yapma

Artık ne inşa ettiğimizin genel bir bakışına ve kullanacağımız araçlara sahibiz, proje kurulumuna dalalım!

2. Proje kurulumu

Bu bölümde, yeni bir ASP.NET Core proje oluşturacağız ve IronWord ile çalışmak için gerekli paketleri kuracağız.

2.1 Yeni bir ASP.NET Core Projesi Oluşturma

  1. Visual Studio 2019 veya üstünü açın.
  2. 'Yeni bir proje oluştur' üzerine tıklayın.
  3. 'ASP.NET Core Web Uygulaması'nı arayın ve seçin.
  4. 'Sonraki'ye tıklayın.
  5. Projenize 'WordDocumentProcessor' (veya tercih ettiğiniz herhangi bir isim) adını verin.
  6. .NET Framework'ü ve projeniz için bir konumu seçin ve 'Oluştur'a tıklayın.

2.2 IronWord NuGet Paketini Kurma

Artık projemizi kurduğumuza göre, IronWord kütüphanesini ekleyelim:

  1. Çözüm Gezgini'nde projenizin üzerine sağ tıklayın.
  2. 'NuGet Paketlerini Yönet'i seçin.
  3. 'Gözat' sekmesinde 'IronWord' arayın.
  4. Resmi IronWord paketini arayın.
  5. Projenize eklemek için 'Yükle'ye tıklayın.

2.3 Mevcut Kontrolör ve Görünümü Güncelleme

Belge işleme işlevselliğini dahil etmek için mevcut yapımızı güncelleyelim:

  1. Belgeleri işleme mantığımız için Kontrolörler klasöründeki mevcut HomeController.cs'i kullanacağız.
  2. Belge yükleme ve gösterme işlevselliğini dahil etmek için Görünümler/Home klasöründeki mevcut Index.cshtml görüntüsünü güncelleyeceğiz.

Artık projemizi kurduk ve IronWord paketini yükledik, belge içe ve dışe aktarma işlevselliğini uygulamaya hazırız. HomeController'ımıza yeni yöntemler ekleyeceğiz ve bu özellikleri işlemek için Index görünümünü değiştireceğiz. Sonraki bölümde, Word belgelerini içe aktarmaya ve içeriklerini göstermeye odaklanacağız, mevcut kontrolör ve görünüm yapımızı kullanarak.

3. Word Belgelerini İçe Aktarma

Bu bölümde, bir ASP.NET MVC uygulamasında Word belgelerini içeri aktarma ve işleme özelliğini nasıl uygulayacağımızı öğreneceğiz. Hem kullanıcı arayüzü tasarımını hem de arka plan kontrolör mantığını ele alacağız.

3.1 Kullanıcı Arayüzü Tasarımı

Word belgelerini içeri aktarma kullanıcı arayüzü, sezgisel ve görsel olarak çekici olacak şekilde tasarlanmıştır. Kullanıcı arayüzünün önemli bileşenlerine bakalım:

3.1.1 Yükleme Alanı

Yükleme alanı, kullanıcıların Word belgelerini seçip yüklemelerini davet eden arayüzün odak noktasıdır. İşte yapısı:

<div class="upload-area">
    <svg class="file-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
        <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
        <polyline points="14 2 14 8 20 8"></polyline>
        <line x1="16" y1="13" x2="8" y2="13"></line>
        <line x1="16" y1="17" x2="8" y2="17"></line>
        <polyline points="10 9 9 9 8 9"></polyline>
    </svg>
    <p>Choose a Word document</p>
    <label for="fileInput" class="choose-file">Choose File</label>
    <p class="file-info">.DOC or .DOCX (MAX. 10MB)</p>
    <button id="uploadBtn" class="upload-button">Upload and Process</button>
</div>
<div class="upload-area">
    <svg class="file-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
        <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
        <polyline points="14 2 14 8 20 8"></polyline>
        <line x1="16" y1="13" x2="8" y2="13"></line>
        <line x1="16" y1="17" x2="8" y2="17"></line>
        <polyline points="10 9 9 9 8 9"></polyline>
    </svg>
    <p>Choose a Word document</p>
    <label for="fileInput" class="choose-file">Choose File</label>
    <p class="file-info">.DOC or .DOCX (MAX. 10MB)</p>
    <button id="uploadBtn" class="upload-button">Upload and Process</button>
</div>
HTML

Bu kod, bir dosya simgesi, gizli bir dosya girişi ve dosya seçme düğmesi görevi gören stilli bir etiketle görsel olarak çekici bir yükleme alanı oluşturur. Ayrıca kabul edilen dosya türleri ve yükleme ve işleme başlatmak için bir düğme hakkında bilgi içerir.

3.1.2 İçerik Gösterme Alanı

Belge işlendiğinde, içeriği özel bir alanda gösterilir:

<div class="content-wrapper">
    <h2>Document Content:</h2>
    <div id="documentContent" class="content-area">
        No content to display.
    </div>
</div>
<div class="content-wrapper">
    <h2>Document Content:</h2>
    <div id="documentContent" class="content-area">
        No content to display.
    </div>
</div>
HTML

Bu bölüm, işlenmiş belge içeriğini görüntülemek için kaydırılabilir bir alan sağlar.

3.2 Kontrolör Uygulaması

HomeController, Word belgelerini içeri aktarma ve işlemeye yönelik sunucu tarafı mantığını yönetir. Anahtar yöntemleri inceleyelim:

3.2.1 UploadAndProcess Yöntemi

Bu metod, dosya yükleme ve işleme işlemlerini yönetmekten sorumludur:

[HttpPost]
public IActionResult UploadAndProcess(IFormFile file)
{
    if (file == null || file.Length == 0)
    {
        return Json(new { success = false, message = "No file uploaded." });
    }
    var fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant();
    if (fileExtension != ".doc" && fileExtension != ".docx")
    {
        return Json(new { success = false, message = "Invalid file type. Please upload a .doc or .docx file." });
    }
    try
    {
        var tempFilePath = Path.GetTempFileName();
        using (var stream = new FileStream(tempFilePath, FileMode.Create))
        {
            file.CopyTo(stream);
        }
        StringBuilder contentBuilder = new StringBuilder();
        WordDocument doc = new WordDocument(tempFilePath);
        foreach (Paragraph paragraph in doc.Paragraphs)
        {
            foreach (Text textRun in paragraph.Texts)
            {
                contentBuilder.AppendLine(textRun.Text);
            }
            contentBuilder.AppendLine(); // Add an extra line between paragraphs
        }
        System.IO.File.Delete(tempFilePath); // Clean up the temporary file
        return Json(new { success = true, content = FormatContentAsHtml(contentBuilder.ToString()) });
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error processing document");
        return Json(new { success = false, message = "An error occurred while processing the document." });
    }
}
[HttpPost]
public IActionResult UploadAndProcess(IFormFile file)
{
    if (file == null || file.Length == 0)
    {
        return Json(new { success = false, message = "No file uploaded." });
    }
    var fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant();
    if (fileExtension != ".doc" && fileExtension != ".docx")
    {
        return Json(new { success = false, message = "Invalid file type. Please upload a .doc or .docx file." });
    }
    try
    {
        var tempFilePath = Path.GetTempFileName();
        using (var stream = new FileStream(tempFilePath, FileMode.Create))
        {
            file.CopyTo(stream);
        }
        StringBuilder contentBuilder = new StringBuilder();
        WordDocument doc = new WordDocument(tempFilePath);
        foreach (Paragraph paragraph in doc.Paragraphs)
        {
            foreach (Text textRun in paragraph.Texts)
            {
                contentBuilder.AppendLine(textRun.Text);
            }
            contentBuilder.AppendLine(); // Add an extra line between paragraphs
        }
        System.IO.File.Delete(tempFilePath); // Clean up the temporary file
        return Json(new { success = true, content = FormatContentAsHtml(contentBuilder.ToString()) });
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error processing document");
        return Json(new { success = false, message = "An error occurred while processing the document." });
    }
}
<HttpPost>
Public Function UploadAndProcess(ByVal file As IFormFile) As IActionResult
	If file Is Nothing OrElse file.Length = 0 Then
		Return Json(New With {
			Key .success = False,
			Key .message = "No file uploaded."
		})
	End If
	Dim fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant()
	If fileExtension <> ".doc" AndAlso fileExtension <> ".docx" Then
		Return Json(New With {
			Key .success = False,
			Key .message = "Invalid file type. Please upload a .doc or .docx file."
		})
	End If
	Try
		Dim tempFilePath = Path.GetTempFileName()
		Using stream = New FileStream(tempFilePath, FileMode.Create)
			file.CopyTo(stream)
		End Using
		Dim contentBuilder As New StringBuilder()
		Dim doc As New WordDocument(tempFilePath)
		For Each paragraph As Paragraph In doc.Paragraphs
			For Each textRun As Text In paragraph.Texts
				contentBuilder.AppendLine(textRun.Text)
			Next textRun
			contentBuilder.AppendLine() ' Add an extra line between paragraphs
		Next paragraph
		System.IO.File.Delete(tempFilePath) ' Clean up the temporary file
		Return Json(New With {
			Key .success = True,
			Key .content = FormatContentAsHtml(contentBuilder.ToString())
		})
	Catch ex As Exception
		_logger.LogError(ex, "Error processing document")
		Return Json(New With {
			Key .success = False,
			Key .message = "An error occurred while processing the document."
		})
	End Try
End Function
$vbLabelText   $csharpLabel

Bu metod aşağıdaki görevleri gerçekleştirir:

  1. Yüklenen dosyanın doğru formatta (DOC veya DOCX) olduğundan emin olarak doğrular.
  2. Belgeyi IronWord kütüphanesi ile işler.
  3. Formatlanmış içeriği JSON olarak döndürür.

3.2.2 İçeriği HTML Olarak Formatlama Metodu

Bu özel metod, çıkarılan içeriği HTML formatına dönüştürür:

private string FormatContentAsHtml(string content)
{
    var lines = content.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
    var htmlBuilder = new StringBuilder();
    htmlBuilder.Append("<div class='document-content'>");
    foreach (var line in lines)
    {
        if (string.IsNullOrWhiteSpace(line))
        {
            htmlBuilder.Append("<p> </p>");
        }
        else
        {
            htmlBuilder.Append($"<p>{HttpUtility.HtmlEncode(line)}</p>");
        }
    }
    htmlBuilder.Append("</div>");
    return htmlBuilder.ToString();
}
private string FormatContentAsHtml(string content)
{
    var lines = content.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
    var htmlBuilder = new StringBuilder();
    htmlBuilder.Append("<div class='document-content'>");
    foreach (var line in lines)
    {
        if (string.IsNullOrWhiteSpace(line))
        {
            htmlBuilder.Append("<p> </p>");
        }
        else
        {
            htmlBuilder.Append($"<p>{HttpUtility.HtmlEncode(line)}</p>");
        }
    }
    htmlBuilder.Append("</div>");
    return htmlBuilder.ToString();
}
Private Function FormatContentAsHtml(ByVal content As String) As String
	Dim lines = content.Split( { Environment.NewLine }, StringSplitOptions.None)
	Dim htmlBuilder = New StringBuilder()
	htmlBuilder.Append("<div class='document-content'>")
	For Each line In lines
		If String.IsNullOrWhiteSpace(line) Then
			htmlBuilder.Append("<p> </p>")
		Else
			htmlBuilder.Append($"<p>{HttpUtility.HtmlEncode(line)}</p>")
		End If
	Next line
	htmlBuilder.Append("</div>")
	Return htmlBuilder.ToString()
End Function
$vbLabelText   $csharpLabel

Bu metod, belgenin içeriğinin doğru biçimde HTML olarak formatlandığından emin olur, her satırın paragraf etiketleri içinde sarılması ve boş satırların korunması sağlanır.

3.3 İstemci Tarafı JavaScript

Dosya yükleme ve işlenen içeriği görüntüleme işlemini yönetmek için JavaScript kullanıyoruz:

uploadBtn.addEventListener('click', () => {
    const file = fileInput.files[0];
    if (!file) {
        alert('Please select a file first.');
        return;
    }
    const formData = new FormData();
    formData.append('file', file);
    uploadBtn.disabled = true;
    uploadBtn.textContent = 'Processing...';
    documentContent.innerHTML = 'Processing document...';
    fetch('/Home/UploadAndProcess', {
        method: 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            documentContent.innerHTML = data.content;
        } else {
            documentContent.innerHTML = `<p>Error: ${data.message}</p>`;
        }
    })
    .catch(error => {
        console.error('Error:', error);
        documentContent.innerHTML = '<p>An error occurred while processing the document.</p>';
    })
    .finally(() => {
        uploadBtn.disabled = false;
        uploadBtn.textContent = 'Upload and Process';
    });
});
uploadBtn.addEventListener('click', () => {
    const file = fileInput.files[0];
    if (!file) {
        alert('Please select a file first.');
        return;
    }
    const formData = new FormData();
    formData.append('file', file);
    uploadBtn.disabled = true;
    uploadBtn.textContent = 'Processing...';
    documentContent.innerHTML = 'Processing document...';
    fetch('/Home/UploadAndProcess', {
        method: 'POST',
        body: formData
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            documentContent.innerHTML = data.content;
        } else {
            documentContent.innerHTML = `<p>Error: ${data.message}</p>`;
        }
    })
    .catch(error => {
        console.error('Error:', error);
        documentContent.innerHTML = '<p>An error occurred while processing the document.</p>';
    })
    .finally(() => {
        uploadBtn.disabled = false;
        uploadBtn.textContent = 'Upload and Process';
    });
});
JAVASCRIPT

Bu JavaScript kodu, dosya yükleme sürecini yönetir, dosyayı işlenmesi için sunucuya gönderir ve işlenen içeriği veya hata mesajlarını kullanıcı arayüzüne günceller.

3.4 Kullanıcı Arayüzünü Şekillendirme

Uygulama, çekici ve kullanıcı dostu bir arayüz oluşturmak için özel CSS kullanır.

<style>
    body {
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        background-color: #f7f7f7;
        color: #333;
    }
    .container {
        max-width: 800px;
        margin: 0 auto;
        padding: 2rem;
        padding-top: 0.5rem;
    }
    h1 {
        font-weight: 300;
        color: #2c3e50;
        text-align: center;
        margin-bottom: 1rem;
    }
    .lead {
        text-align: center;
        color: #7f8c8d;
        margin-bottom: 2rem;
    }
    .upload-area {
        background-color: #ffffff;
        border-radius: 8px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        padding: 2rem;
        text-align: center;
        margin-bottom: 2rem;
        transition: all 0.3s ease;
    }
    .upload-area:hover {
        box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
    }
    .file-icon {
        width: 64px;
        height: 64px;
        margin-bottom: 1rem;
        color: #3498db;
    }
    .choose-file {
        background-color: #ecf0f1;
        color: #2c3e50;
        border: none;
        padding: 0.5rem 1rem;
        border-radius: 4px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }
    .choose-file:hover {
        background-color: #d5dbdb;
    }
    .file-info {
        font-size: 0.9em;
        color: #95a5a6;
        margin-top: 0.5rem;
    }
    .upload-button {
        background-color: #3498db;
        color: white;
        border: none;
        padding: 0.75rem 1.5rem;
        border-radius: 4px;
        cursor: pointer;
        transition: background-color 0.3s ease;
        margin-top: 1rem;
    }
    .upload-button:hover {
        background-color: #2980b9;
    }
    .content-wrapper {
        background-color: #ffffff;
        border-radius: 8px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        padding: 1rem;
        margin-top: 2rem;
    }
    .content-area {
        max-height: 300px;
        overflow-y: auto;
        padding: 1rem;
        background-color: #f9f9f9;
        border-radius: 4px;
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        font-size: 14px;
        line-height: 1.6;
    }
    .content-area::-webkit-scrollbar {
        width: 8px;
    }
    .content-area::-webkit-scrollbar-track {
        background: #f1f1f1;
        border-radius: 4px;
    }
    .content-area::-webkit-scrollbar-thumb {
        background: #bdc3c7;
        border-radius: 4px;
    }
    .content-area::-webkit-scrollbar-thumb:hover {
        background: #95a5a6;
    }
    .document-content p {
        margin: 0 0 10px 0;
    }
</style>

Bu CSS, hafif bir renk şemasıyla temiz, modern bir görünüm oluşturur. Yükleme alanı, hafif bir gölge etkisiyle beyaz bir arka plana sahipken, içerik alanı, açık gri bir arka planla kaydırılabilir bir tasarıma sahiptir. Sınır yarıçapı ve kutu gölgesi özelliklerini kullanmak, arayüz elemanlarına derinlik ve görsel ilgi katar.

4. Word Belgelerini Dışa Aktarma

Word Belge İşleyicimizi geliştirmeye devam ederken, belgeleri dışa aktarma yeteneği ekleyelim. Bu özellik, kullanıcıların uygulamamızdan yeni bir Word belgesi oluşturmalarına olanak tanır.

4.1 Kullanıcı Arayüzünü Güncelleme

İlk olarak, gezinme çubuğumuza bir "Dışa Aktar" seçeneği ekleyeceğiz. Views/Shared klasöründeki _Layout.cshtml dosyasını açın ve

4.2 İstemci Tarafı Dışa Aktarım Mantığını Uygulama

Şimdi, dışa aktarma sürecini yönetecek JavaScript fonksiyonunu ekleyelim. Dosyamızın _Layout.cshtml dosyasının altında, kapanış etiketinin hemen öncesinde aşağıdaki betiği ekleyeceğiz:

<script>
function exportDocument() {
    $.ajax({
        url: '/Home/ExportWordDocument',
        type: 'POST',
        success: function (response) {
            if (response.success) {
                var fileName = prompt("Enter a name for the document (without extension):", "ExportedDocument");
                if (fileName === null) {
                    return;
                }
                fileName = (fileName.trim() || "ExportedDocument").replace(/\.[^/.]+$/, "") + ".docx";
                var a = document.createElement('a');
                a.style.display = 'none';
                a.href = '/Home/DownloadFile?tempFilePath=' + encodeURIComponent(response.tempFilePath) + '&userFileName=' + encodeURIComponent(fileName);
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
            } else {
                alert('Failed to export document: ' + response.message);
            }
        },
        error: function () {
            alert('An error occurred while exporting the document.');
        }
    });
}
</script>
<script>
function exportDocument() {
    $.ajax({
        url: '/Home/ExportWordDocument',
        type: 'POST',
        success: function (response) {
            if (response.success) {
                var fileName = prompt("Enter a name for the document (without extension):", "ExportedDocument");
                if (fileName === null) {
                    return;
                }
                fileName = (fileName.trim() || "ExportedDocument").replace(/\.[^/.]+$/, "") + ".docx";
                var a = document.createElement('a');
                a.style.display = 'none';
                a.href = '/Home/DownloadFile?tempFilePath=' + encodeURIComponent(response.tempFilePath) + '&userFileName=' + encodeURIComponent(fileName);
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
            } else {
                alert('Failed to export document: ' + response.message);
            }
        },
        error: function () {
            alert('An error occurred while exporting the document.');
        }
    });
}
</script>
HTML

Bu JavaScript fonksiyonu, bir Word belgesi oluşturmak için sunucuya bir AJAX POST isteği gönderir. Başarı durumunda, kullanıcıdan bir dosya adı istemi alır ve ardından dosyayı indirmek için geçici bir bağlantı oluşturur. Bağlantı otomatik olarak tıklatılır ve ardından DOM'dan kaldırılır. Bir aşamada hata oluşursa, kullanıcıya bir uyarı gösterilir.

4.3 Sunucu Tarafı Dışa Aktarım Fonksiyonalitesini Katma

Şimdi sunucu tarafındaki mantığı uygulayalım. Controllers klasöründeki HomeController.cs dosyasını açın. Dışa aktarma sürecini yönetmek için iki yeni metod ekleyeceğiz.

İlk olarak, Word belgesi oluşturma metodunu ekleyelim:

[HttpPost]
public IActionResult ExportWordDocument()
{
    try
    {
        WordDocument doc = new WordDocument();
        doc.AddText("Test Word");
        string tempFileName = $"TempDoc_{Guid.NewGuid()}.docx";
        string tempFilePath = Path.Combine(_environment.WebRootPath, "TempFiles", tempFileName);
        Directory.CreateDirectory(Path.GetDirectoryName(tempFilePath));
        doc.SaveAs(tempFilePath);
        return Json(new { success = true, tempFilePath = $"/TempFiles/{tempFileName}" });
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error exporting Word document");
        return Json(new { success = false, message = "An error occurred while exporting the document." });
    }
}
[HttpPost]
public IActionResult ExportWordDocument()
{
    try
    {
        WordDocument doc = new WordDocument();
        doc.AddText("Test Word");
        string tempFileName = $"TempDoc_{Guid.NewGuid()}.docx";
        string tempFilePath = Path.Combine(_environment.WebRootPath, "TempFiles", tempFileName);
        Directory.CreateDirectory(Path.GetDirectoryName(tempFilePath));
        doc.SaveAs(tempFilePath);
        return Json(new { success = true, tempFilePath = $"/TempFiles/{tempFileName}" });
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error exporting Word document");
        return Json(new { success = false, message = "An error occurred while exporting the document." });
    }
}
<HttpPost>
Public Function ExportWordDocument() As IActionResult
	Try
		Dim doc As New WordDocument()
		doc.AddText("Test Word")
		Dim tempFileName As String = $"TempDoc_{Guid.NewGuid()}.docx"
		Dim tempFilePath As String = Path.Combine(_environment.WebRootPath, "TempFiles", tempFileName)
		Directory.CreateDirectory(Path.GetDirectoryName(tempFilePath))
		doc.SaveAs(tempFilePath)
		Return Json(New With {
			Key .success = True,
			Key .tempFilePath = $"/TempFiles/{tempFileName}"
		})
	Catch ex As Exception
		_logger.LogError(ex, "Error exporting Word document")
		Return Json(New With {
			Key .success = False,
			Key .message = "An error occurred while exporting the document."
		})
	End Try
End Function
$vbLabelText   $csharpLabel

Bu metod, IronWord kütüphanesini kullanarak yeni bir Word belgesi oluşturur, bazı test metinleri ekler ve benzersiz bir adla geçici bir dosyaya kaydeder. Başarı durumu ve geçici dosyanın yolu ile bir JSON nesnesi döndürür. Bir hata oluşursa, istisna günlüğe kaydedilir ve hata mesajı döndürülür.

Son olarak, dosya indirme işlemini yönetmek için metodu ekleyelim:

[HttpGet]
public IActionResult DownloadFile(string tempFilePath, string userFileName)
{
    try
    {
        string fullPath = Path.Combine(_environment.WebRootPath, tempFilePath.TrimStart('/'));
        if (!System.IO.File.Exists(fullPath))
        {
            return NotFound();
        }
        byte[] fileBytes = System.IO.File.ReadAllBytes(fullPath);
        System.IO.File.Delete(fullPath);
        string fileName = !string.IsNullOrEmpty(userFileName) ? userFileName : "ExportedDocument.docx";
        return File(fileBytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fileName);
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error downloading file");
        return BadRequest("An error occurred while downloading the file.");
    }
}
[HttpGet]
public IActionResult DownloadFile(string tempFilePath, string userFileName)
{
    try
    {
        string fullPath = Path.Combine(_environment.WebRootPath, tempFilePath.TrimStart('/'));
        if (!System.IO.File.Exists(fullPath))
        {
            return NotFound();
        }
        byte[] fileBytes = System.IO.File.ReadAllBytes(fullPath);
        System.IO.File.Delete(fullPath);
        string fileName = !string.IsNullOrEmpty(userFileName) ? userFileName : "ExportedDocument.docx";
        return File(fileBytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fileName);
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error downloading file");
        return BadRequest("An error occurred while downloading the file.");
    }
}
<HttpGet>
Public Function DownloadFile(ByVal tempFilePath As String, ByVal userFileName As String) As IActionResult
	Try
		Dim fullPath As String = Path.Combine(_environment.WebRootPath, tempFilePath.TrimStart("/"c))
		If Not System.IO.File.Exists(fullPath) Then
			Return NotFound()
		End If
		Dim fileBytes() As Byte = System.IO.File.ReadAllBytes(fullPath)
		System.IO.File.Delete(fullPath)
		Dim fileName As String = If(Not String.IsNullOrEmpty(userFileName), userFileName, "ExportedDocument.docx")
		Return File(fileBytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", fileName)
	Catch ex As Exception
		_logger.LogError(ex, "Error downloading file")
		Return BadRequest("An error occurred while downloading the file.")
	End Try
End Function
$vbLabelText   $csharpLabel

Bu metod, ExportWordDocument tarafından oluşturulan geçici dosyayı alır, içeriğini bir bayt dizisine okur ve ardından geçici dosyayı siler. Kullanıcı tarafından sağlanan dosya adını veya sağlanmadıysa varsayılan bir adı kullanır. Metod, dosya içeriğini indirilebilir bir Word belgesi olarak döndürür. Dosya bulunamazsa veya bir hata oluşursa, uygun HTTP yanıtları döndürülür.

4.4 Uygulamanın Görsel Tasarımını Geliştirme

Word Belge İşleyicimizin genel görünüm ve hissiyatını geliştirmek için _Layout.cshtml dosyasına doğrudan özel CSS ekledik. Uyguladığımız stilleri inceleyelim:

<style>
    :root {
        --primary-color: #3498db;
        --text-color: #333;
        --bg-color: #f8f9fa;
        --nav-bg: #fff;
        --nav-text: #2c3e50;
        --nav-hover: #3498db;
    }
    body {
        font-family: 'Segoe UI', sans-serif;
        background-color: var(--bg-color);
        color: var(--text-color);
        line-height: 1.6;
    }
    .navbar { background-color: var(--nav-bg); }
    .navbar-brand {
        font-size: 1.5rem;
        font-weight: 700;
        color: var(--primary-color);
        margin-right: 2rem;
    }
    .navbar-nav { margin-left: auto; }
    .navbar-nav .nav-item { margin-left: 1rem; }
    .navbar-nav .nav-link {
        color: var(--nav-text);
        font-weight: 500;
        transition: all 0.3s ease;
        padding: 0.5rem 1rem;
        border-radius: 4px;
    }
    .navbar-nav .nav-link:hover, .navbar-nav .nav-link.active {
        color: var(--primary-color);
        background-color: rgba(52, 152, 219, 0.1);
    }
    .navbar-nav .nav-link i {
        margin-right: 0.5rem;
        font-size: 1.1em;
    }
    .centered-container {
        max-width: 800px;
        margin: 0 auto;
        padding: 2rem;
    }
    .footer {
        background-color: var(--nav-bg);
        border-top: 1px solid #ecf0f1;
        font-size: 0.9em;
        color: var(--nav-text);
    }
    .footer a {
        color: var(--primary-color);
        text-decoration: none;
        transition: color 0.3s ease;
    }
    .footer a:hover { color: var(--nav-hover); }
    @media (max-width: 576px) {
        .navbar-nav {
            margin-left: 0;
            margin-top: 1rem;
        }
        .navbar-nav .nav-item {
            margin-left: 0;
            margin-bottom: 0.5rem;
        }
    }
</style>

Bu CSS bloğu, uygulamamızın renk şeması ve düzenini tanımlar. Uygulama genelinde tutarlı bir renk paleti oluşturmak için CSS değişkenlerini (özel özellikler) kullanıyoruz. Stiller, çeşitli elemanları hedef alır, bunlar arasında gövde, gezinme çubuğu ve alt bilgi, tutarlı bir tasarım sağlamak için yer alır. Geçin çubuğunu temiz, modern bir görünümle ayarladık, üzerinde gezinme efektleri ve simge entegrasyonu bulunuyor.

Uygulamamız şu anda Word belgelerine odaklanmışken, IronPDF kullanarak PDF belgeleri için de destek ekleyebilir, böylece sistemin işlevselliğini daha geniş bir dosya türü kapsamına genişletebiliriz. Sistem, kullanıcılara şu anki Word formatı seçeneklerine ek olarak belgelerini bir PDF dosyası olarak dışa aktarma olanağı sunacak şekilde genişletilebilir.

5. Uygulamayı Çalıştırma

WordDocumentProcessor uygulamamızı çalıştırarak başlayalım. Görüntüde görebileceğiniz gibi, uygulama başarılı bir şekilde tarayıcıda yüklendi. Arayüz temiz ve kullanıcı dostudur, üstte "Anasayfa" ve "Dışa Aktar" seçeneklerini gösteren bir gezinme çubuğu yakın. Ana içerik alanı, "Word Belge İşleyici" başlığını ve kısa bir açıklama gösterir: "Word belgelerinizi kolayca yükleyin ve işleyin."

ASP .NET Core Import & Export A Word File: Sekil 3

Şimdi bir belge içe aktarmayı deneyelim. Görüntüde, "Honey research synopsis.docx" adlı bir dosya seçtiğimizi görebilirsiniz. Dosya adı yükleme alanında gösteriliyor, "Dosya Seç" butonunun yerini alıyor. Şimdi bu belgeyi yüklemeye ve işlemeye hazırız.

ASP .NET Core Import & Export A Word File: Sekil 4

"Yükle ve İşle" butonuna tıkladıktan sonra, uygulama belgeyi işler ve içeriğini gösterir. "Belge İçeriği" bölümü şimdi yüklenen belgenin başlangıcını gösteriyor. Başlık altında "Şehir Alanlarında Arıcılık Teknolojileri ve Bal Üretimi Kalitesi" başlıklı bir özet görüyoruz. Bu, uygulamamızın Word belgesinin içeriğini başarılı bir şekilde okuduğunu ve gösterdiğini gösterir.

ASP .NET Core Import & Export A Word File: Sekil 5

Sonunda, dışa aktarma işlevselliğini test edelim. Görüntüde, gezinme çubuğundaki "Dışa Aktar" butonuna tıkladığımızda açılan bir istemi görüyoruz. İstem, "Belgenin adını girin (uzantısız)" ifadesini içerir. Varsayılan isim "ExportedDocument" önceden doldurulmuş olarak geliyor, ancak gerekirse bunu değiştirebiliriz. Bu istem, indirilen belgenizin adını özelleştirmenize olanak tanır.

ASP .NET Core Import & Export A Word File: Sekil 6

"Tamam" butonuna tıkladıktan sonra, uygulama belirtilen adla yeni bir Word belgesi oluşturur ve indirme işlemini başlatır. Bu dışa aktarılan belge, işlediğimiz içeriği ya da uygulama içinde yaptığımız herhangi bir değişikliği içerir.

ASP .NET Core Import & Export A Word File: Sekil 7

Bu süreç boyunca, uygulamanın amacı doğrultusunda işlevsel olduğunu görmekteyiz. Bu uygulamayı kullanarak Word belgelerini içe aktarabilir, belgeler oluşturabilir ve bunları kolayca dışa aktarabilirsiniz. Kullanıcı arayüzü sezgisel ve duyarlı.

Sonuç

Sonuç olarak, WordDocumentProcessor uygulamamız başarılı bir şekilde Word belge işlemenin esnekliğini bir ASP.NET Core web uygulamasına entegre etmenin gücünü gösterir. IronWord kütüphanesini kullanarak, Word belgelerini kolayca içe aktarma, görüntüleme ve dışa aktarma için sağlam bir çözüm oluşturduk. Bu uygulama daha karmaşık belge yönetim sistemleri veya rapor oluşturucular için sağlam bir temel görevi görür. IronWords'un yeteneklerini keşfetmek isteyen geliştiriciler için, kütüphane bir ücretsiz deneme sunar. Deneme surumunden sonra, lisanslama $799'da başlar ve web uygulamalarinda gelişmiş Word belgesi işleme fonksiyonalitesi gerektiren isletmeler icin maliyet etkin bir cozum olur.

Sıkça Sorulan Sorular

Bir ASP.NET Core uygulamasına Word belgelerini nasıl aktarabilirim?

ASP.NET Core uygulamasına IronWord kullanarak Word belgelerini aktarabilirsiniz. Kullanıcı arayüzünde bir yükleme alanı sağlayabilir ve ardından IronWord kütüphanesini kullanarak belgeyi isleyip, icerigini uygulamanızda gösterim sağlayabilirsiniz.

ASP.NET Core'da bir Word belgesini dışa aktarmanın adımları neler?

ASP.NET Core'da bir Word belgesini dışa aktarmak için, IronWord ile yeni bir belge oluşturun ve kullanıcıların indirmesi için fonksiyon saglayin. Bir dosya adı belirtebilir ve IronWord'un yöntemlerini kullanarak Word dosyasina içerik yazabilirsiniz.

ASP.NET Core uygulamalarinda Word belgelerini PDF'e dönüştürebilir miyim?

Evet, ASP.NET Core uygulamalarinda IronWord kullanarak Word belgelerini PDF'e dönüştürebilirsiniz. IronWord, Word belgelerini PDF formatina kolayca dönüştürmek için yöntemler sunarak, paylaşımi ve erisilebilirligi kolaylastirir.

Uygulama Word belgelerini iceri aktarmak için hangi dosya formatlarını destekliyor?

Uygulama, .DOC ve .DOCX dosya formatlarini IronWord kütüphanesi kullanarak iceri aktarmayi destekliyor, bu da bu belgeleri ASP.NET Core uygulamaniz icinde isleyip göstermenizi saglar.

Belge işleme uygulamasını geliştirmede JavaScript nasil kullaniliyor?

JavaScript, dosya yüklemeleri işlemek, IronWord ile belge işleme için sunucuya AJAX istekleri göndermek ve işlenmiş içerikle veya hata mesajları ile kullanıcı arayüzünü güncellemek için kullanilarak, kesintisiz bir kullanıcı deneyimi saglar.

ASP.NET Core'da bir Word işleme uygulamasi geliştirme için ön koşullar neler?

ASP.NET Core'da bir Word işleme uygulamasi geliştirmek için, C# ve ASP.NET Core'da temel bilgiye, Visual Studio 2019 veya daha yeni bir sürüme veya C# uzantısı ile Visual Studio Code'a, ayrıca .NET Core SDK 3.1 veya daha yeni bir sürume sahip olmaniz gerekir.

Daha iyi belge işlemesi için arayuz nasil tasarlanabilir?

Kullanici arayuzu, Word belgelerini secmek için bir yukleme alani ve islenmis icerigi göstermek için bir içerik görüntüleme alani ile tasarlanabilir. Cekici ve kullanici dostu bir deneyim için tasarimi geliştirmek adina özellestirilmis CSS kullanilabilir.

Web uygulamalarinda Word işleme entegrasyonunun potansiyel kullanım durumlari nelerdir?

Potansiyel kullanım durumlari, web uygulaması icinde belge işlemesi, düzenlemesi ve dönüştürülmesi süreçlerini basitlestirirken IronWord kullanarak Word işleme kabiliyetlerini entegre eden doküman yönetim sistemleri ve rapor oluşturuculari gibi sistemleri icerebilir.

Jordi Bardia
Yazılım Mühendisi
Jordi Python, C# ve C++ konularında en yetkin, Iron Software'deki yeteneklerini kullanmadığı zamanlarda; oyun programlıyor. Ürün testi, ürün geliştirme ve araştırma sorumluluklarını paylaşan Jordi, sürekli ürün gelişimine büyük değer katıyor. Çeşitli deneyimleri onu ...
Daha Fazlasını Oku

Iron Destek Ekibi

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