Xuất báo cáo ActiveReports dưới dạng tệp PDF

Trang Cập Nhật :
Ngày tạo trang :

Môi trường hoạt động

Windows
  • Cửa sổ 10 Pro 22H2
Visual Studio
  • Phiên bản Cộng đồng Visual Studio 2022
ActiveReports cho .NET
  • Báo cáo hoạt động cho .NET 16.0J

Điều kiện tiên quyết

Windows
  • Windows 8.1
  • cửa sổ 10
  • cửa sổ 11
  • Máy chủ Windows 2012
  • Máy chủ Windows 2012 R2
  • Máy chủ Windows 2016
  • Máy chủ Windows 2019
  • Máy chủ Windows 2022
Visual Studio
  • Visual Studio 2017
  • Visual Studio 2019
  • Visual Studio 2022
.NET Framework
  • NET Framework 4.6.2
  • NET Framework 4,7
  • NET Framework 4,8
.MẠNG
  • .NET lõi 3,1
  • .NET 5
  • .NET 6
ActiveReports cho .NET
  • Báo cáo hoạt động cho .NET 16.0J

Cách xuất ra tệp PDF

Nếu người dùng muốn báo cáo dưới dạng tệp PDF, cách nhanh nhất để cung cấp báo cáo đó là xem báo cáo trong trình xem. Ngoài việc hiển thị báo cáo, trình xem có chức năng in và xuất các tệp như PDF, vì vậy nếu bạn hiển thị trình xem, bạn có thể yêu cầu người dùng xuất tệp PDF.

Tuy nhiên, trong một số trường hợp, bạn có thể không muốn làm phiền người dùng hoặc bạn có thể muốn chỉ đạo một cách có hệ thống tệp PDF. Phần này mô tả cách lập trình xuất tệp PDF trực tiếp từ báo cáo.

Phương pháp và giới hạn đầu ra tệp PDF

Có một số cách để xuất các tệp PDF theo chương trình, nhưng không phải tất cả chúng đều được chấp nhận. Điều này thay đổi tùy thuộc vào phiên bản ActiveReports, nền tảng, khuôn khổ và loại báo cáo mà nó thực hiện. Ví dụ: trong ActiveReports 16, báo cáo phần và trang được xuất khác nhau theo chương trình. Một ví dụ về điều này cũng có thể được tìm thấy trên trang chính thức.

Vì lý do này, đây là một số ví dụ về đầu ra PDF có lập trình mà bạn có thể sử dụng làm tài liệu tham khảo để tìm đầu ra phù hợp với dự án của mình.

Giới thiệu về báo cáo mẫu

Tệp báo cáo có trong mẫu cho dự án mới trống, vì vậy chúng tôi sẽ sử dụng báo cáo mẫu chính thức. Dưới đây là một số gợi ý, vì vậy vui lòng tải xuống từ một trong các trang web sau.

Trong trường hợp này, chúng tôi sẽ sử dụng báo cáo mẫu sau.

  • Báo cáo trang : Estimate_page_ipa.rdlx
  • Báo cáo mục: Invoice.rpx (có trong dự án mẫu WebSample16)

Kết xuất và tạo tệp PDF (Báo cáo trang/Báo cáo RDL)

Có một "bộ lọc xuất" để xuất ra các tệp PDF, nhưng trong phiên bản 16, nó chỉ có thể được sử dụng cho các báo cáo phần.

Do đó, báo cáo trang/báo cáo RDL cần được tạo bằng "Tiện ích mở rộng bản vẽ" như được mô tả trên trang trên.

Trước hết, tôi sẽ tạo một dự án, nhưng lần này tôi sẽ thực hiện nó với một ứng dụng giao diện điều khiển đơn giản. Nó cũng dễ dàng áp dụng cho các phiên bản máy tính để bàn và web như cho phiên bản web.

Khi bạn tạo một dự án, hãy chọn Ứng dụng Bảng điều khiển.

Sau khi bạn tạo dự án, hãy thêm các gói cần thiết.

Dưới đây là những gì bạn sẽ thêm: Vui lòng không tải phiên bản mới nhất, nhưng hãy sử dụng phiên bản được mô tả bên dưới. Có vẻ như một số kết hợp gói không hoạt động đúng với phiên bản mới nhất. Một dấu cảnh báo được hiển thị, nhưng bỏ qua nó vì các phụ thuộc không khớp. Tuy nhiên, có khả năng nó sẽ thay đổi khi nâng cấp phiên bản trong tương lai, vì vậy vui lòng điều chỉnh nó mỗi lần. GrapeCity.Documents.Imaging GrapeCity.Documents.Pdf và được yêu cầu hiển thị thành PDF.

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

