Phông chữ không có sẵn cho JVM với Báo cáo Jasper


91

Tôi đang cố gắng tạo báo cáo bằng DynamicJasper, nhưng gặp lỗi sau:

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

msttcorefonts đã được cài đặt, nhưng tôi đoán JVM không sử dụng bất kỳ phông chữ nào từ nó.

Tôi đang sử dụng Ubuntu 10.04.

Làm thế nào tôi có thể sửa lỗi này?


3
Tôi thực sự đang bỏ qua nó ... chỉ cần đặt "net.sf.jasperreports.awt.ignore.missing.font = true" ý tưởng tồi ... nhưng sẽ giải quyết được vấn đề trong giây lát ....
Andrew

Bạn sẽ cần phải cài đặt phông chữ microsoft trong Ubuntu, tham khảo link này để biết thông tin .. embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Sivaramakrishnan

1
bạn đặt cái này ở đâu tôi đang làm việc với phiên bản nhúng của jasperreports trong jbilling mà không có tệp jasperreports.properties nào tồn tại để chỉnh sửa.
Darragh


1
@Andrew, đây có vẻ không phải là một giải pháp tốt (tôi biết câu hỏi đã cũ), nhưng có lẽ tốt hơn là chúng ta tránh được các báo cáo không nhất quán, tôi đã chuyển câu trả lời.
Petter Friberg

Câu trả lời:


63

Tôi đã thử cài đặt mscorefonts, nhưng gói đã được cài đặt và cập nhật.

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

Tôi đã thử tìm kiếm phông chữ trong hệ thống tệp, với:

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

Thư mục này chỉ có README, với hướng dẫn chính xác về cách cài đặt.

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

Bạn cần kết nối Internet cho việc này:

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

Tôi đã cài đặt lại ttf-mscorefonts-installer(như được hiển thị ở trên, đảm bảo chấp nhận EULA!) Và vấn đề đã được giải quyết.


5
FYI trên các phiên bản Linux khác hãy thử sudo apt-get install msttcorefonts
KCD

đối với CentOS và RHEL6, bạn giải quyết vấn đề EULA như thế nào? yum cài đặt không cung cấp cho bạn bất kỳ tùy chọn để chấp nhận, bất kỳ ý tưởng?
Darragh

Điều gì về hệ điều hành windows phổ biến nhất?
Sarz

Đây là một công việc xoay quanh một máy tính duy nhất, nó sẽ không giải quyết bất kỳ vấn đề mã hóa nào, cách chính xác là sử dụng phần mở rộng phông chữ mà tôi đã đăng câu trả lời
Petter Friberg

1
Câu trả lời là đúng cho tình huống khi chúng tôi đã cài đặt phông chữ nhưng không có giấy phép được chấp nhận. Dưới đây là các bước thực hiện trong trường hợp bạn sắp thực hiện cài đặt tự động đầu tiên một cách chính xác: sudo echo ttf-mscorefonts-installer msttcorefonts / accept-mscorefonts-eula select true | debconf-set-selices && apt-get install -y -q ttf-mscorefonts-installer
Aleksander Lech

35

JasperReports tạo ra JRFontNotFoundException trong trường hợp phông chữ được sử dụng bên trong mẫu báo cáo không có sẵn cho JVM dưới dạng phông chữ hệ thống hoặc phông chữ đến từ phần mở rộng phông chữ JR. Điều này đảm bảo rằng tất cả các vấn đề gây ra bởi sự không khớp số liệu phông chữ sẽ tránh được và chúng tôi có cảnh báo sớm về sự không nhất quán.

Các báo cáo của Jasper đang cố gắng giúp bạn phát triển báo cáo của mình, cho biết rằng nó không thể xuất báo cáo của bạn một cách chính xác vì nó không thể tìm thấy phông chữ được xác định trong TextFieldhoặcStaticText

<font fontName="Arial"/>

Có, bạn có thể vô hiệu hóa điều này bằng cách đặt net.sf.jasperreports.awt.ignore.missing.font thành true nhưng bạn sẽ có sự mâu thuẫn xuất khẩu .

Có, bạn có thể cài đặt phông chữ làm phông chữ hệ thống JVM (nhưng bạn cần thực hiện việc này trên mọi PC được sử dụng có thể tạo báo cáo và bạn vẫn có thể gặp sự cố mã hóa ).

Cách chính xác!

