相关疑难解决方法(0)

使用iReport创建pdf时使用自定义字体

iReport版本:3.7.1

我以两种方式解决了这个问题.

我的第一种方法

我正在创建一个pdf页面,iReport我有一个字段(从数据库)设置为字体Gujarati-Salarl(印度的区域语言的字体).

此字体在字体列表中可用iReport.当我点击预览时,我得到所需的输出,字段为所需的字体样式.

这里的一切都很好.

pdf生成的文件仍包含相同的英文原始字体.

无论我是从应用程序调用报告还是从JAVA文件调用报告,结果都是一样的.

经过一番研究,我发现了这个,第二种方法

JRProperties.setProperty("net.sf.jasperreports.default.pdf.font.name", "C:\\Gujrati-Saral-1.ttf");
Run Code Online (Sandbox Code Playgroud)

这设置了所提供字体pdfttf字体,但现在整个版本pdf都是Guarati-saral字体,这不是我想要的.

有没有办法专门将此字体应用于该特定字段?

要么

当通过第二种方法进行时,有没有办法不将字体Guarati-saral应用于除所需字段之外的所有其他字段?

java pdf jasper-reports itext ireport

17
推荐指数
1
解决办法
5万
查看次数

Jasper停止寻找一种字体

将Jasper升级到最后一个版本后,它停止找到一种字体:Symbol.其余的字体似乎没问题.我在运行jasper的同一目录中有一堆ttfs,程序只是一个生成PDF的小包装器,它抛出了这个错误:

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Symbol' is not available to the JVM. See the Javadoc for more details.
    at net.sf.jasperreports.engine.util.JRFontUtil.checkAwtFont(JRFontUtil.java:358)
    at net.sf.jasperreports.engine.util.JRStyledText.getAwtAttributedString(JRStyledText.java:226)
    at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:362)
    at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:1129)
    at net.sf.jasperreports.engine.fill.JRFillStaticText.prepare(JRFillStaticText.java:183)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2028)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:757)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:269)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:860)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
    at XmlJasperInterface.report(XmlJasperInterface.java:82)
    at XmlJasperInterface.main(XmlJasperInterface.java:60)</pre>
Run Code Online (Sandbox Code Playgroud)

程序运行的目录:

# ls *.ttf
arial.ttf  arialbd.ttf  lsans.ttf  lsansd.ttf  lsansi.ttf  symbol.ttf
Run Code Online (Sandbox Code Playgroud)

找到所有其他字体.哦,在我的笔记本电脑(macosx)中,它工作正常,它只在服务器上断开(Debian).我打开了symbol.ttf,它在Mac OS X上打开正常(以防文件损坏).

可能会发生什么想法?

fonts jasper-reports

14
推荐指数
2
解决办法
3万
查看次数

将报告导出为PDF时更改字体

我正在使用Jaspersoft Studio 5.2,我使用Courier New字体进行了报告,当我将其导出为PDF时,它将字体更改为Arial.

我只使用Studio工具.当我预览报告是可以的,但是当我导出它时就会发生.

如何使用Courier New字体导出我的报告?

我在报告中使用的textField模型:

<textField pattern="dd/MM/yyyy  HH:mm:ss">
    <reportElement uuid="f50b279a-b480-498f-8af7-be7e23c4b80b" x="415" y="11" width="105" height="10"/>
    <textElement>
        <font fontName="Courier New" size="8"/>
    </textElement>
    <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)

fonts jasper-reports export-to-pdf jaspersoft-studio

9
推荐指数
1
解决办法
3万
查看次数

如何使用iReport在Jasperserver PDF中显示"$£Ω€απ⅔"?

我用文本字段硬编码了一个值

 ":$£?€???:" 
Run Code Online (Sandbox Code Playgroud)

测试这些字符是否以PDF格式显示

但它只打印为

:$£€:
Run Code Online (Sandbox Code Playgroud)

我已经尝试将字体更改为"符号",但这并不能解决问题.

注意:我正在使用iReport 5.5

