แบบอักษรไม่สามารถใช้ได้กับ JVM ที่มี Jasper Reports


94

ฉันพยายามสร้างรายงานด้วย DynamicJasper แต่ได้รับข้อผิดพลาดต่อไปนี้:

net.sf.jasperreports.engine.util.JRFontNotFoundException:  
                                 Font 'Arial' is not available to the JVM.   

msttcorefontsติดตั้งแล้ว แต่ฉันเดาว่า JVM ไม่ได้ใช้ฟอนต์ใด ๆ จากมัน

ฉันใช้ Ubuntu 10.04

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


3
ฉันไม่สนใจมันจริงๆ ... แค่ตั้งค่า "net.sf.jasperreports.awt.ignore.missing.font = true" ต่อไปนี้คิดไม่ดี ... แต่แก้ปัญหาได้สักครู่ ....
Andrew

คุณจะต้องติดตั้งแบบอักษรไมโครซอฟท์ในอูบุนตูโปรดดูที่ลิงค์นี้สำหรับข้อมูล .. embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Sivaramakrishnan

1
คุณตั้งค่านี้ไว้ที่ไหน ฉันกำลังทำงานกับ jasperreports เวอร์ชันฝังตัวใน jbilling โดยที่ไม่มีไฟล์ jasperreports.properties ให้แก้ไข
Darragh


1
@ แอนดรูดูเหมือนจะไม่ใช่ทางออกที่ดี (ฉันรู้ว่าคำถามเก่าแล้ว) แต่อาจจะดีกว่าที่เราจะหลีกเลี่ยงรายงานที่ไม่สอดคล้องกันฉันได้ส่งต่อคำตอบ
Petter Friberg

คำตอบ:


66

ฉันพยายามติดตั้ง mscorefonts แต่ติดตั้งแพคเกจแล้วและเป็นปัจจุบัน

sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer

ฉันพยายามค้นหาแบบอักษรในระบบไฟล์ด้วย:

ls /usr/share/fonts/truetype/msttcorefonts/

โฟลเดอร์นี้มี README พร้อมคำแนะนำที่ถูกต้องเกี่ยวกับวิธีการติดตั้ง

cat /usr/share/fonts/truetype/msttcorefonts/README

คุณต้องเชื่อมต่ออินเทอร์เน็ตสำหรับสิ่งนี้:

sudo apt-get install --reinstall ttf-mscorefonts-installer

ฉันติดตั้งใหม่ttf-mscorefonts-installer(ตามที่แสดงด้านบนตรวจสอบให้แน่ใจว่าได้ยอมรับ EULA!) และปัญหาได้รับการแก้ไขแล้ว


5
FYI บน linux รสชาติอื่น ๆ ลอง sudo apt-get install msttcorefonts
KCD

สำหรับ CentOS และ RHEL6 คุณจะแก้ปัญหา EULA ได้อย่างไร? yum install ไม่ได้ให้ตัวเลือกในการยอมรับมีความคิดอะไร
Darragh

แล้ว windows OS ที่พบบ่อยที่สุดล่ะ?
Sarz

1
นี่เป็นวิธีแก้ปัญหาบนพีซีเครื่องเดียวมันจะไม่แก้ปัญหาการเข้ารหัสใด ๆ วิธีที่ถูกต้องคือการใช้ส่วนขยายแบบอักษรที่ฉันได้โพสต์คำตอบไว้
Petter Friberg

1
คำตอบนั้นถูกต้องสำหรับสถานการณ์เมื่อเราติดตั้งฟอนต์แล้ว แต่ไม่มีใบอนุญาตที่ยอมรับ ต่อไปนี้เป็นขั้นตอนในการดำเนินการในกรณีที่คุณกำลังจะทำการติดตั้งอัตโนมัติครั้งแรกอย่างถูกต้อง: sudo echo ttf-mscorefonts-installer msttcorefonts / accept-mscorefonts-eula เลือก true | debconf-set-selections && apt-get install -y -q ttf-mscorefonts-installer
Aleksander Lech

35

