VS 2022 Progranik Olarak Yeni Word Belgeleri Oluşturun (Eğitim)
Bu kılavuz, mevcut Word belgelerini nasıl içe aktaracağınızı, içeriklerini nasıl görüntüleyeceğinizi ve IronWord kütüphanesini kullanarak sıfırdan belge oluşturmayı açıklar. Bu öğreticinin sonunda, şunları yapabilen bir ASP.NET Core web uygulaması oluşturmuş olacaksınız:
- Word belgelerini yükleyin ve okuyun
- Bu belgelerin içeriğini bir metin kutusunda görüntüleyin
- Docx dosyasını dışa aktarın
Bu proje, web uygulamalarına Word belge işleme entegrasyonu sağlaması gereken geliştiriciler için mükemmeldir; buna belge yönetim sistemleri, rapor jeneratörleri veya Microsoft Word dosyaları içeren diğer senaryolar dahildir.
Gereksinimler
Bu eğiticiyle birlikte ilerlemek için şunlara sahip olmalısınız:
- C# ve ASP.NET Core hakkında temel bilgi
- Visual Studio 2019 veya daha yenisi yüklü (alternatif olarak C# uzantısına sahip Visual Studio Code kullanabilirsiniz)
- .NET Core SDK 3.1 veya daha yenisi
Bu teknolojilerde uzman değilseniz endişelenmeyin - sürecin her adımında size rehberlik edeceğiz!
IronWord nedir?
IronWord, geliştiricilerin programatik olarak Microsoft Word belgelerini okumasına, manipüle etmesine ve oluşturmasına olanak tanıyan bir .NET kütüphanesidir. Word dosyaları ile çalışmayı basitleştiren yüksek seviyeli bir API sağlar, bu da projemiz için mükemmel bir seçim yapar.
IronWord'un bazı kilit özellikleri şunlardır:
- Çeşitli Word formatlarını okuma ve yazma (DOCX, DOC, vb.)
- Belge içeriğini ve yapısını manipüle etme
- Metin ve paragrafları biçimlendirme
- Tablolar, resimler ve diğer belge öğeleri ile çalışma
- Belgeler için Posta Birleştirme süreci Bir Word belgesini kolaylıkla bir PDF belgesine dönüştürme, böylece nihai Word belgelerinizi kolay paylaşılabilir PDF dosyaları haline getirme
Artık ne inşa edeceğimize ve hangi araçları kullanacağımıza dair bir genel bakışa sahibiz, projemizi oluşturmaya başlayalım!
2. Projenin Kurulması
Bu bölümde, yeni bir ASP.NET Core projesi oluşturacağız ve IronWord ile çalışmak için gerekli paketleri yükleyeceğiz.
2.1 Yeni bir ASP.NET Core Projesi Oluşturma
- Visual Studio 2019 veya daha yenisini açın.
- 'Yeni bir proje oluştur' üzerine tıklayın.
- "ASP.NET Core Web Application" için arama yapın ve seçin.
- "İleri"ye tıklayın.
- Projenizi "WordDocumentProcessor" (veya tercih ettiğiniz herhangi bir adla) adlandırın.
- .NET Framework'ü ve projenizin konumunu seçin ve "Oluştur"'a tıklayın.
2.2 IronWord NuGet Paketi Yükleme
Şimdi projemizi ayarladığımıza göre, IronWord kütüphanesini ekleyelim:
- Çözüm Gezgini'nde projenize sağ tıklayın.
- "NuGet Paketlerini Yönet" seçeneğini seçin. "Gözat" sekmesinde "IronWord" araması yapın. Resmi IronWord paketini arayın. Projenize eklemek için "Yükle" ye tıklayın.
2.3 Mevcut Kontrolcü ve Görünümü Güncelleme
Belge işleme işlevselliğini dahil etmek için mevcut yapımızı güncelleyelim:
- Belge işleme mantığımız için Controllers klasöründeki mevcut HomeController.cs dosyasını kullanacağız.
- Belgeleri yükleme ve görüntüleme işlevselliğini dahil etmek için Views/Home klasöründeki mevcut Index.cshtml görünümünü güncelleyeceğiz.
Artık projemizi ayarladık ve IronWord paketini yükledik, belge ithalat ve ihracat işlevselliğini uygulamaya başlamaya hazırız. Bu özellikleri kullanmak için HomeController'ımıza yeni yöntemler ekleyeceğiz ve Index görünümünü değiştireceğiz. Bir sonraki bölümde, Word belgelerini ithal etmeye ve içeriklerini mevcut kontrolcü ve görünüm yapımızı kullanarak görüntülemeye odaklanacağız.
3. Word Belgelerini İthali
Bu bölümde, bir ASP.NET MVC uygulamasında Word belgelerini ithal etme ve işleme özelliklerini uygulamayı inceleyeceğiz. Hem kullanıcı arayüzü tasarımını hem de arka uç kontrolcü mantığını ele alacağız.
3.1 Kullanıcı Arayüzü Tasarımı
Word belgelerini ithal etmek için kullanıcı arayüzü sezgisel ve görsel olarak çekici olacak şekilde tasarlanmıştır. UI'nin ana bileşenlerini inceleyelim:
3.1.1 Yükleme Alanı
Yükleme alanı, kullanıcıların Word belgelerini seçip yüklemeye davet ettiği arayüzün odak noktasıdır. İşte nasıl yapılandırıldığı:
<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>
Bu kod, bir dosya simgesi, gizli bir dosya girişi ve dosya seçimi düğmesi olarak hareket eden stilize edilmiş bir etiketle görsel olarak çekici bir yükleme alanı oluşturur. Kabul edilen dosya türleri hakkında bilgiler ve yükleme ve işleme işlemlerini başlatacak bir düğme de içerir.
3.1.2 İçerik Görüntüleme Alanı
Belgenin işlenmesinden sonra içeriği özel bir alanda görüntülenir:
<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>
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 Kontrolcü Uygulaması
HomeController, Word belgelerini ithal etmek ve işlemek için sunucu tarafı mantığını yönetir. Anahtar yöntemleri inceleyelim:
3.2.1 UploadAndProcess Yöntemi
Bu yöntem, dosya yükleme ve işleme işlemini 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
Bu yöntem aşağıdaki görevleri gerçekleştirir:
- Yüklenen dosyanın doğru dosya formatında olduğunu (DOC veya DOCX) doğrular.
- IronWord kütüphanesini kullanarak belgeyi işler.
- Biçimlendirilmiş içeriği JSON olarak döndürür.
3.2.2 FormatContentAsHtml Yöntemi
Bu özel yöntem, çı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
Bu yöntem, belge içeriğinin doğru bir şekilde HTML olarak biçimlendirilmesini sağlar, her satırı paragraf etiketleri içine alır ve boş satırları korur.
3.3 İstemci Tarafı JavaScript
Dosya yükleme ve işlenmiş içeriği görüntüleme işlemini gerçekleştirmek 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';
});
});
Bu JavaScript kodu, dosya yükleme sürecini yönetir, dosyayı işleme için sunucuya gönderir ve işlenmiş içerik veya hata mesajları ile UI'yi günceller.
3.4 Kullanıcı Arayüzünü Stilize Etme
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 paleti ile temiz, modern bir görünüm yaratır. Yükleme alanı, hafif gölge efektleri ile beyaz bir arka plan sunarken, içerik alanı kaydırılabilir bir tasarıma ve açık gri bir arka plana sahip. Border-radius ve box-shadow özelliklerini kullanmak, arayüz elemanlarına derinlik ve görsel ilgi katmaya yardımcı olur.
4. Word Belgelerinin İhracı
Word Document Processor'ımızı geliştirmeye devam ederken, belgeleri ihraç etme yeteneğini ekleyelim. Bu özellik, kullanıcıların uygulamamızdan yeni bir Word belgesi oluşturmalarına olanak tanıyacak.
4.1 Kullanıcı Arayüzünü Güncelleme
Öncelikle, gezinme çubuğumuza bir "İhracat" seçeneği ekleyeceğiz. _Layout.cshtml dosyasını Views/Shared klasöründe açın ve <ul class="navbar-nav"> öğesini bulun. İhracat işlevimiz için yeni bir liste öğesi ekleyelim:
<li class="nav-item">
<a class="nav-link" id="exportLink" href="#" onclick="exportDocument(); return false;"><i class="fas fa-file-export"></i> Export</a>
</li>
<li class="nav-item">
<a class="nav-link" id="exportLink" href="#" onclick="exportDocument(); return false;"><i class="fas fa-file-export"></i> Export</a>
</li>
Simge için Font Awesome kullanıyoruz, bu yüzden <head> bölümümüzde CSS bağlantısının bulunduğundan emin olun. Bu kod, gezinme çubuğuna bir "İhracat" bağlantısı ekler. Simge için Font Awesome kullanır ve tıklandığında exportDocument() fonksiyonunu çağırır. href="#" ve return false, varsayılan bağlantı davranışını engeller.
4.2 İstemci Tarafı İhracat Mantığını Uygulama
Şimdi, ihracat sürecini yönetecek JavaScript fonksiyonunu ekleyelim. _Layout.cshtml dosyamızın en altında, </body> etiketinden hemen önce 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>
Bu JavaScript fonksiyonu, bir Word belgesi oluşturmak için sunucuya bir AJAX POST isteği gönderir. Başarılı olduğunda, kullanıcıdan bir dosya adı ister ve ardından dosyayı indirmek için geçici bir bağlantı oluşturur. Bağlantı otomatik olarak tıklanır ve ardından DOM'dan kaldırılır. Herhangi bir aşamada bir hata varsa, kullanıcıya bir uyarı gösterilir.
4.3 Sunucu Tarafı İhracat İşlevselliği Ekleme
Şimdi, sunucu tarafı mantığı uygulayalım. Controllers klasöründe yer alan HomeController.cs dosyasını açın. İhracat sürecini yönetmek için iki yeni yöntem ekleyeceğiz.
Öncelikle, Word belgesini oluşturmak için bir yöntem 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
Bu yöntem, IronWord kütüphanesini kullanarak yeni bir Word belgesi oluşturur, bazı test metinlerini ekler ve benzersiz bir adla geçici bir dosya olarak kaydeder. Başarı durumu ve geçici dosya yolu ile bir JSON nesnesi döndürür. Bir hata oluşursa, istisnayı kaydeder ve bir başarısızlık mesajı döndürür.
Sonra, dosya indirme işlemini yönetecek yöntemi 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
Bu yöntem, ExportWordDocument tarafından oluşturulan geçici dosyayı alır, içeriklerini bir byte dizisine okur ve ardından geçici dosyayı siler. Kullanıcının sağladığı dosya adını veya varsayılan adı kullanır. Yöntem daha sonra 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ı İyileştirme
Word Document Processor'ımızın genel görünümünü ve hissini geliştirmek için _Layout.cshtml dosyasına doğrudan özel CSS ekledik. Uyguladığımız tarza bir göz atalım:
<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ını ve düzenini tanımlar. CSS değişkenlerini (özel özellikleri) kullanarak uygulama boyunca tutarlı bir renk paleti oluşturuyoruz. Tarzlar, gövde, gezinme çubuğu ve altbilgi gibi çeşitli öğelere yönelerek tutarlı bir tasarım sağlar. Geçiş efektleri ve simge entegrasyonuna sahip temiz, modern bir görünüm sunan bir gezinme çubuğunu ayarladık.
Uygulamamız şu anda Word belgelerine odaklanıyor, ancak IronPDF kullanarak PDF belgeleri için destek ekleyebilir ve işlevselliğini daha geniş bir dosya türü yelpazesini kapsayacak şekilde genişletebiliriz. Sistem, kullanıcıların belgelerini mevcut Word form seçeneklerine ek olarak bir PDF dosyası olarak ihraç etmelerine olanak tanıyacak şekilde genişletilebilir.
5. Uygulamayı Çalıştırma
WordDocumentProcessor uygulamamızı çalıştırarak başlayalım. Görüntüde görebileceğimiz gibi, uygulama başarıyla tarayıcıda yüklendi. Arayüz temiz ve kullanıcı dostudur, üstte "Ana Sayfa" ve "İhracat" seçeneklerini gösteren bir gezinme çubuğuna sahiptir. Ana içerik alanında "Word Document Processor" başlığı ve kısa bir açıklama: "Word belgelerinizi kolaylıkla yükleyin ve işleyin." yer alır.

