Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
     Licensed to Plutext Pty Ltd under one or more contributor license agreements.  
     
   *  This file is part of docx4j.
  
      docx4j is licensed 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.
 
  */
 package org.docx4j.convert.out.fo;
 
 import java.util.List;
 
 
 	private static String XSL_FO = "http://www.w3.org/1999/XSL/Format";
 
 						FOConversionContext conversionContext,
 						Document documentNode parentNode) {
 					return new FOExporterVisitorGenerator(conversionContextdocumentparentNode);
 				}
 			};
 			
 	
 	private FOExporterVisitorGenerator(FOConversionContext conversionContextDocument documentNode parentNode) {
 		super(conversionContextdocumentparentNode);
 	}
 
 	}
 
 	protected DocumentFragment createImage(int imgTypeFOConversionContext conversionContextObject anchorOrInline) {
 			switch (imgType) {
 			case :
 				return WordXmlPictureE10.createXslFoImgE10(conversionContextanchorOrInline);
 			case :
 				return WordXmlPictureE20.createXslFoImgE20(conversionContextanchorOrInline);
 			}
 		return null;
 	}
     
 	protected Element createNode(Document docint nodeType) {
 		switch (nodeType) {
 			case :
 				return .createElementNS("block");
 			case :
 				return .createElementNS("inline");
 		}
 		return null;
 	}
 	
     @Override
 	protected Element handlePPr(FOConversionContext conversionContextPPr pPrDirectboolean sdtElement currentParent) {
     	Element ret = currentParent;
    	PropertyResolver propertyResolver = conversionContext.getPropertyResolver();
    	
    	String defaultParagraphStyleId = "Normal";
    	if (conversionContext.getWmlPackage().getMainDocumentPart().getStyleDefinitionsPart(false) != null) {
        	Style defaultParagraphStyle = 
        	if (defaultParagraphStyle != null) {
        		defaultParagraphStyleId = defaultParagraphStyle.getStyleId();
        	}
    	}
    	
    	String pStyleVal = null;
    	if (pPrDirect!=null && pPrDirect.getPStyle()!=null) {
    		pStyleVal = pPrDirect.getPStyle().getVal();
    	} else {
			pStyleVal = defaultParagraphStyleId;
		}
    	getLog().debug("style '" + pStyleVal );     		
        try {
        	
        	PPr pPr = null;
        	RPr rPr = null;
			pPr = propertyResolver.getEffectivePPr(pPrDirect);  
			getLog().debug("getting rPr for paragraph style");    				
			rPr = propertyResolver.getEffectiveRPr(nullpPrDirect); 
				// rPr in pPr direct formatting only applies to paragraph mark, 
				// so pass null here       				
			if (getLog().isDebugEnabled() && pPr!=null) {				
				getLog().debug(XmlUtils.marshaltoString(pPrtruetrue));					
			}
        							
			boolean inlist = false;
			Element foBlockElement;
			if (pPr!=null && pPr.getNumPr()!=null ) {
				inlist = true;
				// Its a list item.  At present we make a new list-block for
				// each list-item. This is not great; DocumentModel will ultimately
				// allow us to use fo:list-block properly.
						"list-block");
				currentParent.appendChild(foListBlock);
				foListBlock.setAttribute("provisional-distance-between-starts""0.5in");
				// Need to apply shading at fo:list-block level
				if (pPr.getShd()!=null) {
					PShading pShading = new PShading(pPr.getShd());
					pShading.setXslFO(foListBlock);
				}
						"list-item");
				foListBlock.appendChild(foListItem);				
				Element foListItemLabel = .createElementNS(
						"list-item-label");
				foListItem.appendChild(foListItemLabel);
				Element foListItemLabelBody = .createElementNS(
						"block");
				foListItemLabel.appendChild(foListItemLabelBody);
	        	ResultTriple triple;
	        	if (pPrDirect!=null && pPrDirect.getNumPr()!=null) {
	        		triple = org.docx4j.model.listnumbering.Emulator.getNumber(
	        			conversionContext.getWmlPackage(), pStyleVal
	        			pPrDirect.getNumPr().getNumId().getVal().toString(), 
	        			pPrDirect.getNumPr().getIlvl().getVal().toString() ); 
	        	} else {
	        		// Get the effective values; since we already know this,
	        		// save the effort of doing this again in Emulator
	        		Ilvl ilvl = pPr.getNumPr().getIlvl();
	        		String ilvlString = ilvl == null ? "0" : ilvl.getVal().toString();
	        		triple = null
	        		if (pPr.getNumPr().getNumId()!=null) {
		        		triple = org.docx4j.model.listnumbering.Emulator.getNumber(
		        				conversionContext.getWmlPackage(), pStyleVal
			        			pPr.getNumPr().getNumId().getVal().toString(), 
			        			ilvlString ); 		        	
	        		}
	        	}
				if (triple==null) {
					getLog().warn("computed number ResultTriple was null");
	        		if (getLog().isDebugEnabled() ) {
	        			foListItemLabelBody.setTextContent("nrt");
	        		} 
	        	} else {
	        		
	        		// Indent (in combination with provisional-distance-between-starts
	        		// above
	        		if (triple.getIndent()!=null) {
	        			Indent indent = new Indent(triple.getIndent());
	    				//foListBlock.setAttribute(Indent.FO_NAME, "2in");
	    				indent.setXslFO(foListBlock);
	        		}
	        		
	        		// Set the font
	        		if (triple.getNumFont()!=null) {
	        			String font = PhysicalFonts.getPhysicalFont(conversionContext.getWmlPackage(), triple.getNumFont() );
	        			if (font!=null) {
	        				foListItemLabelBody.setAttribute("font-family"font );
	        			}
	        		}
	        		
	        		if (triple.getBullet()!=null ) {
		        		foListItemLabelBody.setTextContent(triple.getBullet() );
		        	} else if (triple.getNumString()==null) {
		        		getLog().warn("computed NumString was null!");
		        		if (getLog().isDebugEnabled() ) {
		        			foListItemLabelBody.setTextContent("nns");
		        		} 
			    	} else {
						Text number = .createTextNodetriple.getNumString() );
						foListItemLabelBody.appendChild(number);		    		
			    	}
	        	}
				Element foListItemBody = .createElementNS(
						"list-item-body");
				foListItem.appendChild(foListItemBody);	
				foListItemBody.setAttribute(."body-start()");
				foBlockElement = .createElementNS(
						"block");
				foListItemBody.appendChild(foBlockElement);
				//If we have list items the parent for spans changes (currentP)
				ret = foBlockElement;