JasperReports เพิ่มJRFontNotFoundExceptionในกรณีที่แบบอักษรที่ใช้ภายในเทมเพลตรายงานไม่สามารถใช้ได้กับ JVM ไม่ว่าจะเป็นแบบอักษรของระบบหรือแบบอักษรที่มาจากส่วนขยายแบบอักษร JR เพื่อให้แน่ใจว่าจะหลีกเลี่ยงปัญหาทั้งหมดที่เกิดจากเมตริกแบบอักษรที่ไม่ตรงกันและเราได้รับคำเตือนล่วงหน้าเกี่ยวกับความไม่สอดคล้องกัน

รายงาน Jasper พยายามช่วยคุณในการพัฒนารายงานของคุณโดยระบุว่าไม่สามารถส่งออกรายงานของคุณได้อย่างถูกต้องเนื่องจากไม่พบแบบอักษรที่กำหนดในTextFieldหรือStaticText

<font fontName="Arial"/>

ใช่คุณสามารถปิดการใช้งานโดยการตั้งค่าnet.sf.jasperreports.awt.ignore.missing.fontจริง แต่คุณจะมีความไม่สอดคล้องกันการส่งออก

ได้คุณสามารถติดตั้งฟอนต์เป็นฟอนต์ของระบบ JVM ได้ (แต่คุณต้องทำบนพีซีทุกเครื่องที่อาจสร้างรายงานและคุณยังคงมีปัญหาในการเข้ารหัส )

วิธีที่ถูกต้อง!

ใช้Font Extensions ! ถ้าคุณต้องการที่จะสร้างของคุณเอง (ดูลิงค์ด้านล่าง) รายงานนิลยังกระจายเริ่มต้นขวดอักษรนามสกุล ( jasperreports-fonts-x.x.x.jar) ที่สนับสนุน fontname DejaVu Sans, DejaVu SerifและDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

จาก JasperReport Ultimate Guide:

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

ลิงก์บน StackOverflow เกี่ยวกับวิธีการแสดงผลแบบอักษรใน pdf อย่างถูกต้อง

รายการตรวจสอบวิธีการแสดงผลแบบอักษรใน pdf อย่างถูกต้อง

สร้างส่วนขยายแบบอักษรด้วย JasperSoft Studio

สร้างส่วนขยายแบบอักษรด้วย iReport


คุณช่วยบอกฉันได้ไหมว่าทำไม Jasper และ JVM ไม่สามารถแสดง PDF ด้วยฟอนต์ที่มีอยู่ในระบบ (อยู่ที่ C: \ windows \ ฟอนต์) ฉันต้องสร้างส่วนขยาย Jar Font และเพิ่มเป็นไลบรารีลงใน คลาสพา ธ ของโปรเจ็กต์ (ฉันใช้ Java และ Eclipse) ฉันพยายามค้นหาคำตอบของ Google แต่ไม่พบคำอธิบายที่เข้าใจได้ นอกจากนี้ฉันยังเห็นปัญหาการส่งออก pdf-font กับ Apache FOP (ไม่จำเป็นต้องใช้นามสกุลแบบอักษร แต่ฉันต้องสร้างไฟล์แบบอักษร - เมตริกและทำการกำหนดค่าเพิ่มเติมเพื่อให้แบบอักษรแสดงผลได้อย่างถูกต้อง)
EagerToLearn

1
@EagerToLearn ทั้งหมดมาจากไลบรารี itext ที่สร้างไฟล์ pdf itext เพื่อแสดงแบบอักษรอย่างถูกต้องจำเป็นต้องมีส่วนขยายแบบอักษร (ซึ่งไม่เพียง แต่รวมฟอนต์เท่านั้น แต่ยังรวมถึงการเข้ารหัสหากระบุ ecc ที่ฝังไว้) หากคุณไม่ได้ระบุสิ่งนี้ itext จะทำสิ่งที่พวกเขาเรียกว่า "พยายามอย่างเต็มที่" ในการแสดงผลแบบอักษรของคุณ คุณไม่ได้ทำในสิ่งที่เราต้องการ (เขียนไว้ในเอกสารประกอบ) ทำให้ดีที่สุด แต่ความผิดเป็นของคุณ ดังนั้นคำตอบที่ยอมรับสำหรับคำถามนี้จึงไม่ถูกต้อง ! จำเป็นต้องมีส่วนขยายแบบอักษรหากคุณไม่ได้จัดหาคุณจะต้องอยู่กับสิ่งที่สร้างขึ้น
Petter Friberg