Şimdi, bir belgeyi ithal etmeyi deneyelim. Görüntüde, "Honey research synopsis.docx" adlı bir dosya seçtiğimizi görebiliriz. Dosya adı yükleme alanında "Dosya Seç" düğmesinin yerine görünür. Bu belgeyi yükleyip işlemeye şimdi hazırız.

"Yükle ve İşle"ye tıkladıktan sonra, uygulama belgeyi işler ve içeriğini gösterir. "Belge İçeriği" bölümü şimdi yüklenmiş belgenin başlangıcını gösteriyor. Başlığı "Kentsel Alanlarda Arıcılık Teknolojileri ve Bal Üretiminin Kalitesi" olan ve ardından bir özet içeren bir metin görüyoruz. Bu, uygulamamızın Word belgesinin içeriğini başarıyla okuyup gösterdiğini kanıtlar.

Son olarak, ihracat işlevselliğini test edelim. Görüntüde, gezinme çubuğundaki "İhracat" düğmesine tıkladığımızda bir istem belirdiğini görüyoruz. İstem, bizden "Belgenin adı (uzantısız)" girmemizi ister. Varsayılan ad "İhracEdilenBelge" önceden doldurulmuştur, ancak istersek bunu değiştirebiliriz. Bu istem, indirilecek belgemizin adını özelleştirmemize olanak tanır.

