Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache FOP ValidationException:在上遇到无效属性;fo:inline";:字体变体连字_Java_Pdf_Xsl Fo_Apache Fop - Fatal编程技术网

Java Apache FOP ValidationException:在上遇到无效属性;fo:inline";:字体变体连字

Java Apache FOP ValidationException:在上遇到无效属性;fo:inline";:字体变体连字,java,pdf,xsl-fo,apache-fop,Java,Pdf,Xsl Fo,Apache Fop,我正在使用ApacheFop将FO文件转换为PDF。在转换过程中,我遇到以下异常: javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: Invalid property encountered on "fo:inline": font-variant-ligatures (See position 1222:1124) FO文件是使用XSL-FO生成的,XSL-FO是一种用于格式化对象

我正在使用ApacheFop将FO文件转换为PDF。在转换过程中,我遇到以下异常:

javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: Invalid property encountered on "fo:inline": font-variant-ligatures (See position 1222:1124)
FO文件是使用XSL-FO生成的,XSL-FO是一种用于格式化对象的标记语言,在本例中用于将XHTML转换为有效的FO块。但是,apachefop不支持某些HTML样式的属性和属性,但它们不会阻止PDF的生成(在我的例子中是
font-variant-ligations
style属性)


如何忽略异常并继续生成PDF而不考虑无效属性?

FOP需要抱怨非XSL FO属性。XSL 1.1建议()包括:

XSL名称空间中的元素具有扩展名称的属性(即具有非固定名称的属性)而不是本文档中定义的属性,这是一个错误

但是,如果为“轻松/不太严格的验证(如果可用)”添加
-r
命令行参数,则可能会收到较少的消息。(请参阅。)

要在验证FO时忽略“invalidProperty”异常或任何其他事件(请参阅更多:),您必须:

1-首先,创建一个将拦截此事件的事件侦听器。为此,您必须使用
org.apache.fop.events.EventListener
接口,并通过描述遇到异常时fop转换器的行为来重写
processEvent
方法

比如,;您可以创建一个侦听器,将异常级别更改为invalidProperty异常警告,以便它不会阻止PDF生成

private static class InvalidPropertyEventListener implements EventListener {

    /**
     * Continues processing even if an <code>invalidProperty</code> runtimeException was thrown
     * during FO to PDF transformation.
     * <p>
     * Descends the event's severity level to WARN to avoid the exception throwing.
     *
     * @param event The event to be processed.
     */
    public void processEvent(Event event) {
        if ("org.apache.fop.fo.FOValidationEventProducer.invalidProperty".equals(event.getEventID())) {
            event.setSeverity(EventSeverity.WARN);
        }
    }
}
2-接下来,您必须向FOP注册事件侦听器,获取与用户代理(FousAgent)关联的EventBroadcaster并将其添加到其中:

// Adding FOP eventListeners
FOUserAgent userAgent = Factory.getInstance().getFactory().newFOUserAgent();
userAgent.getEventBroadcaster().addEventListener(getInvalidPropertyEventListener());
Fop fop = Factory.getInstance().getFactory().newFop(MimeConstants.MIME_PDF, userAgent, output);

// Transform the FO to PDF
Result res = new SAXResult(fop.getDefaultHandler());
Source src = new StreamSource(foSource);
Transformer transformer = TRANSFACTORY.newTransformer();
transformer.transform(src, res);
注意:这是针对每个处理运行单独进行的,即针对每个新的处理运行 用户代理