jasper-reports special-characters export-to-pdf

7
推荐指数
1
解决办法
1万
查看次数

如何动态更改字体名称?

我正在使用 Jasper jar 生成关于我的 J2EE 项目的报告。我能够成功生成 PDF,没有任何问题。但是,我希望根据我们在一处配置的设置为所有 PDF 动态更改字体名称。

我开始知道有条件的风格,这对实现这一点很有用。但是,我确实有数百种字体,它们不能在每个地方都有条件地设置样式。这将使报告更糟糕。

我正在寻找合适的解决方案来帮助我动态更改 jasper PDF 上的字体。

java fonts dynamic jasper-reports

6
推荐指数
1
解决办法
2624
查看次数

Jasper Reports PDF不会导出西里尔文值

我试图将jasper导出为pdf,但它没有显示西里尔值.当我将其导出为ex​​cel时,它确实显示并且输出正常,但是当我尝试导出为PDF时,它不会导出西里尔文值.西里尔字母不是用西里尔字母书写的,它们都是用西里尔字母键盘写成的.

在此输入图像描述

我用来导出的代码是:

JRExporter e = new JRPdfExporter();
                e.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
                e.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, outStream);
                e.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, NAME);
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过以下参数:

e.setParameter(JRPdfExporterParameter.CHARACTER_ENCODING, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

但没有成功.有什么建议?

java jasper-reports export-to-pdf

5
推荐指数
1
解决办法
8609
查看次数

JRProperties 已弃用,推荐的替换方式

JRProperties班已经被注释为过时,取而代之JRPropertiesUtil的文档中所述

我一直在使用它以下列方式设置属性(因为它是一个提供静态方法的类),

JRProperties.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);
JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
   (...)
Run Code Online (Sandbox Code Playgroud)

我认为这是一种不推荐的设置属性的方法。


我找到了两种符合 API 文档的方法,即直接使用的实例JasperReportsContext

JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();
jasperReportsContext.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
jasperReportsContext.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);
   (...)
Run Code Online (Sandbox Code Playgroud)

或者通过将JasperReportsContext实例传递给JRPropertiesUtil

JasperReportsContext jasperReportsContext = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil jrPropertiesUtil = JRPropertiesUtil.getInstance(jasperReportsContext);
jrPropertiesUtil.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
jrPropertiesUtil.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont);
   (...)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

为报告打印机设置属性的推荐方法是什么?

java jasper-reports

5
推荐指数
1
解决办法
7013
查看次数

为什么 Linux 下的 PDF 文本会被截断?

我尝试在 Jasper Reports 中格式化日期,它适用于 Windows,但不适用于 Linux。对于 Linux,生成的文本会被截断。

代码:

JRXML:

<parameter name="timestamp" class="java.util.Date"/>
[...]
<textField>
    <reportElement x="0" y="0" width="50" height="16" uuid="0007846a-26f1-457a-a198-67a2f7c8417c">
        <property name="local_mesure_unitwidth" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.width" value="px"/>
        <property name="local_mesure_unitx" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.x" value="px"/>
        <property name="local_mesure_unity" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.y" value="px"/>
        <property name="local_mesure_unitheight" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.height" value="px"/>
    </reportElement>
    <box padding="2"/>
    <textElement textAlignment="Left" verticalAlignment="Top">
        <font size="8" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
    </textElement>
    <textFieldExpression><![CDATA[DATEFORMAT($P{timestamp},"dd.MM HH:mm")]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)

Maven 依赖项:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>5.6.0</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-functions</artifactId>
    <version>5.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

爪哇:

