gpt4 book ai didi

jasper-reports - 如何从 Jaspersoft/JRXML 生成双语标记 PDF 输出?

转载 作者:行者123 更新时间:2023-12-04 06:45:15 26 4
gpt4 key购买 nike

我们使用 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 的属性。

你有两个选择:

  1. 以 Dave Jarvis 的身份发布带有例如 iText 的 pdf suggested .您可以尝试更改字典或重新创建 pdf 添加此附加信息。这些方法都相当复杂,而且运行时间自然会增加,因为您需要阅读/重新创建 pdf。

  2. 修改source code JasperReport 添加支持。直接修改 JRPdfExporter、JRPdfExporterTagHelper 或添加新的导出器(以保持原始库完好无损)

在这个答案中,我将向您展示如何修改原始库,添加额外的标签(在字典中添加一个 LANG 条目)

背景

examplePDF19: Specifying the language for a passage or phrase with the Lang entry in PDF documents ,使用 iText RUPS 显示此 PDF 对象树。

example1

我假设添加 /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 可视化

Final output

根据 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com