2017-10-20 189 views
3

我正在使用Jasper jar在我的J2EE項目上生成報告。我能夠成功生成PDF,沒有任何問題。不過,我希望根據我們在一個地方配置的設置,爲我的所有PDF動態更改字體名稱。如何動態更改字體名稱?

我來了解有用的條件風格來實現這一點。但是,我確實有數百種字體無法在每個地方有條件地設計。這會使報告更糟糕。

我正在尋找一個合適的解決方案,它可以幫助我動態更改jasper PDF上的字體。

+0

條件樣式比較將其分配到textField並發現它在JRStyle[] styles = report.getStyles();是專門爲這樣的情況。您無需重新編譯模板即可使用新的更改樣式 –

回答

2

我可以想到的最簡單的方法是在報表中使用默認樣式,並在填充報表之前通過java更改其字體名稱。

設置樣式(我將使用默認的樣式)在JRXML,因爲這樣我就不需要將其分配到textField,它的速度更快,從JasperReport對象來獲取

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="reputation" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a88bd694-4f90-41fc-84d0-002b90b2d73e"> 
    ..... 
    <style name="myStyle" isDefault="true" fontName="DejaVu Sans"/> 
    .... 
</jasperReport> 

在java中加載的報告(JRXML),更改默認樣式的字體名稱,然後填寫報告

JasperReport report = JasperCompileManager.compileReport("jmyReport.jrxml"); 
report.getDefaultStyle().setFontName("NewFontName"); 
JasperPrint jasperPrint = JasperFillManager.fillReport(report, paramMap,datasource); 

如果您希望確保在客戶端計算機上的pdf導出中正確顯示它們,請記住您需要在Font Extensions!中添加所有字體。

您也可以使用非默認的樣式,在這種情況下,你需要通過JRStyle#getName()

+0

感謝您的輸入。 report.getDefaultStyle()。setFontName(「NewFontName」); 什麼是我可以在這裏指定的所有字體名稱,你可以舉一些例子。 –

+0

@SrinathMahe字體的名稱,如「SansSerif」,「DejaVu Sans」,「Arial」等,但請注意,如果你想正確渲染你需要的pdf格式[font-extensions](https://stackoverflow.com/問題/ 3811908/FONT-是 - 不使用到的JVM的與 - 碧玉報告/ 35549391#35549391)。在開始使用用戶可能沒有在PC上安裝的字體生成PDF之前,您需要仔細研究這意味着什麼。 –