瀏覽代碼

FOP-2499: PDF/UA warnings for nested elements

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1693102 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-2_1
Simon Steiner 8 年之前
父節點
當前提交
61a8216891

+ 22
- 3
src/java/org/apache/fop/pdf/PDFStructElem.java 查看文件

@@ -21,7 +21,9 @@ package org.apache.fop.pdf;

import java.io.IOException;
import java.io.OutputStream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

@@ -244,13 +246,30 @@ public class PDFStructElem extends StructureHierarchyMember
}

public int output(OutputStream stream) throws IOException {
if (getDocument().getProfile().getPDFUAMode().isEnabled()
&& entries.containsKey("Alt") && "".equals(get("Alt"))) {
put("Alt", "No alternate text specified");
if (getDocument().getProfile().getPDFUAMode().isEnabled()) {
if (entries.containsKey("Alt") && "".equals(get("Alt"))) {
put("Alt", "No alternate text specified");
} else if (kids != null) {
for (PDFObject kid : kids) {
if (kid instanceof PDFStructElem
&& !(kid instanceof Placeholder)
&& structureType.toString().equals("P")
&& isBSLE(((PDFStructElem) kid).getStructureType().toString())) {
structureType = StandardStructureTypes.Grouping.DIV;
put("S", StandardStructureTypes.Grouping.DIV.getName());
break;
}
}
}
}
return super.output(stream);
}

private boolean isBSLE(String type) {
String[] blseValues = {"Table", "L", "P"};
return Arrays.asList(blseValues).contains(type);
}

/**
* Class representing a placeholder for a PDF Structure Element.
*/

+ 61
- 0
test/java/org/apache/fop/accessibility/fo/PDFUAWarningTestCase.java 查看文件

@@ -0,0 +1,61 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* $Id$ */

package org.apache.fop.accessibility.fo;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import org.xml.sax.helpers.AttributesImpl;

import org.apache.fop.pdf.PDFDocument;
import org.apache.fop.pdf.PDFFactory;
import org.apache.fop.pdf.PDFParentTree;
import org.apache.fop.pdf.PDFStructElem;
import org.apache.fop.pdf.PDFUAMode;
import org.apache.fop.render.pdf.PDFStructureTreeBuilder;

public class PDFUAWarningTestCase {

PDFFactory pdfFactory;

@Test
public void nestedTableWarningTestCase() throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PDFStructElem emptyElem = new PDFStructElem();
PDFStructElem block = PDFStructureTreeBuilder.createStructureElement("block", emptyElem,
new AttributesImpl(), pdfFactory, null);
PDFStructureTreeBuilder.createStructureElement("table", block, new AttributesImpl(), pdfFactory, null);
block.output(bos);
Assert.assertEquals("Div", block.getStructureType().toString());
}

@Before
public void setUp() {
PDFParentTree tree = new PDFParentTree();
PDFDocument doc = new PDFDocument("");
doc.makeStructTreeRoot(tree);
doc.getProfile().setPDFUAMode(PDFUAMode.PDFUA_1);
pdfFactory = new PDFFactory(doc);
}
}

Loading…
取消
儲存