"Tamam"a tıkladıktan sonra, uygulama belirtilen adla yeni bir Word belgesi oluşturur ve indirme sürecini başlatır. Bu ihraç edilen belge, uygulama içinde işlediğimiz veya gerçekleştirdiğimiz herhangi bir değişikliği içerir.

Bu süreç boyunca, uygulamanın amaçlandığı gibi çalıştığını görebiliriz. Bu uygulamayı Word belgelerini ithal etmek, oluşturmak ve kolaylıkla ihraç etmek için kullanabiliriz. Kullanıcı arayüzü sezgisel ve yanıt vericidir.
Sonuç
Sonuç olarak, WordDocumentProcessor uygulamamız, Word belge işlemeyi bir ASP.NET Core web uygulamasına entegre etmenin gücünü ve esnekliğini başarıyla göstermektedir. IronWord kütüphanesinden yararlanarak, Word belgelerini kolaylıkla ithal etmek, görüntülemek ve ihraç etmek için sağlam bir çözüm oluşturduk. Bu uygulama, daha karmaşık belge yönetim sistemleri veya rapor oluşturanlar için sağlam bir temel oluşturur. IronWord'un yeteneklerini keşfetmek isteyen geliştiriciler için ücretsiz deneme lisansı kütüphane tarafından sunulmaktadır. Deneme süresinin ardından, lisanslama $999 ile başlar ve bu da gelişmiş Word belge işleme işlevselliği gerektiren işletmeler için maliyet-etkin bir çözüm sunar.
Sıkça Sorulan Sorular
ASP.NET Core uygulamasında Word belgelerini nasıl içe aktarabilirim?
ASP.NET Core uygulamasında Word belgelerini, UI'de bir yükleme alanı sağlayarak ve ardından IronWord kütüphanesini kullanarak belgeyi işleyerek, içeriğini çıkararak ve uygulamanızda görüntüleyerek içe aktarabilirsiniz.
ASP.NET Core'da bir Word belgesini dışa aktarmanın adımları nelerdir?
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 işlevsellik sağlayın. Bir dosya adı belirleyebilir ve Word dosyasına içerik yazmak için IronWord'un yöntemlerini kullanabilirsiniz.
ASP.NET Core uygulamalarında Word belgelerini PDF'ye dönüştürebilir miyim?
Evet, IronWord kullanarak ASP.NET Core uygulamalarında Word belgelerini PDF'ye dönüştürebilirsiniz. IronWord, Word belgelerinin PDF formatına kolayca dönüştürülmesini sağlayan yöntemler sunar; bu da daha kolay paylaşım ve erişilebilirlik sağlar.
Uygulama, Word belgelerini içe aktarma için hangi dosya formatlarını destekliyor?
Uygulama, IronWord kütüphanesini kullanarak. DOC ve. DOCX dosya formatlarını içe aktarmayı destekler ve böylece bu belgeleri ASP.NET Core uygulamanızda işleyip görüntüleyebilirsiniz.
Belge işleme uygulamasını geliştirmede JavaScript nasıl kullanılır?
JavaScript, dosya yüklemelerini yönetmek, IronWord ile belge işleme için sunucuya AJAX istekleri göndermek ve işlenmiş içerik veya hata mesajlarıyla kullanıcı arayüzünü güncellemek için kullanılır; bu da sorunsuz bir kullanıcı deneyimi sağlar.
ASP.NET Core'da bir Word işleme uygulaması geliştirmek için önkoşullar nelerdir?
ASP.NET Core'da bir Word işleme uygulaması geliştirmek için C# ve ASP.NET Core temel bilgilerine, Visual Studio 2019 veya üstü, ya da C# uzantısı ile Visual Studio Kodu'na ve .NET Core SDK 3.1 veya üstü sürümlerin yüklü olduğundan emin olun.
Daha iyi belge işleme için kullanıcı arayüzü nasıl tasarlanabilir?
Kullanıcı arayüzü, Word belgelerini seçmek için bir yükleme alanı ve işlenmiş içeriği göstermek için bir içerik görüntüleme alanı ile tasarlanabilir. Çekici, kullanıcı dostu bir deneyim için tasarımı geliştirmek için özel CSS kullanılabilir.
Web uygulamalarında Word işleme entegrasyonunun bazı potansiyel kullanım alanları nelerdir?
Potansiyel kullanım alanları arasında, Word işleme yeteneklerini kullanarak belge yönetim sistemleri ve rapor oluşturucular, web uygulaması içinde belge işlemleri, düzenleme ve dönüştürme süreçlerini kolaylaştırabilir.