Thêm tệp báo cáo vào dự án của bạn. Vị trí có thể ở bất cứ đâu, nhưng lần này tôi đang Reports tạo một thư mục và đặt nó vào đó. Vị trí này ảnh hưởng đến đường dẫn mà bạn chỉ định sau này.

Tiếp theo, mở thuộc tính của báo cáo bạn đã thêm.

Đặt hành động xây dựng thành Tài nguyên nhúng. Điều này có nghĩa là nhúng tài nguyên vào bên trong EXE (DLL). Báo cáo được tải duy nhất trên máy tính để bàn cũng như trên web.

Tiếp theo, viết mã để tải báo cáo và in ra PDF. Vì nó là một ứng dụng bảng điều khiển, nó nên được mô tả trong Chương trình.cs như nó là, nhưng nếu nó là một máy tính để bàn, nó nên được mô tả trong một sự kiện nút, v.v. và nếu nó ASP.NET, nó nên được mô tả ở nơi nó được xử lý khi nó được đăng.

// レポートファイルがあるパス
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();

Tôi sẽ không giải thích chi tiết loại xử lý đó là gì vì nó được viết trong các nhận xét của mã. Điều quan trọng là chỉ định vị trí của tệp báo cáo ở dòng đầu tiên. Định dạng như <アセンブリ名>.<レポートファイルのパス> sau và tất cả các dấu phân cách đường dẫn là dấu chấm.

Cái cuối cùng là Stream, vì vậy vui lòng chuyển đổi nó sang PDF theo nội dung xử lý.

Ví dụ: nếu bạn muốn lưu nó dưới dạng tệp cục bộ, hãy thêm thông tin sau.

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

Nếu bạn muốn tải xuống bằng ASP.NET, hãy thêm thông tin sau.

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

Hãy thử mở tệp PDF đầu ra để xem nó có ổn không.

Xuất PDF bằng bộ lọc xuất (báo cáo phần)

Sử dụng bộ lọc xuất PDF có sẵn cho các báo cáo phần.

Nó được tạo trong một dự án bảng điều khiển theo cách tương tự như đối với báo cáo trang. Mã và cài đặt bạn tạo ở đây có thể được áp dụng cho các dự án khác.

Sau khi bạn tạo dự án, hãy thêm các gói cần thiết. Lần này, chúng tôi sẽ xuất ra với bộ lọc xuất, vì vậy chúng tôi sẽ chỉ thêm một.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)

Thêm tệp báo cáo vào dự án của bạn. Vị trí có thể ở bất cứ đâu, nhưng lần này tôi đang Reports tạo một thư mục và đặt nó vào đó. Vị trí này ảnh hưởng đến đường dẫn mà bạn chỉ định sau này.

Tiếp theo, mở thuộc tính của báo cáo bạn đã thêm.

Đặt hành động xây dựng thành Tài nguyên nhúng. Điều này có nghĩa là nhúng tài nguyên vào bên trong EXE (DLL). Báo cáo được tải duy nhất trên máy tính để bàn cũng như trên web.

Tiếp theo, viết mã để tải báo cáo và in ra PDF. Vì nó là một ứng dụng bảng điều khiển, nó nên được mô tả trong Chương trình.cs như nó là, nhưng nếu nó là một máy tính để bàn, nó nên được mô tả trong một sự kiện nút, v.v. và nếu nó ASP.NET, nó nên được mô tả ở nơi nó được xử lý khi nó được đăng.

// レポートファイルがあるパス
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);

Tôi sẽ không giải thích chi tiết loại xử lý đó là gì vì nó được viết trong các nhận xét của mã. Điều quan trọng là chỉ định vị trí của tệp báo cáo ở dòng đầu tiên. Định dạng như <アセンブリ名>.<レポートファイルのパス> sau và tất cả các dấu phân cách đường dẫn là dấu chấm.

Cái cuối cùng là Stream, vì vậy vui lòng chuyển đổi nó sang PDF theo nội dung xử lý.

Ví dụ: nếu bạn muốn lưu nó dưới dạng tệp cục bộ, hãy thêm thông tin sau.

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

Nếu bạn muốn tải xuống bằng ASP.NET, hãy thêm thông tin sau.

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

Hãy thử mở tệp PDF đầu ra để xem nó có ổn không.