ส่งออกรายงาน 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 แบบเป็นโปรแกรมที่คุณสามารถใช้เป็นข้อมูลอ้างอิงเพื่อค้นหาเอาต์พุตที่เหมาะกับโครงการของคุณ
เกี่ยวกับรายงานตัวอย่าง
ไฟล์รายงานที่รวมอยู่ในเทมเพลตสําหรับโครงการใหม่ว่างเปล่าดังนั้นเราจะใช้รายงานตัวอย่างอย่างเป็นทางการ นี่คือคําแนะนําบางส่วนดังนั้นโปรดดาวน์โหลดจากเว็บไซต์ใดเว็บไซต์หนึ่งต่อไปนี้
- ActiveReports-Estimate-sample
- GrapeCity ActiveReports (GitHub) ( อาจมีไฟล์รายงานในแต่ละโครงการตัวอย่าง)
ในกรณีนี้เราจะใช้รายงานตัวอย่างต่อไปนี้
- รายงานหน้า : 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 ที่ส่งออกเพื่อดูว่าโอเคหรือไม่