XRLabel ตัดคำไทยผิดเมื่อ Export PDF

ช่วงนี้มีช่วยน้องแก้ไข Report ที่ทำด้วย DevExpress ครับ แล้วที่นี้มันเจอปัญหากับภาษาไทย ในเคสที่ว่าถ้ามีข้อความยาวๆ มันตัดได้ไม่ถูกต้องครับ มันจะแหว่งๆ แทน ตามตัวอย่างด้านล่าง เวลาเจอประโยคยาวๆ ที่ไม่มี Space เว้นวรรค มันจะตัดคำแปลกๆ ถ้าใครที่ทำพวกเอกสารคงหงุดหงิด ใน MS Word มันมี Thai Distributed ทำไมไม่ทำ อะไรประมาณนี้

- Forward Contract คือสัญญาที่ลูกค้าและธนาคารตกลงซื้อเงินตราต่างประเทศสกุลหนึ่ง 
และขายเงินตราต่างประเทศอีกสกุลหนึ่ง โดยกำหนดจำนวนเงิน สกุลเงิน 
อัตราแลกเปลี่ยน และวันที่ทำการส่งมอบล่วงหน้าที่แน่นอน 
ซึ่งอัตราแลกเปลี่ยนล่วงหน้าที่กำหนดนั้น ไม่ใช่อัตราตลาดในอนาคต โดยในวันที่ทำการส่งมอบ 
อัตราแลกเปลี่ยนล่วงหน้าอาจสูงหรือต่ำกว่าอัตราแลกเปลี่ยนในตลาด ณ วันที่ส่งมอบก็ได้
- ตามระเบียบของ<<ตัวแปร>> 
ผู้ซื้อหรือผู้ขายเงินตราต่างประเทศล่วงหน้าต้องมีธุรกรรมรองรับการซื้อขาย (Underlying) และแสดงเอกสารต่อหน้าธนาคาร ณ วันที่ทำสัญญา

Runtime ที่เกี่ยวข้อง

  • DevExpress 22.1.7
  • .NET6

Try & Error

ทว่าปัญหานี้ ลูกค้าจะไม่ปิด UAT ครับ เลยต้องมีระดมสมอง มาแก้ไข แล้วที่นี้หลังจากลองแก้ไขปัญหาหลายๆวิธี

  1. กำหนด wordwrap - ทำอยู่แล้ว แต่ไม่รอดด
  2. เปลี่ยนให้ XRLabel ใช้ MarkupText (HTML) มันไม่ Work !!!
  3. ลง Lib System.Drawing.Common ของ .NET6 ไม่ Work !!!
  4. เอาข้อ 2 + 3 ไม่ Work !!!
  5. ลองดูหน่อยว่าจาก DevExpress 22.1.7 มาถึงเวอร์ชันล่าสุด ยังไม่มีแก้ครับ

Final Workaround Solution

หลังจากลอง Research พบคำเตือนที่ต้องระวังครับ

  • เจ้า Engine ที่ใช้ Render ตอน Preview / PDF คนละตัวกันครับ ทำให้มีปัญหาแสดงผลได้ครับ
Ref: XRControl.WordWrap Property | Reporting | DevExpress Documentation

ดังนั้นการแก้ปัญหาจะเป็น Logic ดังนี้ครับ

  • เตรียม Dictionary คำไทย
  • จากนั้นเขียน Logic ตัดคำ และตัดอักษรให้พอดีกับพื้นที่ของ XRLabel ที่กำหนด wordwrap ถ้าเกินให้ตัดขึ้นบรรทัดใหม่ครับ

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.