ส่งออกรายงาน ActiveReports เป็นไฟล์ PDF

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพแวดล้อมในการทํางาน

หน้าต่าง
  • วินโดวส์ 10 โปร 22H2
วิชวลสตูดิโอ
  • Visual Studio 2022 รุ่นชุมชน
ActiveReports สําหรับ .NET
  • ActiveReports สําหรับ .NET 16.0J

เบื้องต้น

หน้าต่าง
  • Windows 8.1
  • หน้าต่าง 10
  • หน้าต่าง 11
  • เซิร์ฟเวอร์ Windows 2012
  • R2 Windows Server ๒๐๑๒
  • เซิร์ฟเวอร์ Windows 2016
  • เซิร์ฟเวอร์ Windows 2019
  • เซิร์ฟเวอร์ Windows 2022
วิชวลสตูดิโอ
  • วิชวลสตูดิโอ 2017
  • วิชวลสตูดิโอ 2019
  • วิชวลสตูดิโอ 2022
.NET Framework
  • กรอบงาน NET 4.6.2
  • กรอบงาน NET 4.7
  • กรอบงาน NET 4.8
ตาข่าย
  • .NET หลัก 3.1
  • .NET 5
  • .NET 6
ActiveReports สําหรับ .NET
  • ActiveReports สําหรับ .NET 16.0J

วิธีส่งออกเป็นไฟล์ PDF

หากผู้ใช้ต้องการรายงานเป็นไฟล์ PDF วิธีที่เร็วที่สุดในการให้รายงานคือการดูรายงานในมุมมอง นอกเหนือจากการแสดงรายงานแล้วโปรแกรมดูยังมีฟังก์ชันในการพิมพ์และส่งออกไฟล์เช่น PDF ดังนั้นหากคุณแสดงโปรแกรมดูคุณสามารถขอให้ผู้ใช้ส่งออกไฟล์ PDF ได้

อย่างไรก็ตาม ในบางกรณี คุณอาจไม่ต้องการรบกวนผู้ใช้ หรือคุณอาจต้องการนําไฟล์ PDF ไปใช้อย่างเป็นระบบ ส่วนนี้อธิบายวิธีการส่งออกไฟล์ PDF โดยทางโปรแกรมโดยตรงจากรายงาน

วิธีการส่งออกไฟล์ PDF และข้อจํากัด

มีหลายวิธีในการส่งออกไฟล์ PDF โดยทางโปรแกรม แต่ไม่ใช่ทุกวิธีที่ยอมรับได้ สิ่งนี้จะแตกต่างกันไปตามเวอร์ชันของ ActiveReports แพลตฟอร์ม เฟรมเวิร์ก และชนิดของรายงานที่ดําเนินการ ตัวอย่างเช่น ใน ActiveReports 16 รายงานส่วนและหน้าจะถูกส่งออกโดยทางโปรแกรมแตกต่างกัน ตัวอย่างนี้สามารถพบได้ในหน้าอย่างเป็นทางการ

ต่อไปนี้คือตัวอย่างบางส่วนของเอาต์พุต PDF แบบเป็นโปรแกรมที่คุณสามารถใช้เป็นข้อมูลอ้างอิงเพื่อค้นหาเอาต์พุตที่เหมาะกับโครงการของคุณ

เกี่ยวกับรายงานตัวอย่าง

ไฟล์รายงานที่รวมอยู่ในเทมเพลตสําหรับโครงการใหม่ว่างเปล่าดังนั้นเราจะใช้รายงานตัวอย่างอย่างเป็นทางการ นี่คือคําแนะนําบางส่วนดังนั้นโปรดดาวน์โหลดจากเว็บไซต์ใดเว็บไซต์หนึ่งต่อไปนี้

ในกรณีนี้เราจะใช้รายงานตัวอย่างต่อไปนี้

  • รายงานหน้า : Estimate_page_ipa.rdlx
  • รายงานส่วน: Invoice.rpx (รวมอยู่ในโครงการตัวอย่าง WebSample16)

แสดงผลและสร้าง PDF (รายงานหน้า/รายงาน RDL)

มี "ตัวกรองการส่งออก" สําหรับการส่งออก PDF แต่ในเวอร์ชัน 16 สามารถใช้ได้กับรายงานส่วนเท่านั้น

ดังนั้น รายงานหน้า/รายงาน RDL จําเป็นต้องสร้างด้วย "ส่วนขยายการวาด" ตามที่อธิบายไว้ในหน้าด้านบน

ก่อนอื่นฉันจะสร้างโครงการ แต่คราวนี้ฉันจะสร้างด้วยแอปพลิเคชันคอนโซลที่เรียบง่าย มันง่ายที่จะนําไปใช้กับเวอร์ชันเดสก์ท็อปและเว็บเช่นเดียวกับเวอร์ชันเว็บ

เมื่อคุณสร้างโปรเจ็กต์ ให้เลือก แอปคอนโซล

หลังจากที่คุณสร้างโครงการแล้ว ให้เพิ่มแพคเกจที่จําเป็น

นี่คือสิ่งที่คุณจะเพิ่ม: โปรดอย่ารับเวอร์ชันล่าสุด แต่ใช้เวอร์ชันที่อธิบายไว้ด้านล่าง ดูเหมือนว่าการรวมแพ็คเกจบางอย่างทํางานไม่ถูกต้องกับเวอร์ชันล่าสุด เครื่องหมายเตือนจะปรากฏขึ้น แต่ละเว้นเนื่องจากการอ้างอิงไม่ตรงกัน อย่างไรก็ตามมีความเป็นไปได้ที่จะมีการเปลี่ยนแปลงด้วยการอัปเกรดเวอร์ชันในอนาคตดังนั้นโปรดปรับเปลี่ยนทุกครั้ง GrapeCity.Documents.Imaging GrapeCity.Documents.Pdf และต้องแสดงผลเป็น PDF

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