private byte[] createPdf() {

    try { …
Run Code Online (Sandbox Code Playgroud)

java fonts pdf-generation jasper-reports export-to-pdf

5
推荐指数
1
解决办法
2469
查看次数

如果缺少PDF的字体,为什么jasper报告不会抛出JRFontNotFoundException?

我读

我希望Jasper Reports会抛出一个JRFontNotFoundException如果机器上没有安装字体的话.

但我的应用程序并没有抛出JRFontNotFoundException,虽然我没有在任何(Jaspersoft Studios,JasperReports,Adobe Acrobat Reader)机器上安装使用过的字体"Helvetica".

JRXML:

<parameter name="timestamp" class="java.util.Date"/>
[...]
<textField>
    <reportElement x="0" y="0" width="50" height="16" uuid="0007846a-26f1-457a-a198-67a2f7c8417c">
        <property name="local_mesure_unitwidth" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.width" value="px"/>
        <property name="local_mesure_unitx" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.x" value="px"/>
        <property name="local_mesure_unity" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.y" value="px"/>
        <property name="local_mesure_unitheight" value="pixel"/>
        <property name="com.jaspersoft.studio.unit.height" value="px"/>
    </reportElement>
    <box padding="2"/>
    <textElement textAlignment="Left" verticalAlignment="Top">
        <font size="8" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
    </textElement>
    <textFieldExpression><![CDATA[DATEFORMAT($P{timestamp},"dd.MM HH:mm")]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)

Maven依赖:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>5.6.0</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-functions</artifactId>
    <version>5.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Java的:

private byte[] …
Run Code Online (Sandbox Code Playgroud)

java fonts pdf-generation jasper-reports export-to-pdf

4
推荐指数
1
解决办法
482
查看次数

Jasper 报告在 docker 容器中的服务器上不起作用(spring boot java 应用程序)

我的pom文件:

 <!-- Jasper Dependency -->
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports</artifactId>
        <version>6.6.0</version>
    </dependency>
    <!-- Jasper fonts dependency -->
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports-fonts</artifactId>
        <version>6.0.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

运行后:

  1. mvn clean install -Pprod -DskipTest
  2. docker-compose 构建
  3. docker-compose 推送

镜像在 docker hub 上构建和推送。然后使用命令:docker stack deploy .. 我运行 4 个 docker 容器(数据库、前端、后端和网络)。当我尝试使用生成 pdf API 时,出现如下错误:

    2018-10-25 17:46:18.997 DEBUG 1 --- [ XNIO-2 task-14] n.s.j.e.fonts.FontExtensionsRegistry     : Loading font extensions from net/sf/jasperreports/fonts/fonts.xml
2018-10-25 17:46:18.999 DEBUG 1 --- [ XNIO-2 task-14] n.s.j.e.fonts.SimpleFontExtensionHelper  : Parsing font family DejaVu Sans
2018-10-25 17:46:18.999 DEBUG 1 --- …
Run Code Online (Sandbox Code Playgroud)

java fonts jasper-reports docker

4
推荐指数
1
解决办法
3141
查看次数

Docker 和 Spring boot 给出的“sun.awt.FontConfiguration.head”为 null

我目前有一个使用 Spring Boot 构建的应用程序。我正在使用 Jasper 报告。当我尝试生成报告时,出现以下错误:

java.lang.NullPointerException:无法从短数组加载,因为 java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1260) 处的“sun.awt.FontConfiguration.head”为空 ~[na:na]

该应用程序在我的计算机上运行良好,仅在 docker 中失败。

这是我的 Dockerfile:

FROM openjdk:17-alpine
EXPOSE 10093
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} site_informativo.jar

RUN apk update;
RUN apk add -f apt-utils;
RUN apk add -f libfreetype6;
RUN apk add --no-cache -f fontconfig;
RUN apk add -f fonts-dejavu;
RUN apk add -f msttcorefonts;
RUN apk add -f libfontconfig1;
RUN apk add -f freetype;
RUN fc-cache --force

ENTRYPOINT ["java","-jar","/site_informativo.jar"]
Run Code Online (Sandbox Code Playgroud)

我还在 pom.xml 中添加了 jasperreports-fonts EXTENSION 但问题仍然存在

<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency> …
Run Code Online (Sandbox Code Playgroud)

java jasper-reports docker alpine-linux

3
推荐指数
1
解决办法
1万
查看次数