วันพุธ, มกราคม 14, 2558

แก้ปัญหา: DocumentException: Table 'name' does not exist ...

แก้ปัญหา DocumentException: Table 'name' does not exist ...

    แอพพลิเคชั่นที่พัฒนาอยู่ ใช้ maven จัดการ มันมี function หนึ่งของแอพนี้ที่ต้องยุ่งกับการสร้างเอกสาร PDF
   เวลารัน test มันจะมาตายตอนจะทดสอบการสร้างเอกสาร PDF โดยสังเกตว่ามี exception แบบนี้ 

com.itextpdf.text.DocumentException: Table 'name' does not exist in file:/workspace/anApplication/target/classes/fonts/arial.ttf


   กูกลิ้งไปๆมาๆก็มาเจอว่าเจ้า maven นี่หวังดี ตอน compile source code มันก็มา copy resource ที่เป็นฟอนต์ของเราไปให้ที่โฟลเดอร์ target ด้วย แต่มันดันทำให้ property 'name' ในฟอนต์แต่ละตัวมันหายไป (มีคนเค้าเอาซอฟต์แวร์แก้ไขฟอนต์มาเปิดดู เลยรู้ว่ามันหายไปจริงๆ) และถ้าก้อปปี้ฟอนต์ไฟล์จากโฟลเดอร์ resource ไปทับภายใต้โฟลเดอร์ target เอง ฟอนต์นี้มันก็จะใช้ได้ไม่มีปัญหา,ไม่มี exception ข้างต้น

  เกิดจาก maven มันเห็นว่า ttf เป็นไฟล์ที่ต้องทำการ filtering ด้วย (การ filtering ถ้าเกิดกับ text ไฟล์ก็คือการเอาข้อความจริงไปแทนที่ variable ที่อยู่ในไฟล์ให้เลย) วิธีแก้ก็ต้องอย่าให้ maven มันมา filtering ไฟล์ฟอนต์ของเรา

แก้ไขที่ pom.xml 
* ใส่ plugin maven-resouces-plugin
* ถ้ามี plugin ตัวนี้อยู่แล้วก้อใส่ nonFilteredFileExtensions เพิ่มเข้าไป 

...
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
      <configuration>
        <nonFilteredFileExtensions>
          <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
      </configuration>
</plugin>
...

ไม่มีความคิดเห็น :