Sử dụng Phần mở rộng Phông chữ ! , nếu bạn muốn tạo của riêng mình (xem liên kết bên dưới), báo cáo jasper cũng phân phối jar font-extension mặc định ( jasperreports-fonts-x.x.x.jar), hỗ trợ fontNameDejaVu Sans , DejaVu SerifDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

Từ Hướng dẫn cuối cùng về JasperReport:

Chúng tôi đặc biệt khuyến khích mọi người chỉ sử dụng phông chữ bắt nguồn từ phần mở rộng phông chữ, vì đây là cách duy nhất để đảm bảo rằng phông chữ sẽ khả dụng cho ứng dụng khi báo cáo được thực thi trong thời gian chạy. Việc sử dụng phông chữ hệ thống luôn mang lại rủi ro báo cáo không hoạt động bình thường khi được triển khai trên một máy mới có thể chưa được cài đặt các phông chữ đó

Liên kết trên StackOverflow về cách hiển thị phông chữ chính xác trong pdf

Danh sách kiểm tra về cách hiển thị phông chữ chính xác trong pdf

Tạo phần mở rộng phông chữ với JasperSoft Studio

Tạo phần mở rộng phông chữ với iReport


Bạn có thể cho tôi biết lý do tại sao Jasper và JVM không thể hiển thị PDF với Phông chữ tồn tại trong hệ thống (nằm tại C: \ windows \ fonts), thay vào đó tôi phải tạo một tiện ích mở rộng Phông chữ Jar và thêm nó làm thư viện vào đường dẫn lớp của dự án (tôi đang sử dụng Java và Eclipse). Tôi đã cố gắng google để tìm câu trả lời nhưng vẫn chưa tìm được lời giải thích dễ hiểu. Ngoài ra, tôi cũng thấy vấn đề xuất-pdf-phông-chữ này với Apache FOP (không cần phần mở rộng phông chữ nhưng tôi phải tạo tệp phông chữ-số liệu và thực hiện một số cấu hình bổ sung để phông chữ được hiển thị chính xác)
EagerToLearn

1
@EagerToLearn, tất cả đều có trong thư viện itext đang tạo pdf, itext để hiển thị chính xác các phông chữ cần có phần mở rộng phông chữ (nơi không chỉ bao gồm phông chữ mà còn cả mã hóa, nếu ecc nhúng được chỉ định). Nếu bạn không cung cấp điều này, itext sẽ thực hiện những gì họ gọi là "nỗ lực tốt nhất" để hiển thị phông chữ của bạn. Bạn đang không làm những gì chúng tôi cần (được viết trong tài liệu), hãy cố gắng hết sức, nhưng lỗi là ở bạn. Do đó, câu trả lời được chấp nhận cho câu hỏi này là không đúng !, Cần có phần mở rộng phông chữ, nếu bạn không cung cấp, bạn sẽ phải sống với bất cứ thứ gì được tạo ra.
Petter Friberg,

