Duman'dan Topraklar'a: Kuzey Tayland'daki Biochar Projemizin Bir Güncellemesi
Çoğu geliştirici, ilk defa bir iç uygulamaya PDF raporlama eklemesi gerektiğinde bir gün kaybeder.
Tarayıcı yazdırma diyalogunu deniyorlar. Çıktı yanlış görünüyor. İstemci tarafı bir PDF kütüphanesini deniyorlar. Düzen kırılıyor. Konumlandırılmış metin ve mutlak koordinatlarla bir şeyler hazırlıyorlar. Bir rapor için çalışıyor ve bir sonrakinde çöküyor. Özellik yayınlandığı zaman, yirmi dakika sürmesi gereken bir sorunu çözmek için sekiz saat harcamış oluyorlar.
Jeff Fritz, bir dolu başlangıç seviyesindeki katılımcıya bunu yirmi dakika içinde nasıl yapacaklarını gösterdi.
Atölye
Jeff Fritz'i tanımıyorsanız: O, bir Microsoft MVP, Microsoft'ta Baş Program Yöneticisi ve uzun süredir devam eden Fritz ve Arkadaşları yayınının sunucusudur. O, .NET yolculuğuna yeni başlayan geliştiriciler için ücretsiz atölyeler düzenler ve birkaç hafta önce en iddialılarından birini gerçekleştirdi: HTML, CSS, C#, Blazor, ASP.NET ve .NET Aspire'ı kapsayan beş saatlik canlı bir derleme, tüm grubun tabandan bir koleksiyon takip uygulaması inşa ettiği.
Dört saat içinde uygulamanın PDF raporlarına ihtiyacı vardı. Bir kullanıcı bir düğmeye tıklamalı ve koleksiyonunun temiz, indirilebilir bir PDF'ini alabilmeli. Gerçek dünya iç araç şeyleri. Her ürün yöneticisinin eninde sonunda talep ettiği ve her geliştiricinin nihayetinde sunmak zorunda kaldığı türden bir özellik.
Jeff'in öğrettiği desen, çoğu ekibin kullanması gereken bir şeydir ve bunu açmaya değer çünkü bir kez gördüğünüzde, yanlış araçlara ulaşmayı bırakıyorsunuz.

Beş adımlı desen
İşte bunun şekli. Alışılmadık derecede kısa.
Rapor için özel bir Razor sayfası. Jeff, projenin Pages dizininde Report.razor oluşturur. Küçük bir tercih, büyük bir getirisi var; raporu kendi sayfası olarak tutmak, onun bağımsız biçimlendirilip, yeniden üretilip ve test edilmesine olanak tanır. Rapor, uygulamanın birinci sınıf bir parçası haline gelir, başka bir görünümün üzerine yerleştirilmiş bir yama değil.
Veri bağlamını enjekte edin. Entity Framework Core CollectionContext fabrikası, uygulamada başka herhangi bir veri getirici nokta gibi, bağımlılık enjeksiyonu ile gelir. Özel bir desen yok, çözüm yok, sadece raporlar için ayrı bir veri yolu yok. Rapor, uygulamanın geri kalanı ile aynı veri kullanır ve aynı şekilde.
Raporu HTML olarak yeniden oluşturun. Bu, bir iyi deseni kırılgan bir desenlerden ayıran hamle. Jeff, PDF'ye özgü bir düzen diline ulaşmıyor. Onun yerine raporu HTML olarak yazıyor, tüm öğleden sonra kullandığı aynı işaretleme ve mevcut stil çalışmasını kullanıyor. Başlıklar, tablol Quaternion gibi. Son çıktının bir PDF olması detayı daha sonra gelir.
Bir satırla HTML'yi PDF'ye dönüştür. İşte burada IronPDF yerini kazanıyor. ChromePdfRenderer HTML dizesini alır ve Chrome motoru kullanarak düzgün bir şekilde oluşturulan gerçek bir PDF üretir. Tarayıcıda doğru görünen CSS, PDF'de de doğru görünüyor. Öğrenilecek ayrı bir stil katmanı yok, düzeltilecek render aykırılıkları yok.
- Bunu dosya olarak geri döndür. Kullanıcı düğmeye tıkladığında tarayıcı PDF'yi temiz bir şekilde indirir. Tamam. Özellik gönderildi.

Bu tüm desendir. Beş adım, yirmi dakika yayın süresi ve prodüksiyonda geçerli olan bir özellik.
Neden bu işe yarar
Bu desenin doğru olanı olmasının derin nedenleri dayanıklılıktır ama açık neden her adımın geliştiricinin zaten nasıl yapacağını bildiği bir şeye denk gelmesidir.
Rapou düzeni yazmak? Bu, HTML ve CSS, diğer sayfaların hepsinde olduğu gibi. Veriyi sorgulamak mı? Aynı EF Core deseni. Sayfayı uygulamaya bağlamak mı? Aynı Razor sayfaları, aynı DI. Gerçekten yeni olan tek adım PDF dönüşümüdür ve bu bir satırdır.
Bunu alternatiflerle karşılaştırın. Yazdırma iletişim penceresi yaklaşımları, bir kullanıcının farklı bir tarayıcısı, farklı bir yakınlaştırma seviyesi veya beklenmedik bir yazıcı ayarı olduğunda bozulur. İstemci tarafı PDF kütüphaneleri, geliştiriciyi tamamen yeni bir düzen dili öğrenmeye zorlar. Elle kodlanmış koordinat tabanlı düzen bir rapor için işe yarar ve ikinci raporda çöker. Bu yaklaşımların hiçbiri gerçek bir ürünle temas ettiğinde ayakta kalmaz.
Sunucu tarafı HTML'den PDF'ye desen ayakta kalır. Çıktı tutarlıdır, belirleyicidir ve merkezileşmiştir, çünkü aynı giriş her seferinde, her müşteride aynı PDF'yi üretir, çünkü renderleme bir yerde ve bir dizi kural altında gerçekleşir. İç araçlar, müşteri odaklı raporlar, denetim izi belgeleri, çıktı tutarlılığının gerçekten önemli olduğu herhangi bir yerde, bu, ayakta kalan desendir.
Bu atölye bunu net bir şekilde öğretir çünkü başka türlü öğretmek için zamanı yoktur.
Kendi projenizde deneyin

Jeff'in dönüşüm adımı için kullandığı kütüphane, IronPDF, denemek için ücretsizdir ve 30 günlük deneme anahtarı ile denenebilir. Bir iş e-postasıyla kayıt olun, anahtar gelen kutunuza gelir ve Jeff Fritz'in öğrettiği deseni kendi projenizde öğleden önce inşa edebilirsiniz. Deneme sırasında filigran yok, tüm özelliklere erişim, her API mevcut.
Son denemenizde bir gün alıyor diye PDF raporlamayı eklemeyi ertelediyseniz, bu, projeyi yirmi dakikada bitiren sürümüdür.
Tüm atölyeyi izleyin
Jeff'in tam oturumu YouTube kanalında. PDF raporlama segmenti 4:56:48'de başlar, ancak önceki modüller de zamanınıza değerdir, modern .NET yığınına temiz bir geçiş sunar ve Jeff'in öğretimi gerçekten iyidir.
