ปัญหา Custom Paper Size บน Crystal Report
ก่อนจะ แปะ code HiPortfolio Service ผมพบปัญหา อันใหญ่ อันหนึ่ง นั่งแก้ปัญหา มาหลายอาทิตย์
จนต้องถอดใจ เปลี่ยนไปใช้ Report Viewer ของ Microsoft แทน Crystal Report
เรื่องของเรื่องคือ โปรแกรมที่ผม พัฒนาเป็น Windows Application ใช้ Crystal Report 2008 เป็น
Engine ในการทำ Report ทั้งหมด Report ปกติ ก็จะใช้กระดาษ A4 เป็นหลัก ไม่มีปัญหาอะไร
แต่พอเดือนที่แล้ว ได้มีการเพิ่ม Function Print ใบเสร็จ ซึ่งต้อง ใช้กระดาษ เป็น Custom Form
(ขนาดกระดาษ กว้าง 8.5 inch สูง 7 inch แนวกระดาษ เป็น Portrait )เนื่องจาก เป็น
กระดาษต่อเนื่อง และเป็น Form ของใบเสร็จซึ่งมีขนาด ไม่มาตรฐาน
ผมใช้เวลา กับมัน ประมาณ 3 สัปดาห์พบว่า
Design Report บน Crystal Designer แล้ว Preview และ Print บนกระดาษได้ ไม่มีปัญหาใดๆ
แต่พอLoad Report เข้ามาแสดงที่ Program ด้วย Object Crystal Report Viewer 2008
บน Program ที่เขียนขึ้น กลับพบปัญหาว่า
1. เวลาสั่งพิมพ์ออกมา ที่ Printer ซึ่งเป็น Dot Metrix EPSON LQ-2180 ผลลัพธ์ บนกระดาษ
กลับ แสดงผบเป็น Landscape
2. ผมเพิ่ม Code บังคับให้แสดงผลออกเป็น Portrait ด้วยการส่ง parameter ไปให้ report Object
ด้วย Code
rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait;
ก็ยังไม่เป็นผล
3. สุดท้ายลอง ส่ง Parameter ให้เปลี่ยน Section ให้เป็น Portrait ด้วย Code
foreach (CrystalDecisions.CrystalReports.Engine.Section s in rpt.ReportDefinition.Sections)
{
s.SectionFormat.PageOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait;
}
ผล ที่ได้ใกล้ความจริงแต่ ไม่ได้อยู่ดีเพราะว่า ผลลัพธ์ ที่ได้คือ Output ที่ออกมา Orientation
เป็น Portrait ถูกต้อง แต่ Data ด้านขวาของ Output ถูก Truncate สังเกตุดูคือ
ถ้าขนาดกระดาษ ด้านกว้าง มากกว่า ด้านสูง Output ด้านขวาจะถูกตัด ขนาดเท่ากับความสูง
ที่สุดแล้ว ก็ต้อง มาใช้ Report Writer ของ Microsoft เขียนด้วย ภาษา RDL
ทำการทดสอบแล้วสามารถ ใช้งานได้ โดยไม่มีปัญหาอะไร
แต่ต้องเพิ่ม ReportViewer ให้กับเครื่อง Client ด้วย
และแล้ว Microsoft ก็ช่วยไว้อีกครั้ง, แต่ปัญหานี้ทำให้ผม เริ่มมีอักคติ กับ Crystal Report ขึ้นมาทันที
ผมทำการ Search ปัญหานี้ ใน WEB SAP ซึ่ง เป็นเจ้าของ Crystal Report พบว่า ปัญหานี้มีมาตั้งแต่
ตัว Crystal Report 2008 จนตอนนี้ Solution ที่ดีที่สุด ที่ทาง SAP แนะนำคือ ให้ Export รายงาน
ออกมาเป็น PDF แล้วค่อย Print ก็ทำได้แหละ แต่ก็พบปัญหาอีก ว่า Font ที่ได้จาก การExport เป็น
PDF คือจะมีขนาด เล็ก กว่า font ที่ Design ไว้ ซึ่งปัญหานี้ทาง SAP ก็ยังไม่ได้แก้ปัญหา ได้รับคำตอบ
แต่เพียงว่า มีปัญหากับ file pdf เรื่อง font ไม่ standard อะไรนี่และ ก็ยิ่ง ทำให้ภาพของ
Crystal Report Drop ลงไปอีกในสายตาของผม
หมายเหตุ
การใช้ Report Viewer ของ Microsoft เวลา Export หรือ Print ออกมา เป็น PDF Output จะอยู่
ในลักษณะ Image Format เหมือนกับรูปภาพ ไม่ใช่ Text Format เหมือนตอน Export ด้วย
Crystal Report
จนต้องถอดใจ เปลี่ยนไปใช้ Report Viewer ของ Microsoft แทน Crystal Report
เรื่องของเรื่องคือ โปรแกรมที่ผม พัฒนาเป็น Windows Application ใช้ Crystal Report 2008 เป็น
Engine ในการทำ Report ทั้งหมด Report ปกติ ก็จะใช้กระดาษ A4 เป็นหลัก ไม่มีปัญหาอะไร
แต่พอเดือนที่แล้ว ได้มีการเพิ่ม Function Print ใบเสร็จ ซึ่งต้อง ใช้กระดาษ เป็น Custom Form
(ขนาดกระดาษ กว้าง 8.5 inch สูง 7 inch แนวกระดาษ เป็น Portrait )เนื่องจาก เป็น
กระดาษต่อเนื่อง และเป็น Form ของใบเสร็จซึ่งมีขนาด ไม่มาตรฐาน
ผมใช้เวลา กับมัน ประมาณ 3 สัปดาห์พบว่า
Design Report บน Crystal Designer แล้ว Preview และ Print บนกระดาษได้ ไม่มีปัญหาใดๆ
แต่พอLoad Report เข้ามาแสดงที่ Program ด้วย Object Crystal Report Viewer 2008
บน Program ที่เขียนขึ้น กลับพบปัญหาว่า
1. เวลาสั่งพิมพ์ออกมา ที่ Printer ซึ่งเป็น Dot Metrix EPSON LQ-2180 ผลลัพธ์ บนกระดาษ
กลับ แสดงผบเป็น Landscape
2. ผมเพิ่ม Code บังคับให้แสดงผลออกเป็น Portrait ด้วยการส่ง parameter ไปให้ report Object
ด้วย Code
rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait;
ก็ยังไม่เป็นผล
3. สุดท้ายลอง ส่ง Parameter ให้เปลี่ยน Section ให้เป็น Portrait ด้วย Code
foreach (CrystalDecisions.CrystalReports.Engine.Section s in rpt.ReportDefinition.Sections)
{
s.SectionFormat.PageOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait;
}
ผล ที่ได้ใกล้ความจริงแต่ ไม่ได้อยู่ดีเพราะว่า ผลลัพธ์ ที่ได้คือ Output ที่ออกมา Orientation
เป็น Portrait ถูกต้อง แต่ Data ด้านขวาของ Output ถูก Truncate สังเกตุดูคือ
ถ้าขนาดกระดาษ ด้านกว้าง มากกว่า ด้านสูง Output ด้านขวาจะถูกตัด ขนาดเท่ากับความสูง
ที่สุดแล้ว ก็ต้อง มาใช้ Report Writer ของ Microsoft เขียนด้วย ภาษา RDL
ทำการทดสอบแล้วสามารถ ใช้งานได้ โดยไม่มีปัญหาอะไร
แต่ต้องเพิ่ม ReportViewer ให้กับเครื่อง Client ด้วย
และแล้ว Microsoft ก็ช่วยไว้อีกครั้ง, แต่ปัญหานี้ทำให้ผม เริ่มมีอักคติ กับ Crystal Report ขึ้นมาทันที
ผมทำการ Search ปัญหานี้ ใน WEB SAP ซึ่ง เป็นเจ้าของ Crystal Report พบว่า ปัญหานี้มีมาตั้งแต่
ตัว Crystal Report 2008 จนตอนนี้ Solution ที่ดีที่สุด ที่ทาง SAP แนะนำคือ ให้ Export รายงาน
ออกมาเป็น PDF แล้วค่อย Print ก็ทำได้แหละ แต่ก็พบปัญหาอีก ว่า Font ที่ได้จาก การExport เป็น
PDF คือจะมีขนาด เล็ก กว่า font ที่ Design ไว้ ซึ่งปัญหานี้ทาง SAP ก็ยังไม่ได้แก้ปัญหา ได้รับคำตอบ
แต่เพียงว่า มีปัญหากับ file pdf เรื่อง font ไม่ standard อะไรนี่และ ก็ยิ่ง ทำให้ภาพของ
Crystal Report Drop ลงไปอีกในสายตาของผม
หมายเหตุ
การใช้ Report Viewer ของ Microsoft เวลา Export หรือ Print ออกมา เป็น PDF Output จะอยู่
ในลักษณะ Image Format เหมือนกับรูปภาพ ไม่ใช่ Text Format เหมือนตอน Export ด้วย
Crystal Report
หวัดดีครับ พอดีเคยมีปัญหาเกี่ยวกับ Crystal report 2008
ตอบลบเหมือนกัน
ก่อนหน้านี้ผมเคยเจอปัญหาที่ไม่ควรเจอมาแล้วเกี่ยวกับ CR 2008
คือเวลาเปลี่ยนกระดาษจาก Portriat --> Lanscape
จะไม่สามารถลากเส้นให้ยาวไปกว่าตอนเป็น Portrait ได้
และปัญหาเกี่ยวกับ การไม่ Refresh field / data type อีก
จึงได้ Search หาและเจอ Service pack จึง Dowload มาลง
ปัญหาที่เจอจึงได้หมดไป
ตอนนี้ผมใช้ Crystal 2008 + SP2
DN: http://www.sdn.sap.com/irj/boc/support?rid=/webcontent/uuid/90d7dc4e-36ce-2b10-d2b3-d5d72d067e21
ตอนนี้ทำใบเสร็จรับเงินให้กับหน่วยงานหน่วยงานหนึ่ง
เป็นกระดาษต่อเนื่อง สูง 28.2 cm กว้าง 36.8 cm (ไม่รวมรูหนามเตย)
โดยในกระดาษ 1 แผ่นจะ Print 6 form ใบเสร็จ
[----1----][----2----][----3----]
[----4----][----5----][----6----]
แบบนี้ล่ะครับ แต่ยังจัดหน้าไม่สำเร็จ (ใช้ Format with Multiple Columns)
ไว้จะมาขอคำปรึกษาน่ะครับ
จริง ๆ งานผมเกี่ยวับ BI ล่ะครับ เข้าไปเยี่ยมที่ Blog ผมได้
ก็คล้าย ๆ คุณนรงค์ครับ เจอปัญหาหรือ Trick อะไรก็เอาลงเว็บไว้
เผื่อใครเจอปัญหาเหมือนกันนั้นจะได้ไม่ต้องไปงม ฮ่า ๆ
ยินดีที่ได้พูดคุยคร้บ
http://mssqlbase.blogspot.com
ขอบคุณสำหรับข้อแนะนำ และความคิืดเห็นครับ
ตอบลบหัวอกเดี่ยวกันครับ Custom Page size 8x5.5" แบบ Portrait ไม่ได้ มันจะเปลี่ยนให้เป็น Landscap เสมอ
ตอบลบทำใ้ห้เวลาพิมพ์ออก Dot matrix จะเป็น Landscape
Set ยังไงก็เป็น Landscape T_T 3 สัปดาห์กว่า ๆ แล้วเหมือนกันครับ
แต่ถ้าพิมพ์ออก Laser Printer Ricoh ได้นะครับลงกระดาษ A5
คุณ Sospixs อยากถามเรื่องการกำหนดขนาดของกระดาษที่มันไม่มีให้ในระบบน่ะค่ะ ไม่รู้ว่ากำหนดยังไง ข้อความช่วยเหลือจากผู้รู้ด้วยค่ะ ต้องการกระดาษ 9.5" * 5.5"
ตอบลบT_T กำหนดขนาดกระดาษยังไงคะ 9.5x5.5"
ตอบลบไม่ทราบว่า คุณ Ioma กำหนดได้หรือยังครับ รบกวนแนะนำด้วยครับ
ลบการกำหนด custom paper size สามารถ กำหนดได้ กรณี add printer ในลักษณะ local printer ครับ หรือ กรณี เป็น network printer ก็ ให้ App เป็น local แต่ redirect ไปที่ network port ครับ
ตอบลบช่วยเพิ่มเติมนะครับ สำหรับคนที่เจอปัญหานี้ ลอง update crystal report sp4 แล้วปรับ size ตรงเครื่องปริ้นเตอร์ โดยเลือก Print Server Properties แล้ว add size ที่เราต้องการเข้าไป และเวลาสร้าง Report ก็เลือก printer ตัวดังกล่าวแล้วเลือก size ที่เราสร้าง ครับ ผลลัพธ์ออกมาจะไม่ผิดพลาดครับ เบื่อกับ crystal report 2008 เหมือนกัน ><
ตอบลบ