当前位置: 首页 > 知识库问答 >
问题:

为什么在Linux的PDF中会截断文本?

易招
2023-03-14

我尝试在Jasper报告中格式化日期,它适用于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>

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>
private byte[] createPdf() {

    try {
        InputStream is = getClass().getResourceAsStream("MyReport.jasper");
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("timestamp", new Date());
        JRDataSource jrDataSource = new JRBeanCollectionDataSource(new Vector(), false);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
        byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint);
        return pdf;
    } catch (JRException e) {
        throw new RuntimeException("Could not create PDF.", e);
    }
}

我读到:

  • 用jasperreport生成的PDF在Linux上显示不佳,但在Mac上显示良好,可能与os有关吗?
  • http://community.jaspersoft.com/questions/527138/pdf-text-truncated-linux-fine-windows
  • http://community.jaspersoft.com/questions/803503/why-text-field-value-will-be-truncated-if-application-running-linux

而解决办法似乎是嵌入字体,但行不通。

如果在iText中使用这些字体,iText将忽略embedded参数,因为可以安全地假设Adobe Reader和其他查看器可以正确呈现这些字体。

为什么相同的字体在Windows和Linux下有不同的宽度?或者为什么文本截断和/或换行不同?

共有1个答案

宰父玄天
2023-03-14

为了正确计算字体度量,字体需要对java虚拟Macchine可用。

请参阅这个历史问题:Font对于Jasper报告的JVM不可用,该报告显示了对旧错误的各种解决方案

然而,jasper-reports的正确解决方案是使用字体扩展

如果需要其他字体,最好的解决方案是生成自己的字体扩展,包括有效的.ttf字体。这可以在IDE中完成。

 类似资料:
  • 问题内容: Firebird在除法而不是舍入时会截断小数位。此外,它以分子和分母的小数位数为基础,将返回值的小数点位数作为基础。 为什么Firebird会被截断而不是四舍五入?为何将返回值基于查询中的小数位数? Firebird2.5: SQL Server 2012: Oracle 11gR2: MySQL 5.5.32: PostgreSQL 9.3.1: SQLite: 问题答案: 在Fir

  • 问题内容: 我正在使用具有“很高”的xlabel的位置绘制数据集(这是在TeX中渲染的公式,其中包含一个分数,因此其高度等于几行文本)。 无论如何,当我绘制数字时,公式的底部总是被切除。更改图形大小似乎无济于事,而且我还无法弄清楚如何将x轴“向上”移动以为xlabel腾出空间。诸如此类的东西将是一个合理的临时解决方案,但最好的办法是使matplotlib自动识别标签被切断并相应调整大小。 这是我的

  • 问题内容: 我有一个向stdout写入大量数据的过程,我正在将其重定向到日志文件。我想通过不时地将当前文件复制到一个新名称并将其截断来限制文件的大小。 我通常的截断文件技巧,例如 不起作用,大概是因为进程正在使用它。 有什么办法可以截断文件?还是将其删除,并以某种方式将流程的stdout与新文件相关联? FWIW,这是第三方产品,我无法对其进行更改以更改其日志记录模型。 *通过文件进行 *EDIT

  • 问题内容: 我有一个包含4列的表格:ID,类型,所有者,描述。ID是AUTO_INCREMENT PRIMARY KEY,现在我要: 当然,我很少有类型=’Apple’和owner =’Apple CO’的记录。因此,我的问题是,哪条记录将是保留在该ALTER TABLE之后的特殊记录,ID最小的记录或最新插入的最大记录? 问题答案: 第一条记录将保留,其余的将被删除§§: 是标准SQL的MySQ

  • 我想在spring boot项目中使用“truncate table”语句而不是“delete”语句,因为我需要重置mysql中的自动增量id。这是我的代码: 但有一个例外,就像这样: 其他操作已经工作,如插入、更新或选择,原因是什么,我应该修改什么?

  • 我一直在监控我的应用程序错误,我看到下面的错误太多次了 错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败(外部/openssl/SSL/s23\u clnt.c:741 0xaa48cd5c:0x00000000)-javax。网ssl。SSLHandshakeException:javax。网ssl。SSLProtocolExc