ขอบคุณสำหรับคำตอบ แต่ฉันก็ยังเข้าใจแค่ว่าปัญหาแบบอักษรเป็นไปตามวิธีการทำงานของไลบรารี iText อาจเป็นแบบอักษรนี้สิ่งที่เกินความสามารถทางเทคนิคของฉันที่จะเข้าใจ :(
EagerToLearn

@eag มันไม่มากไปกว่านี้แล้วที่จะเข้าใจในการแสดงผลแบบอักษรคุณต้องรู้ว่า. tf อยู่ที่ไหนและคุณต้องรู้ว่าการเข้ารหัสข้อความคืออะไร นักพัฒนาของ lib ที่ทราบข้อมูลนี้ได้สร้างส่วนขยายแบบอักษรหากคุณไม่ได้ระบุไว้พวกเขาจำเป็นต้องเริ่มเดาสาเหตุที่มันใช้งานไม่ได้ในบางกรณีเป็นเพราะ "การคาดเดา" ไม่ถูกต้อง แต่คุณไม่สามารถตำหนิ lib ได้ เนื่องจากพวกเขาได้จัดเตรียมระบบเพื่อหลีกเลี่ยงการ "คาดเดา" ให้คุณ
Petter Friberg

22

ฉันใช้ IReport เพื่อติดตั้งแบบอักษร:

เครื่องมือ -> ตัวเลือก -> แบบอักษร -> คลิกติดตั้งแบบอักษร

จากนั้นเลือกแบบอักษรและคลิก

-> ส่งออกเป็นส่วนขยายและพิมพ์ชื่อ myfont.jar

เพิ่ม jar นี้และ spring.jar *ในเส้นทางการสร้างของคุณ

* คัดลอก spring.jar จาก Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext


1
เพื่อให้เสร็จสมบูรณ์ arial ttf อยู่ใน c: / windows / ฟอนต์ (อย่างน้อยก็ใน win xp): arial.ttf, arialbd.ttf (ตัวหนา), ariali.ttf (ตัวเอียง), arialbi (ตัวหนา - ตัวเอียง)
jneira

การเพิ่ม spring.jar เข้ากับเส้นทางการสร้างจะแก้ไขได้
fishjd

วิธีนี้ใช้ได้ผลจริงสำหรับฉัน มันบรรจุฟอนต์เป็นไฟล์ jar คุณเพิ่มลงใน classpath และสิ่งต่างๆก็แค่ทำงาน
Satya

หากสร้างส่วนขยายแบบอักษรอย่างถูกต้องไม่จำเป็นต้องเพิ่ม spring.jar
Petter Friberg

เครื่องมือนี้ -> ตัวเลือก -> แบบอักษร -> คลิกติดตั้งไม่พร้อมใช้งานบน Mac :( ข้อเสนอแนะใด ๆ
L-Samuels

14

sudo apt-get install msttcorefonts ใช้งานได้ (ในสภาพแวดล้อมการพัฒนา Ubuntu ของเรา) แต่ไม่ใช่วิธีแก้ปัญหาที่ดีมาก

แต่เรารวมฟอนต์เข้ากับแอปพลิเคชันของเราตามเคล็ดลับนี้ ไฟล์ JAR ของพวกเขารวมฟอนต์ต่อไปนี้

  • Arial
  • Times New Roman
  • Courier ใหม่
  • Comic Sans MS
  • จอร์เจีย
  • เวอร์ดานา
  • โมโนสเปซ

ลิงก์โดยตรงเพื่อดาวน์โหลด jar: Maven เวอร์ชั่น 1.0 DynamicFonts


ขณะนี้สามารถดาวน์โหลดได้จากที่เก็บ mvn มาตรฐานตัวอย่างเช่นmvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Markus Pscheidt


9

มีสามวิธีในการหลีกเลี่ยงปัญหาดังกล่าว

วิธีที่ 1: โดยการตั้งค่าละเว้นคุณสมบัติแบบอักษรที่ขาดหายไป

JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");

หรือคุณสามารถตั้งค่าคุณสมบัตินี้ได้โดยป้อนบรรทัดต่อไปนี้ลงในไฟล์. jrxml

<property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

วิธีที่ 2: โดยการตั้งค่าคุณสมบัติแบบอักษรเริ่มต้น

JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Sans Serif");

หรือคุณสามารถตั้งค่าคุณสมบัตินี้ได้โดยป้อนบรรทัดต่อไปนี้ลงในไฟล์. jrxml

<property name="net.sf.jasperreports.default.font.name" value="Sans Serif"/>

วิธีที่ 3: โดยการเพิ่มคุณสมบัติแบบอักษรที่ขาดหายไป

ขั้นแรกให้ติดตั้งฟอนต์ที่หายไปใน IReport โดยเลือก "Tools >> Options >> Fonts >> Install Font" จากนั้นเลือกฟอนต์ทั้งหมดและส่งออกโดยคลิกที่ "Export as Extension" ด้วย. jar Extension

คุณสามารถใช้ jar นี้สำหรับ Jasperreports-font.XXXjar ซึ่งจะปรากฏในไลบรารีโปรเจ็กต์หรือคลาสพา ธ ของคุณ


5

ฉันแก้ไขสิ่งนี้โดยเลือก 'SansSerif' หรือ 'Serif' เท่านั้นไม่ใช่ 'Arial' หรือ 'Times New Roman'


6
ตามเอกสารข้อยกเว้น ( jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/… ) ไม่แนะนำให้ใช้วิธีนี้อย่างชัดเจน อาจทำให้เกิดปัญหาการเรนเดอร์ที่ไม่คาดคิดเนื่องจากฟอนต์เหล่านี้อาจถูกแมปกับฟอนต์ของระบบที่แตกต่างกันบนระบบต่างๆ
Doug

3

หากคุณใช้ maven ในโปรเจ็กต์ของคุณคุณสามารถเพิ่ม jasper-font dependency ใน pom.xml:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.8.1</version>
</dependency>

การติดตั้งฟอนต์ที่หายไปในระบบอาจเป็นวิธีแก้ปัญหาที่ใช้งานได้ แต่ไม่ใช่สำหรับฉันฉันไม่ต้องการติดตั้งฟอนต์ที่ขาดหายไปหลังจากการปรับใช้แต่ละครั้งในเซิร์ฟเวอร์ใหม่ฉันเลือกที่จะฝังฟอนต์กับแอพพลิเคชั่นแทน

ความนับถือ.


2

สามารถสร้างแบบอักษรที่กำหนดเองของคุณผ่าน iReport และแปลงเป็นไฟล์ jars


2

ลองแอดไลน์

net.sf.jasperreports.awt.ignore.missing.font = true

ไปยังไฟล์ jasperreports.properties ของคุณ

แจสเปอร์หยุดค้นหาฟอนต์หนึ่งตัว


1
และเป็นความคิดที่ไม่ดี ... ส่งออกไม่สอดคล้องกัน!
Petter Friberg

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

@jwenting เพิ่มส่วนขยายแบบอักษรและจะไม่ผิดพลาด เชื่อฉันเถอะถ้าคุณปิดใช้งานคุณกำลังทำอะไรผิดพลาดคุณจะสร้างรายงานที่ไม่ถูกต้องแทนคุณควรแก้ปัญหาราก (ส่วนขยายแบบอักษรที่ขาดหายไป) และใช่คุณสามารถควบคุม JVM ได้ตลอดเวลา
Petter Friberg

@jwenting หมายเหตุ:วิธีแก้ปัญหาคือไม่ต้องติดตั้งฟอนต์บนเซิร์ฟเวอร์ (ตามที่ตอบรับบอกว่าผิด!) วิธีแก้ปัญหาคือการสร้างและเพิ่มส่วนขยายฟอนต์อ้างอิง ดูคำตอบที่ถูกต้องstackoverflow.com/a/35549391
Petter Friberg

@PetterFriberg ซึ่งมักจะเป็นไปไม่ได้ ตัวอย่างเช่นแอปพลิเคชันที่ฉันดูแลอยู่ทำงานบนเซิร์ฟเวอร์ แต่อนุญาตให้ผู้ใช้เพิ่มไฟล์. jrxml ที่กำหนดเองด้วยรูปแบบการตั้งชื่อที่เฉพาะเจาะจงเพื่อสร้างรายงานที่กำหนดเองเหนือสิ่งที่เราให้ไว้เป็นมาตรฐาน ไม่ต้องการให้รายงานเหล่านั้นขัดข้องหากเซิร์ฟเวอร์ไม่มีแบบอักษรที่. jrxml ระบุดังนั้นเราจึงใช้ทางเลือกสำรอง
เข้ามาใน

2

คุณสามารถทำได้โดยการติดตั้งฟอนต์นั่นหมายถึงทุกที่ที่คุณต้องการเรียกใช้แอพพลิเคชั่นนั้น ๆ วิธีที่ง่ายที่สุดคือเพิ่ม bl line ลงในไฟล์ jrxml ของคุณ:

 <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

หวังว่าจะช่วยได้


1
อย่างไรก็ตามสิ่งนี้จะสร้างความไม่สอดคล้องกันในการส่งออก (ดังนั้นจึงไม่สามารถแสดงผลด้วยแบบอักษรที่ระบุใน jrxml) ดูคำตอบของฉัน
Petter Friberg

2

สำหรับ Debian

เพิ่ม

non-free contrib

เพื่อ deb และ deb-src ใน /etc/apt/sources.list เช่น:

deb http://ftp.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.debian.org/debian/ squeeze main non-free contrib

แล้ว

apt-get update
apt-get install msttcorefonts

แน่นอนว่าคุณต้องรีสตาร์ท jasperserver กล่าวคือ:

/opt/jasperreports-server-cp-4.5.0/ctlscript.sh restart

เปลี่ยนเวอร์ชัน / เส้นทางของคุณ


2

ฉันประสบปัญหากับเว็บแอปพลิเคชันของฉันที่ใช้ Spring 3 และติดตั้งบน Weblogic 10.3 บน Oracle Linux 6 โซลูชันที่กล่าวถึงในลิงก์ไม่ได้ผลสำหรับฉัน

ฉันต้องทำตามขั้นตอนต่อไปนี้ - 1. คัดลอกไฟล์ฟอนต์ Arial * .ttf ไปยังไดเร็กทอรี JROCKIT_JAVA_HOME / jre / lib / ฟอนต์ 2. สร้างรายการของฟอนต์ใน fontconfig.properties.src 3. รีสตาร์ทคลัสเตอร์จากคอนโซล Weblogic

filename.Arial=Arial.ttf
filename.Arial_Bold=Arial_Bold.ttf
filename.Arial_Italic=Arial_Italic.ttf
filename.Arial_Bold_Italic=Arial_Bold_Italic.ttf

1

สร้างรายงานแจสเปอร์ในหลายภาษา (Unicode)

1) ติดตั้งแบบอักษรใน ireport desginer

2) สร้างส่วนขยายของแบบอักษร (เราจะใช้ในแอปพลิเคชันคลาสพา ธ )