เพิ่มไฟล์รายงานลงในโครงการของคุณ ตําแหน่งสามารถอยู่ที่ไหนก็ได้ แต่คราวนี้ฉัน Reports กําลังสร้างโฟลเดอร์และวางไว้ในนั้น ตําแหน่งการจัดวางนี้มีผลต่อเส้นทางที่คุณระบุในภายหลัง

จากนั้นเปิดคุณสมบัติของรายงานที่คุณเพิ่ม

ตั้งค่าการดําเนินการสร้างเป็น ทรัพยากรฝังตัว ซึ่งหมายถึงการฝังทรัพยากรภายใน EXE (DLL) รายงานจะถูกโหลดบนเดสก์ท็อปโดยไม่ซ้ํากันเช่นเดียวกับบนเว็บ

จากนั้นเขียนโค้ดเพื่อโหลดรายงานและพิมพ์เป็น PDF เนื่องจากเป็นแอปพลิเคชันคอนโซลจึงควรอธิบายใน Program.cs ตามที่เป็นอยู่ แต่ถ้าเป็นเดสก์ท็อปควรอธิบายในเหตุการณ์ปุ่ม ฯลฯ และหากเป็น ASP.NET ควรอธิบายในสถานที่ที่มีการประมวลผลเมื่อมีการโพสต์

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

ฉันจะไม่อธิบายรายละเอียดว่าเป็นการประมวลผลประเภทใดเพราะมันเขียนไว้ในความคิดเห็นของรหัส กุญแจสําคัญคือการระบุตําแหน่งของไฟล์รายงานในบรรทัดแรก รูปแบบมีดังนี้ <アセンブリ名>.<レポートファイルのパス> และตัวคั่นเส้นทางทั้งหมดเป็นจุด

อันสุดท้ายคือ Stream ดังนั้นโปรดแปลงเป็น PDF ตามเนื้อหาการประมวลผล

ตัวอย่างเช่น หากคุณต้องการบันทึกเป็นไฟล์ในเครื่อง ให้เพิ่มสิ่งต่อไปนี้

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

หากคุณต้องการดาวน์โหลดด้วย ASP.NET ให้เพิ่มสิ่งต่อไปนี้

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

ลองเปิดไฟล์ PDF ที่ส่งออกเพื่อดูว่าโอเคหรือไม่

ส่งออก PDF โดยใช้ตัวกรองการส่งออก (รายงานส่วน)

ใช้ตัวกรองการส่งออก PDF ที่พร้อมใช้งานสําหรับรายงานส่วน

สร้างขึ้นในโครงการคอนโซลในลักษณะเดียวกับรายงานหน้า รหัสและการตั้งค่าที่คุณสร้างที่นี่สามารถนําไปใช้กับโครงการอื่นได้

หลังจากที่คุณสร้างโครงการแล้ว ให้เพิ่มแพคเกจที่จําเป็น คราวนี้เราจะส่งออกด้วยตัวกรองการส่งออกดังนั้นเราจะเพิ่มเพียงตัวกรองเดียวเท่านั้น

  • com.GrapeCity.ActiveReports.Export.Pdf (16.4.0)

เพิ่มไฟล์รายงานลงในโครงการของคุณ ตําแหน่งสามารถอยู่ที่ไหนก็ได้ แต่คราวนี้ฉัน Reports กําลังสร้างโฟลเดอร์และวางไว้ในนั้น ตําแหน่งการจัดวางนี้มีผลต่อเส้นทางที่คุณระบุในภายหลัง

จากนั้นเปิดคุณสมบัติของรายงานที่คุณเพิ่ม

ตั้งค่าการดําเนินการสร้างเป็น ทรัพยากรฝังตัว ซึ่งหมายถึงการฝังทรัพยากรภายใน EXE (DLL) รายงานจะถูกโหลดบนเดสก์ท็อปโดยไม่ซ้ํากันเช่นเดียวกับบนเว็บ

จากนั้นเขียนโค้ดเพื่อโหลดรายงานและพิมพ์เป็น PDF เนื่องจากเป็นแอปพลิเคชันคอนโซลจึงควรอธิบายใน Program.cs ตามที่เป็นอยู่ แต่ถ้าเป็นเดสก์ท็อปควรอธิบายในเหตุการณ์ปุ่ม ฯลฯ และหากเป็น ASP.NET ควรอธิบายในสถานที่ที่มีการประมวลผลเมื่อมีการโพสต์

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

ฉันจะไม่อธิบายรายละเอียดว่าเป็นการประมวลผลประเภทใดเพราะมันเขียนไว้ในความคิดเห็นของรหัส กุญแจสําคัญคือการระบุตําแหน่งของไฟล์รายงานในบรรทัดแรก รูปแบบมีดังนี้ <アセンブリ名>.<レポートファイルのパス> และตัวคั่นเส้นทางทั้งหมดเป็นจุด

อันสุดท้ายคือ Stream ดังนั้นโปรดแปลงเป็น PDF ตามเนื้อหาการประมวลผล

ตัวอย่างเช่น หากคุณต้องการบันทึกเป็นไฟล์ในเครื่อง ให้เพิ่มสิ่งต่อไปนี้

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

หากคุณต้องการดาวน์โหลดด้วย ASP.NET ให้เพิ่มสิ่งต่อไปนี้

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

ลองเปิดไฟล์ PDF ที่ส่งออกเพื่อดูว่าโอเคหรือไม่