mirror of https://github.com/apache/poi.git
fix XLS:FO footnotes and endnotes processing fo Word-to-FO converter
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1149011 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4e1ca332bc
commit
f5d15f67d6
|
@ -137,6 +137,11 @@ public class FoDocumentFacade
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Element createFootnote()
|
||||||
|
{
|
||||||
|
return document.createElementNS( NS_XSLFO, "fo:footnote" );
|
||||||
|
}
|
||||||
|
|
||||||
public Element createFootnoteBody()
|
public Element createFootnoteBody()
|
||||||
{
|
{
|
||||||
return document.createElementNS( NS_XSLFO, "fo:footnote-body" );
|
return document.createElementNS( NS_XSLFO, "fo:footnote-body" );
|
||||||
|
|
|
@ -18,6 +18,7 @@ package org.apache.poi.hwpf.converter;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
|
@ -97,45 +98,6 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void processEndnoteAutonumbered( HWPFDocument doc, int noteIndex,
|
|
||||||
Element block, Range endnoteTextRange )
|
|
||||||
{
|
|
||||||
// TODO: add endnote implementation?
|
|
||||||
processFootnoteAutonumbered( doc, noteIndex, block, endnoteTextRange );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void processFootnoteAutonumbered( HWPFDocument doc,
|
|
||||||
int noteIndex, Element block, Range footnoteTextRange )
|
|
||||||
{
|
|
||||||
String textIndex = String.valueOf( noteIndex + 1 );
|
|
||||||
|
|
||||||
{
|
|
||||||
Element inline = foDocumentFacade.createInline();
|
|
||||||
inline.setTextContent( textIndex );
|
|
||||||
inline.setAttribute( "baseline-shift", "super" );
|
|
||||||
inline.setAttribute( "font-size", "smaller" );
|
|
||||||
block.appendChild( inline );
|
|
||||||
}
|
|
||||||
|
|
||||||
Element footnoteBody = foDocumentFacade.createFootnoteBody();
|
|
||||||
Element footnoteBlock = foDocumentFacade.createBlock();
|
|
||||||
footnoteBody.appendChild( footnoteBlock );
|
|
||||||
block.appendChild( footnoteBody );
|
|
||||||
|
|
||||||
{
|
|
||||||
Element inline = foDocumentFacade.createInline();
|
|
||||||
inline.setTextContent( textIndex );
|
|
||||||
inline.setAttribute( "baseline-shift", "super" );
|
|
||||||
inline.setAttribute( "font-size", "smaller" );
|
|
||||||
footnoteBlock.appendChild( inline );
|
|
||||||
}
|
|
||||||
|
|
||||||
processCharacters( doc, Integer.MIN_VALUE, footnoteTextRange,
|
|
||||||
footnoteBlock );
|
|
||||||
}
|
|
||||||
|
|
||||||
static Document process( File docFile ) throws Exception
|
static Document process( File docFile ) throws Exception
|
||||||
{
|
{
|
||||||
final HWPFDocumentCore hwpfDocument = WordToFoUtils.loadDoc( docFile );
|
final HWPFDocumentCore hwpfDocument = WordToFoUtils.loadDoc( docFile );
|
||||||
|
@ -148,6 +110,8 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
|
|
||||||
private final Stack<BlockProperies> blocksProperies = new Stack<BlockProperies>();
|
private final Stack<BlockProperies> blocksProperies = new Stack<BlockProperies>();
|
||||||
|
|
||||||
|
private List<Element> endnotes = new ArrayList<Element>( 0 );
|
||||||
|
|
||||||
protected final FoDocumentFacade foDocumentFacade;
|
protected final FoDocumentFacade foDocumentFacade;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -163,6 +127,15 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
this.foDocumentFacade = new FoDocumentFacade( document );
|
this.foDocumentFacade = new FoDocumentFacade( document );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Element createNoteInline( String noteIndexText )
|
||||||
|
{
|
||||||
|
Element inline = foDocumentFacade.createInline();
|
||||||
|
inline.setTextContent( noteIndexText );
|
||||||
|
inline.setAttribute( "baseline-shift", "super" );
|
||||||
|
inline.setAttribute( "font-size", "smaller" );
|
||||||
|
return inline;
|
||||||
|
}
|
||||||
|
|
||||||
protected String createPageMaster( Section section, String type,
|
protected String createPageMaster( Section section, String type,
|
||||||
int sectionIndex )
|
int sectionIndex )
|
||||||
{
|
{
|
||||||
|
@ -291,6 +264,63 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
foDocumentFacade.setDescription( summaryInformation.getComments() );
|
foDocumentFacade.setDescription( summaryInformation.getComments() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void processEndnoteAutonumbered( HWPFDocument doc, int noteIndex,
|
||||||
|
Element block, Range endnoteTextRange )
|
||||||
|
{
|
||||||
|
final String textIndex = String.valueOf( noteIndex + 1 );
|
||||||
|
final String forwardLinkName = "endnote_" + textIndex;
|
||||||
|
final String backwardLinkName = "endnote_back_" + textIndex;
|
||||||
|
|
||||||
|
Element forwardLink = foDocumentFacade
|
||||||
|
.createBasicLinkInternal( forwardLinkName );
|
||||||
|
forwardLink.appendChild( createNoteInline( textIndex ) );
|
||||||
|
forwardLink.setAttribute( "id", backwardLinkName );
|
||||||
|
block.appendChild( forwardLink );
|
||||||
|
|
||||||
|
Element endnote = foDocumentFacade.createBlock();
|
||||||
|
Element backwardLink = foDocumentFacade
|
||||||
|
.createBasicLinkInternal( backwardLinkName );
|
||||||
|
backwardLink.appendChild( createNoteInline( textIndex + " " ) );
|
||||||
|
backwardLink.setAttribute( "id", forwardLinkName );
|
||||||
|
endnote.appendChild( backwardLink );
|
||||||
|
processCharacters( doc, Integer.MIN_VALUE, endnoteTextRange, endnote );
|
||||||
|
this.endnotes.add( endnote );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void processFootnoteAutonumbered( HWPFDocument doc,
|
||||||
|
int noteIndex, Element block, Range footnoteTextRange )
|
||||||
|
{
|
||||||
|
final String textIndex = String.valueOf( noteIndex + 1 );
|
||||||
|
final String forwardLinkName = "footnote_" + textIndex;
|
||||||
|
final String backwardLinkName = "footnote_back_" + textIndex;
|
||||||
|
|
||||||
|
Element footNote = foDocumentFacade.createFootnote();
|
||||||
|
block.appendChild( footNote );
|
||||||
|
|
||||||
|
Element inline = foDocumentFacade.createInline();
|
||||||
|
Element forwardLink = foDocumentFacade
|
||||||
|
.createBasicLinkInternal( forwardLinkName );
|
||||||
|
forwardLink.appendChild( createNoteInline( textIndex ) );
|
||||||
|
forwardLink.setAttribute( "id", backwardLinkName );
|
||||||
|
inline.appendChild( forwardLink );
|
||||||
|
footNote.appendChild( inline );
|
||||||
|
|
||||||
|
Element footnoteBody = foDocumentFacade.createFootnoteBody();
|
||||||
|
Element footnoteBlock = foDocumentFacade.createBlock();
|
||||||
|
Element backwardLink = foDocumentFacade
|
||||||
|
.createBasicLinkInternal( backwardLinkName );
|
||||||
|
backwardLink.appendChild( createNoteInline( textIndex + " " ) );
|
||||||
|
backwardLink.setAttribute( "id", forwardLinkName );
|
||||||
|
footnoteBlock.appendChild( backwardLink );
|
||||||
|
footnoteBody.appendChild( footnoteBlock );
|
||||||
|
footNote.appendChild( footnoteBody );
|
||||||
|
|
||||||
|
processCharacters( doc, Integer.MIN_VALUE, footnoteTextRange,
|
||||||
|
footnoteBlock );
|
||||||
|
}
|
||||||
|
|
||||||
protected void processHyperlink( HWPFDocumentCore wordDocument,
|
protected void processHyperlink( HWPFDocumentCore wordDocument,
|
||||||
Element currentBlock, Range textRange, int currentTableLevel,
|
Element currentBlock, Range textRange, int currentTableLevel,
|
||||||
String hyperlink )
|
String hyperlink )
|
||||||
|
@ -421,6 +451,13 @@ public class WordToFoConverter extends AbstractWordConverter
|
||||||
"xsl-region-body" );
|
"xsl-region-body" );
|
||||||
|
|
||||||
processParagraphes( wordDocument, flow, section, Integer.MIN_VALUE );
|
processParagraphes( wordDocument, flow, section, Integer.MIN_VALUE );
|
||||||
|
|
||||||
|
if ( endnotes != null && !endnotes.isEmpty() )
|
||||||
|
{
|
||||||
|
for ( Element endnote : endnotes )
|
||||||
|
flow.appendChild( endnote );
|
||||||
|
endnotes.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void processTable( HWPFDocumentCore wordDocument, Element flow,
|
protected void processTable( HWPFDocumentCore wordDocument, Element flow,
|
||||||
|
|
Loading…
Reference in New Issue