else {
				// Do nothing 
			}
			if (pPr!=null) {
				// Ignore paragraph borders once inside the container
				boolean ignoreBorders = !sdt;
				createFoAttributes(conversionContextpPrcurrentParentinlistignoreBorders );
			}
			if (rPr!=null) {											
				createFoAttributes(conversionContext.getWmlPackage(), rPrcurrentParent );
	        }
        
catch (Exception e) {
        
        return ret;
    }
	protected void createFoAttributes(FOConversionContext conversionContextPPr pPrElement foBlockElementboolean inListboolean ignoreBorders){
    	List<Propertyproperties = PropertyFactory.createProperties(conversionContext.getWmlPackage(), pPr);
    	
    	forProperty p :  properties ) {
			if (p!=null) {
				if (ignoreBorders &&
						((p instanceof PBorderTop)
								|| (p instanceof PBorderBottom))) {
					continue;
				}
				if (inList && !(p instanceof Indent) ) { 
					// Don't set start-indent in 
					// fo:list-item-body/fo:block.
					// This has to be handled above using something like 
					//  <fo:list-block provisional-distance-between-starts="0.5in" start-indent="2in">
					p.setXslFO(foBlockElement);
else if (!inList) {
					p.setXslFO(foBlockElement);
				}
			}
    	}
    	
    	
	}
	/*
	 *  @since 3.0.0
	 */
	protected static void applyFoAttributes(List<PropertypropertiesElement foElement) {
		if ((properties != null) && (!properties.isEmpty())) {
			for (int i=0; i<properties.size(); i++) {
				properties.get(i).setXslFO(foElement);
			}
		}
	}
    protected static void createFoAttributes(TrPr trPrElement foBlockElement){
    	if (trPr == null) {
    		return;
    	}
    	applyFoAttributes(PropertyFactory.createProperties(trPr), foBlockElement);
    }
    protected static void createFoAttributes(TcPr tcPrElement foBlockElement){
    	// includes TcPrInner.TcBorders, CTShd, TcMar, CTVerticalJc
    	
		if (tcPr==null) {
			return;
		}
    	applyFoAttributes(PropertyFactory.createProperties(tcPr), foBlockElement);
    }


    
    
On a block representing a run, we just put run properties from this rPr node. The paragraph style rPr's have been taken care of on the fo block which represents the paragraph.

Parameters:
wmlPackage
rPrNodeIt
childResults
Returns:
    @Override
	protected void handleRPr(
    		FOConversionContext conversionContext,
    		PPr pPrDirect,
    		RPr rPrDirectElement currentParent ) {
    	PropertyResolver propertyResolver = conversionContext.getPropertyResolver();
    	
    	
        try {
        	RPr rPr = propertyResolver.getEffectiveRPr(rPrDirectpPrDirect);
        	
			if (getLog().isDebugEnabled() && rPr!=null) {					
				getLog().debug(XmlUtils.marshaltoString(rPrtruetrue));					
			}
			//if (rPr!=null) {				
				createFoAttributes(conversionContext.getWmlPackage(), rPr, ((Element)currentParent) );
			//}
catch (Exception e) {
    	
    }
	protected static void createFoAttributes(WordprocessingMLPackage wmlPackage,
			RPr rPrElement foInlineElement){
    	List<Propertyproperties = PropertyFactory.createProperties(wmlPackagerPr);
    	
    	forProperty p :  properties ) {
    		p.setXslFO(foInlineElement);
    	}
	}
New to GrepCode? Check out our FAQ X