ActiveReports raporunun PDF dosyası olarak çıktısını alma

Sayfa güncel :
Sayfa oluşturma tarihi :

Çalışma ortamı

Windows
  • Windows 10 Pro 22H2
Visual Studio
  • Visual Studio 2022 Topluluk Sürümü
.NET için ActiveReports
  • .NET 16.0J için ActiveReports

Önkoşullar

Windows
  • Windows 8.1
  • pencereler 10
  • pencereler 11
  • Windows Sunucusu 2012
  • Windows Server 2012 R2
  • Windows Sunucusu 2016
  • Windows Sunucusu 2019
  • Windows Sunucusu 2022
Visual Studio
  • Visual Studio 2017
  • Visual Studio 2019
  • Visual Studio 2022
.NET Çerçevesi
  • NET Framework 4.6.2
  • NET Framework 4.7
  • NET Framework 4.8
.NET
  • .NET Core 3.1
  • .NET 5
  • .NET 6
.NET için ActiveReports
  • .NET 16.0J için ActiveReports

PDF dosyasına nasıl çıktı alınır

Kullanıcı bir raporu PDF dosyası olarak istiyorsa, bunu sağlamanın en hızlı yolu raporun görüntüleyicide görüntülenmesini sağlamaktır. Raporları görüntülemeye ek olarak, görüntüleyicinin PDF gibi dosyaları yazdırma ve çıktı alma işlevi vardır, bu nedenle görüntüleyiciyi görüntülerseniz, kullanıcıdan PDF dosyasının çıktısını almasını isteyebilirsiniz.

Ancak bazı durumlarda kullanıcıyı rahatsız etmek istemeyebilirsiniz ya da PDF dosyasını sistematik bir şekilde yönlendirmek isteyebilirsiniz. Bu bölümde, bir PDF dosyasının doğrudan rapordan programlı olarak nasıl çıkarılacağı açıklanmaktadır.

PDF Dosyası Çıktı Yöntemleri ve Sınırlamaları

PDF dosyalarının programlı olarak çıktısını almanın birkaç yolu vardır, ancak bunların tümü kabul edilemez. Bu, ActiveReports'un sürümüne, platforma, çerçeveye ve gerçekleştirdiği rapor türüne bağlı olarak değişir. Örneğin, ActiveReports 16'da, bölüm ve sayfa raporları programlı olarak farklı şekilde çıkarılır. Bunun bir örneği resmi sayfada da bulunabilir.

Bu nedenle, projenize uygun olanı bulmak için referans olarak kullanabileceğiniz bazı programlı PDF çıktısı örneklerini burada bulabilirsiniz.

Örnek rapor hakkında

Yeni proje için şablonda yer alan rapor dosyası boş, bu nedenle resmi örnek raporu kullanacağız. İşte bazı öneriler, bu yüzden lütfen bunları aşağıdaki sitelerden birinden indirin.

Bu durumda, aşağıdaki örnek raporu kullanacağız.

  • Sayfa Raporu : Estimate_page_ipa.rdlx
  • Bölüm raporu: Invoice.rpx (WebSample16 örnek projesine dahildir)

PDF'ler oluşturma ve oluşturma (Sayfa Raporları/RDL Raporları)

PDF'lerin çıktısını almak için bir "dışa aktarma filtresi" vardır, ancak sürüm 16'da yalnızca bölüm raporları için kullanılabilir.

Bu nedenle, sayfa raporlarının/RDL raporlarının yukarıdaki sayfada açıklandığı gibi "Çizim Uzantısı" ile oluşturulması gerekir.

Öncelikle bir proje oluşturacağım ama bu sefer basit bir konsol uygulaması ile yapacağım. Web sürümüne olduğu kadar masaüstü ve web sürümlerine de uygulanması kolaydır.

Bir proje oluşturduğunuzda Konsol Uygulaması'nı seçin.

Projeyi oluşturduktan sonra gerekli paketleri ekleyin.

İşte ekleyecekleriniz: Lütfen en son sürümü almayın, ancak aşağıda açıklanan sürümü kullanın. Bazı paket kombinasyonlarının en son sürümle düzgün çalışmadığı görülüyor. Bir uyarı işareti görüntülenir, ancak bağımlılıklar eşleşmediği için bunu yoksayın. Ancak, gelecekte sürüm yükseltmeleri ile değişme olasılığı vardır, bu nedenle lütfen her seferinde ayarlayın. GrapeCity.Documents.Imaging GrapeCity.Documents.Pdf ve PDF'ye dönüştürmek için gereklidir.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)
  • GrapeCity.Documents.Imaging (6.0.3)
  • GrapeCity.Documents.Pdf (6.0.3)

Projenize bir rapor dosyası ekleyin. Konum herhangi bir yerde olabilir, ancak bu sefer bir klasör oluşturuyorum ve oraya koyuyorum Reports . Bu yerleşim konumu, daha sonra belirttiğiniz yolu etkiler.

Ardından, eklediğiniz raporun özelliklerini açın.

Derleme eylemini Katıştırılmış Kaynak olarak ayarlayın. Bu, kaynağın bir EXE (DLL) içine gömülmesi anlamına gelir. Rapor, web'de olduğu gibi masaüstüne de benzersiz bir şekilde yüklenir.