3) ติดตั้งแบบอักษรบนระบบปฏิบัติการ (ไม่บังคับ)

4) วาง. tf ทั้งหมดของแบบอักษรในไดเร็กทอรี jre-> lib-> ฟอนต์ (มิฉะนั้นเว็บแอปพลิเคชันจะส่งแบบอักษรข้อผิดพลาดไม่พร้อมใช้งานสำหรับ JVM)


0

อันที่จริงฉันแก้ไขปัญหานี้ด้วยวิธีง่ายๆ

  1. ไปที่ของคุณhome pathเช่น/root
  2. สร้างโฟลเดอร์ชื่อ .fonts
  3. คัดลอกall your font filesไปที่.fontsคุณสามารถคัดลอกแบบอักษรจากC:\windows\fontsถ้าคุณใช้ windows
  4. sudo apt-get install fontconfig
  5. fc-cache –fv เพื่อสร้างแคชแบบอักษรใหม่

0

แนวทางแก้ไขใน 2 ขั้นตอน (หากคุณใช้ centOS)

  1. ดาวน์โหลดแพ็กเกจ Microsoft Core Font rpm

    [root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
    
  2. ติดตั้งแพ็กเกจรอบต่อนาที

    [root@WEBSVR~/]# rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm
    


-1

สวัสดีมีปัญหาในการดูเอกสารที่ผลิตบน Windows ใช่ไหม

คุณสามารถลองวิธีแก้ปัญหาได้อย่างง่ายดาย:

ยำติดตั้ง curl cabextract xorg-x11-font-utils fontconfig

รอบต่อนาที -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

หลังจากนี้ฉันต้องรีบูตระบบ CentOS6

ที่มา: http://mscorefonts2.sourceforge.net/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.