cảm ơn vì câu trả lời, nhưng tôi vẫn chỉ hiểu rằng vấn đề phông chữ là do cách thư viện iText hoạt động. Có thể là phông chữ này, mọi thứ nằm ngoài khả năng hiểu biết về kỹ thuật của tôi :(
EagerToLearn.

@eag Đây không phải là nhiều hơn nữa để hiểu điều này, để hiển thị một phông chữ, bạn cần biết vị trí của .ttf và bạn cần biết mã hóa văn bản là gì. Các nhà phát triển của lib để biết thông tin này đã tạo ra các phần mở rộng phông chữ, nếu bạn không cung cấp nó họ cần bắt đầu đoán, tại sao nó không hoạt động trong một số trường hợp là do "đoán" không chính xác, nhưng bạn không thể đổ lỗi cho lib. điều này vì họ đã cung cấp cho bạn một hệ thống để tránh "phỏng đoán"
Petter Friberg

22

Tôi sử dụng IReport để cài đặt phông chữ:

công cụ -> tùy chọn -> phông chữ -> bấm cài đặt phông chữ

Sau đó chọn phông chữ và nhấp vào

-> xuất dưới dạng tiện ích mở rộng và nhập tên myfont.jar

thêm jar này và cả spring.jar * vào đường dẫn xây dựng của bạn.

* sao chép spring.jar từ Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext


1
Để hoàn thành, arial ttf ở dạng c: / windows / fonts (ít nhất là trong win xp): arial.ttf, arialbd.ttf (bold), ariali.ttf (nghiêng), arialbi (đậm-nghiêng)
jneira

Thêm spring.jar vào đường dẫn xây dựng đã sửa nó.
fishjd 21/09/12

Phương pháp này thực sự đã làm việc cho tôi. Nó đóng gói phông chữ dưới dạng tệp jar, bạn thêm nó vào classpath và mọi thứ Just Work.
Satya

Nếu phần mở rộng phông chữ được tạo đúng cách thì không cần thêm spring.jar.
Petter Friberg

Công cụ này-> tùy chọn-> phông chữ-> nhấp vào cài đặt không khả dụng trên mac. :( bất cứ đề nghị?
L-Samuels

13

sudo apt-get install msttcorefonts hoạt động (trên môi trường phát triển Ubuntu của chúng tôi), nhưng không phải là một giải pháp tốt.

Thay vào đó, chúng tôi đóng gói các phông chữ với ứng dụng của mình dựa trên mẹo này . Tệp JAR của họ bao gồm các phông chữ sau,

  • Arial
  • Times New Roman
  • Chuyển phát nhanh mới
  • Comic Sans MS
  • Georgia
  • Verdana
  • Monospaced

Liên kết trực tiếp để tải về jar: Maven ver 1.0. DynamicFonts


Điều này hiện có thể được tải xuống từ kho lưu trữ mvn tiêu chuẩn, ví dụ: mvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Markus Pscheidt

12

Đối với CentOS:

wget msttcorefonts

Sau đó:

tar -zxvf msttcorefonts.tar.gz
cp msttcorefonts/*.ttf  /usr/share/fonts/TTF/
fc-cache -fv 

Sau cùng, khởi động lại JVM.


9

Có ba phương pháp để tránh một vấn đề như vậy.

Phương pháp 1: bằng cách đặt bỏ qua thuộc tính phông chữ bị thiếu.

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

hoặc bạn có thể đặt thuộc tính này bằng cách nhập dòng sau vào tệp .jrxml.

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

Phương pháp 2: bằng cách đặt thuộc tính phông chữ mặc định.

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

hoặc bạn có thể đặt thuộc tính này bằng cách nhập dòng sau vào tệp .jrxml.

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

Phương pháp 3: bằng cách thêm thuộc tính phông chữ bị thiếu.

Đầu tiên cài đặt các phông chữ bị thiếu trong IReport bằng cách chọn "Công cụ >> Tùy chọn >> Phông chữ >> Cài đặt Phông chữ", sau đó chọn tất cả phông chữ và Xuất ra bằng cách nhấp vào "Xuất dưới dạng Phần mở rộng" với Phần mở rộng .jar.

Bạn có thể sử dụng jar này cho Jasperreports-font.XXXjar sẽ có trong thư viện dự án hoặc classpath của bạn.


5

Tôi đã giải quyết vấn đề này bằng cách chỉ chọn 'SansSerif' hoặc 'Serif' chứ không phải 'Arial' hoặc 'Times New Roman'.


6
Theo tài liệu của ngoại lệ ( jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/… ), phương pháp này rõ ràng KHÔNG được khuyến nghị. Nó có thể gây ra sự cố kết xuất không mong muốn, vì các phông chữ này có thể được ánh xạ tới các phông chữ hệ thống khác nhau trên các hệ thống khác nhau.
Doug

3

Nếu bạn đang sử dụng maven trong dự án của mình, bạn chỉ có thể thêm phụ thuộc jasper-fonts vào pom.xml:

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

Cài đặt phông chữ bị thiếu trên hệ thống có thể là một giải pháp hiệu quả nhưng không phải đối với tôi, tôi không muốn phải cài đặt các phông chữ bị thiếu sau mỗi lần triển khai trong một máy chủ mới, thay vào đó tôi đã chọn nhúng phông chữ với ứng dụng.

Trân trọng.


2

có thể tạo phông chữ tùy chỉnh của bạn thông qua iReport và chuyển đổi như các tệp lọ


2

Hãy thử thêm dòng

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

vào tệp jasperreports.properties của bạn.

Jasper ngừng tìm một phông chữ


1
và là một ý tưởng tồi ... xuất khẩu không nhất quán!
Petter Friberg

@PetterFriberg không, đó là một cơ chế dự phòng tốt. Không phải lúc nào bạn cũng có thể kiểm soát JVM. Luôn luôn là một ý kiến ​​hay khi có một cơ chế dự phòng, ngay cả khi kết quả không lý tưởng, nó vẫn tốt hơn là sự cố ứng dụng do thiếu phông chữ trên máy của khách hàng.
jwenting

@jwenting thêm font-extension và nó sẽ không bị lỗi. Hãy tin tưởng ở tôi nếu bạn đang vô hiệu hóa bạn đang làm sai điều gì đó, bạn sẽ có các báo cáo không chính xác được tạo ra, thay vào đó bạn nên giải quyết vấn đề gốc (thiếu font-extension). Và có, bạn luôn có thể kiểm soát JVM.
Petter Friberg

@jwenting Lưu ý: Giải pháp là không cài đặt phông chữ trên máy chủ (như câu trả lời chấp nhận đã nói, nó sai!). Giải pháp là tạo và thêm phần mở rộng phông chữ phụ thuộc. Xem phần này để biết câu trả lời chính xác stackoverflow.com/a/35549391
Petter Friberg,

@PetterFriberg mà thường là không thể. Ví dụ: ứng dụng tôi duy trì chạy trên máy chủ nhưng cho phép người dùng thêm tệp .jrxml tùy chỉnh với quy ước đặt tên cụ thể để tạo báo cáo tùy chỉnh cao hơn và ngoài những gì chúng tôi cung cấp theo tiêu chuẩn. Không muốn những báo cáo đó bị lỗi nếu máy chủ không có sẵn phông chữ mà .jrxml chỉ định, vì vậy chúng tôi sử dụng dự phòng.
jwenting

2

Bạn có thể làm điều đó bằng cách cài đặt phông chữ, nghĩa là ở mọi nơi bạn muốn chạy ứng dụng cụ thể đó. Cách đơn giản nhất là chỉ cần thêm dòng bl này vào tệp jrxml của bạn:

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

Hy vọng nó giúp.


1
Tuy nhiên, điều này sẽ tạo ra sự mâu thuẫn xuất khẩu (do đó nó không thể hiển thị với phông chữ được chỉ ra trong jrxml). Hãy xem câu trả lời của tôi.
Petter Friberg

2

Đối với Debian

thêm vào

non-free contrib

để gỡ lỗi và gỡ lỗi-src trong /etc/apt/sources.list, tức là:

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

Sau đó

apt-get update
apt-get install msttcorefonts

Tất nhiên bạn sẽ cần khởi động lại jasperserver. I E:

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

Thay đổi cho phiên bản / đường dẫn của bạn.


2

Tôi đã gặp sự cố với ứng dụng web của mình dựa trên Spring 3 và được triển khai trên Weblogic 10.3 trên Oracle Linux 6. Giải pháp được đề cập tại liên kết không hoạt động với tôi.

Tôi phải thực hiện các bước sau - 1. Sao chép tệp phông chữ Arial * .ttf vào thư mục JROCKIT_JAVA_HOME / jre / lib / fonts 2. Tạo mục nhập phông chữ trong fontconfig.properties.src 3. Khởi động lại cụm từ bảng điều khiển 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

Tạo báo cáo jasper bằng nhiều ngôn ngữ (Unicode)

1) Cài đặt phông chữ trong ireport desginer

2) tạo phần mở rộng của phông chữ (chúng tôi sẽ sử dụng nó trong classpath ứng dụng)

3) cài đặt phông chữ trên hệ điều hành (tùy chọn)

4) dán tất cả .ttf của phông chữ vào thư mục jre-> lib-> phông chữ (nếu không ứng dụng web sẽ báo lỗi phông chữ không khả dụng cho JVM)


0

Trên thực tế, tôi đã khắc phục sự cố này theo một cách rất đơn giản

  1. đi đến của bạn home path , như/root
  2. tạo một thư mục có tên .fonts
  3. sao chép của bạn all your font filesvào .fonts, bạn có thể sao chép phông chữ từ C:\windows\fontsnếu bạn sử dụng cửa sổ.
  4. sudo apt-get install fontconfig
  5. fc-cache –fv để khiển trách bộ đệm phông chữ.

0

Giải pháp trong 2 bước (nếu bạn đang sử dụng centOS)

  1. Tải xuống gói rpm phông chữ cốt lõi của Microsoft.

    [root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
    
  2. Cài đặt gói rpm.

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

-1

Sao chép Phông chữ của bạn vào thư mục sau JDK_HOME \ jre \ lib \ phông chữ


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.