Ardından, raporu yüklemek ve PDF'ye yazdırmak için kodu yazın. Konsol uygulaması olduğu için Program'da olduğu gibi.cs ancak masaüstü ise bir buton olayı vb. içinde anlatılmalı, ASP.NET ise postlandığında işlendiği yerde anlatılmalıdır.

// レポートファイルがあるパス
var reportPath = "ConsoleApp1.Reports.Estimate_page_ipa.rdlx";

// 埋め込みリソースを Stream をして取り出す
var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(reportPath);
if (stream == null) return;

// ページレポートに変換します
using var sr = new StreamReader(stream);
var pageReport = new GrapeCity.ActiveReports.PageReport(sr);

// PDF 描画拡張を定義します
var pdfRenderingExtension = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();

// メモリストリームとして出力する定義です
var outputProvider = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();

// レポートを PDF にレンダリングします
pageReport.Document.Render(pdfRenderingExtension, outputProvider);

// Stream に変換します
var ps = outputProvider.GetPrimaryStream();
var outputStream = ps.OpenStream();

Kodun yorumlarında yazıldığı için ne tür bir işlem olduğunu ayrıntılı olarak açıklamayacağım. Anahtar, rapor dosyasının konumunu ilk satırda belirtmektir. Biçim aşağıdaki gibidir <アセンブリ名>.<レポートファイルのパス> ve tüm yol ayırıcıları noktalardır.

Sonuncusu Akış'tır, bu nedenle lütfen işleme içeriğine göre PDF'ye dönüştürün.

Örneğin, yerel bir dosya olarak kaydetmek istiyorsanız, aşağıdakileri ekleyin.

// ファイルにストリームを書き出します
using var fs = new FileStream("Output.pdf", FileMode.Create);
outputStream.CopyTo(fs);

ASP.NET ile indirmek istiyorsanız, aşağıdakileri ekleyin.

return File(outputStream, "application/pdf", "Output.pdf");

Uygun olup olmadığını görmek için çıktı PDF dosyasını açmayı deneyin.

Dışa aktarma filtrelerini kullanarak PDF çıktısı alma (bölüm raporları)

Bölüm raporları için kullanılabilen PDF dışa aktarma filtresini kullanın.

Bir konsol projesinde, sayfa raporlarıyla aynı şekilde oluşturulur. Burada oluşturduğunuz kod ve ayarlar diğer projelere uygulanabilir.

Projeyi oluşturduktan sonra gerekli paketleri ekleyin. Bu sefer bir dışa aktarma filtresi ile çıktı alacağız, bu yüzden sadece bir tane ekleyeceğiz.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)

Projenize bir rapor dosyası ekleyin. Konum herhangi bir yerde olabilir, ancak bu sefer bir klasör oluşturuyorum ve oraya koyuyorum Reports . Bu yerleşim konumu, daha sonra belirttiğiniz yolu etkiler.

Ardından, eklediğiniz raporun özelliklerini açın.

Derleme eylemini Katıştırılmış Kaynak olarak ayarlayın. Bu, kaynağın bir EXE (DLL) içine gömülmesi anlamına gelir. Rapor, web'de olduğu gibi masaüstüne de benzersiz bir şekilde yüklenir.

Ardından, raporu yüklemek ve PDF'ye yazdırmak için kodu yazın. Konsol uygulaması olduğu için Program'da olduğu gibi.cs ancak masaüstü ise bir buton olayı vb. içinde anlatılmalı, ASP.NET ise postlandığında işlendiği yerde anlatılmalıdır.

// レポートファイルがあるパス
var reportPath = "ConsoleApp1.Reports.Invoice.rpx";

// 埋め込みリソースを Stream をして取り出す
var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(reportPath);
if (stream == null) return;

// Stream を XML として読み込めるようにします
var xr = System.Xml.XmlReader.Create(stream);

// セクションレポートとして読み込みます
var sectionReport = new GrapeCity.ActiveReports.SectionReport();
sectionReport.LoadLayout(xr);
sectionReport.Run();

// PDF のエクスポートフィルターを作成します
var pdfExport = new GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport();

// メモリストリームに PDF の情報を書き出します
var outputStream = new System.IO.MemoryStream();
pdfExport.Export(sectionReport.Document, outputStream);
outputStream.Seek(0, SeekOrigin.Begin);

Kodun yorumlarında yazıldığı için ne tür bir işlem olduğunu ayrıntılı olarak açıklamayacağım. Anahtar, rapor dosyasının konumunu ilk satırda belirtmektir. Biçim aşağıdaki gibidir <アセンブリ名>.<レポートファイルのパス> ve tüm yol ayırıcıları noktalardır.

Sonuncusu Akış'tır, bu nedenle lütfen işleme içeriğine göre PDF'ye dönüştürün.

Örneğin, yerel bir dosya olarak kaydetmek istiyorsanız, aşağıdakileri ekleyin.

// ファイルにストリームを書き出します
using var fs = new FileStream("Output.pdf", FileMode.Create);
outputStream.CopyTo(fs);

ASP.NET ile indirmek istiyorsanız, aşağıdakileri ekleyin.

return File(outputStream, "application/pdf", "Output.pdf");

Uygun olup olmadığını görmek için çıktı PDF dosyasını açmayı deneyin.