- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 Jaspersoft iReport Designer 创建双语 PDF 输出——每个文件都包含英语和法语文本。
出于可访问性原因,我们希望在生成的 PDF 中用相应的语言标记每个文本 block 。参见 PDF19: Specifying the language for a passage or phrase with the Lang entry in PDF documents对于我们正在尝试做的事情。
手动修改 PDF 文件不是一种选择,因为我们将它们直接通过电子邮件发送给我们的用户。
Jaspersoft 支持吗?
最佳答案
JasperReports 版本<=6.7.0 不不 支持此功能,Configuration Reference 中没有可用属性设置 Lang
单个 textElement 的属性。
你有两个选择:
以 Dave Jarvis 的身份发布带有例如 iText 的 pdf suggested .您可以尝试更改字典或重新创建 pdf 添加此附加信息。这些方法都相当复杂,而且运行时间自然会增加,因为您需要阅读/重新创建 pdf。
修改source code JasperReport 添加支持。直接修改 JRPdfExporter、JRPdfExporterTagHelper 或添加新的导出器(以保持原始库完好无损)
在这个答案中,我将向您展示如何修改原始库,添加额外的标签(在字典中添加一个 LANG 条目)
example在 PDF19: Specifying the language for a passage or phrase with the Lang entry in PDF documents ,使用 iText RUPS 显示此 PDF 对象树。
我假设添加 /Lang
就足够了在我们的输出中,与非默认语言 pdf 的特定文本相关。注意:如果您还需要添加其他条目,技术保持不变,您只需要修改下面的代码示例。
Add a new property
net.sf.jasperreports.export.pdf.tag.lang
if this is present on reportElement in a type text field add a/Lang
entry with its value to dictionary.
对 JRPdfExporterTagHelper.java 的修改
添加静态属性标识符以遵循代码风格
public static final String PROPERTY_TAG_LANG = JRPdfExporter.PDF_EXPORTER_PROPERTIES_PREFIX + "tag.lang";
修改 startText(boolean isHyperLink)
和 startText(String text, boolean isHyperlink)
,此示例中仅显示第一个方法(第二个中的主体相同),我们需要更改方法签名添加 JRPrintText
以便我们可以检索属性。
protected void startText(JRPrintText text, boolean isHyperlink)
{
if (isTagged)
{
PdfStructureElement textTag = new PdfStructureElement(tagStack.peek(), isHyperlink ? PdfName.LINK : PdfName.TEXT);
if (text.hasProperties()&&text.getPropertiesMap().containsProperty(PROPERTY_TAG_LANG)){
textTag.put(PdfName.LANG, new PdfString(text.getPropertiesMap().getProperty(PROPERTY_TAG_LANG)));
}
pdfContentByte.beginMarkedContentSequence(textTag);
}
}
由于我们更改了方法签名,我们现在需要修改 JRPdfExporter.java这样我们就可以重新编译
修改 exportText(JRPrintText text)
...
if (glyphRendererAddActualText && textRenderer instanceof PdfGlyphRenderer)
{
tagHelper.startText(text,styledText.getText(), text.getLinkType() != null);
}
else
{
tagHelper.startText(text,text.getLinkType() != null);
}
...
您可以删除 bool 值 text.getLinkType() != null
,因为我们现在实际上传递的是文本对象,但为了简化示例,我想保留类似的代码
jrxml
<?xml version="1.0" encoding="UTF-8"?>
<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="TaggedPdf" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1be2df3d-cbc1-467c-8729-1ed569eb8a0d">
<property name="net.sf.jasperreports.export.pdf.tagged" value="true"/>
<property name="net.sf.jasperreports.export.pdf.tag.language" value="EN-US"/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<queryString>
<![CDATA[]]>
</queryString>
<title>
<band height="67" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="240" height="30" uuid="0722eadc-3fd6-4c4d-811c-64fbd18e0af5"/>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Hello world]]></text>
</staticText>
<staticText>
<reportElement x="0" y="30" width="240" height="30" uuid="5080190e-e9fd-4df6-b0f6-f1be3c109805">
<property name="net.sf.jasperreports.export.pdf.tag.lang" value="FR"/>
</reportElement>
<textElement verticalAlignment="Middle"/>
<text><![CDATA[Bonjour monde]]></text>
</staticText>
</band>
</title>
</jasperReport>
通过上述修改导出为 pdf 并使用 iText RUPS 可视化
根据 PDF19:在 PDF 文档中使用 Lang 条目指定段落或短语的语言是否足够
Verify that the language of a passage, phrase, or word that differs from the language of the surrounding text is correctly specified by a /Lang entry on an enclosing tag or container:
据我所知,是的,但我不是这方面的专家,无论如何,如果您需要添加其他标签,过程是相同的。
关于jasper-reports - 如何从 Jaspersoft/JRXML 生成双语标记 PDF 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253604/
我在 map 中将两个日期设置为字符串,如下所示: Map hashmap = new HashMap(); hashmap.put("date1", date1); hashmap.put("dat
我无法在 jrxml 的表格中显示复选框。 这是我的代码示例:
这个问题已经有答案了: How to set margins to jasper report in java? (1 个回答) 已关闭 7 年前。 我想知道是否可以使用 Java 外部应用程序更改
请帮助:.jrxml 每次我生成报告时都在编译。我只想编译一次。请帮助我需要添加什么条件。我没有使用输入/输出流。用 compileReport 可以做什么只编译一次。 最佳答案 不要让您的 JRXM
当我尝试加载 jrxml 文件时,它会抛出以下异常; net.sf.jasperreports.engine.JRException: org.xml.sax.SAXException:
我正在使用 netBeans,并且正在尝试生成一个不使用 Jasper Report 的报告 我可以获取报告的(本地 jrxml 文件的)url其目录结构如下: My_project |_buil
我的查询是,我在我的 java 文件中设置了一个参数,如下所示 Map parameters = new HashMap(); parameters.put("ReportTitle", "MRSG
我使用的是 iReport 版本 5.6。 现在我们正在分析一个新项目的需求,其需求如下。 我们有一个用 jrxml 设计的报告,其中包含近 20 个字段,用户必须向右滚动才能获取所有值,因此当结果大
我正在使用 iReport Designer 设计 .jrxml 文件。 如何在 .jrxml 文件中使用 for 循环或 if 循环? 可能吗? 如果是怎么办? 最佳答案 您可能希望使用脚本。它基本
我正在尝试找到一种方法来快速将大量 .jrxml 文件编译为 .jasper 文件。 最佳答案 您可能需要使用 Ant,但这应该可以满足您的需求: http://jasperreports.sourc
有人尝试过在 jasper 报告(.jrxml 文件)中导入用户定义的类吗?我想在我的 jasper 报告中使用一些(用户定义的)Util 类来 cooking 一些 bean 属性。我正在使用 Ja
问题:报告模板由管理员用户创建,他们仅决定在何处显示哪些数据,因为数据过滤器由业务用户指定。用更简单的 SQL 术语来说,查询由管理员用户指定,业务用户指定 WHERE 子句。 Jasper 允许用户
嗨,我是 jasper 报告的新手。我正在使用 ireport 来设计报告。我创建了一个简单的报告设计,其中有 2 个字段名称、地址。 public class R { private St
我的项目具有以下架构: 我的模板是“report1.jrxml”,然后当我执行此代码时: TableModel model = (TableModel) masterTable.getModel(
我只是想知道iReport/JRXML 是否支持多页报表?如果有,能否提供一些引用 sample ? 我不是要随数据增长而增长的报告。 我有一个静态报告,其中包含多个要处理的页面。每个页面都有不同的页
我想使用 Jasper 制作报告,所以我制作 .jrmxl 文件作为资源。我用这段代码来读取 .jrxml : JasperDesign jasperDesign = JasperManager.lo
我有 jrxml 文件,我想编译它以获得 .jasper。如何编译并获取该 jasper 文件? 最佳答案 jrxml编译成jasper的三种方式 您可以通过iReport设计器上的编译按钮(锤子标志
如何在 JFrame 中查看我的 jrxml 文件? 我有以下java代码: package test; import java.sql.Connection; import java.sql.Dri
这个问题已经有答案了: Accessing/importing user defined classes in jrxml (2 个回答) 已关闭 4 年前。 我在一个 Java 项目中使用 Jasp
这个问题已经有答案了: When do I need to re-compile Jasper reports (2 个回答) 已关闭 3 年前。 我有以下 2 个选项来使用 jasper 生成 PD
我是一名优秀的程序员,十分优秀!