Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/**
* Copyright (C) 2011-2012 The XDocReport Team
*
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package org.apache.poi.xwpf.converter.pdf.internal.elements;
import java.awt.Color;
import java.math.BigInteger;
import org.apache.poi.xwpf.converter.core.utils.ColorHelper;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import fr.opensagres.xdocreport.itext.extension.ExtendedParagraph;
import fr.opensagres.xdocreport.itext.extension.IITextContainer;
public class StylableParagraph
extends ExtendedParagraph
implements IITextContainer
{
private static final long serialVersionUID = 664309269352903329L;
private final StylableDocument ownerDocument;
private IITextContainer parent;
private String listItemText;
private Float originMultipliedLeading;
private String listItemFontFamily;
private Float listItemFontSize;
private int listItemFontStyle = -1;
private Color listItemFontColor;
public StylableParagraph( StylableDocument ownerDocument, IITextContainer parent )
{
super();
this.ownerDocument = ownerDocument;
this.parent = parent;
this.originMultipliedLeading = null;
}
public StylableParagraph( StylableDocument ownerDocument, Paragraph title, IITextContainer parent )
{
super( title );
this.ownerDocument = ownerDocument;
this.parent = parent;
}
// FIXME check with Angelo the purpose of this method....
public IITextContainer getParent()
{
return parent;
}
public StylableDocument getOwnerDocument()
{
return ownerDocument;
}
public void setBorder( CTBorder border, int borderSide )
{
if ( border == null )
{
return;
}
boolean noBorder = ( STBorder.NONE == border.getVal() || STBorder.NIL == border.getVal() );
// No border
if ( noBorder )
{
return;
}
else
{
// border size
float size = -1;
BigInteger borderSize = border.getSz();
if ( borderSize != null )
{
// http://officeopenxml.com/WPtableBorders.php
// if w:sz="4" => 1/4 points
size = borderSize.floatValue() / 8f;
}
// border color
Color borderColor = ColorHelper.getBorderColor( border );
// border padding
Float space = null;
BigInteger borderSpace = border.getSpace();
if ( borderSpace != null )
{
// Specifies the spacing offset. Values are specified in points (1/72nd of an inch).
space = borderSpace.floatValue();
}
switch ( borderSide )
{
case Rectangle.TOP:
if ( size != -1 )
{
this.setBorderWidthTop( size );
}
if ( borderColor != null )
{
super.setBorderColorTop( borderColor );
}
if ( space != null )
{
super.setBorderPaddingTop( space );
}
break;
case Rectangle.BOTTOM:
if ( size != -1 )
{
this.setBorderWidthBottom( size );
}
if ( borderColor != null )
{
super.setBorderColorBottom( borderColor );
}
if ( space != null )
{
super.setBorderPaddingBottom( space );
}
break;
case Rectangle.LEFT:
if ( size != -1 )
{
this.setBorderWidthLeft( size );
}
if ( borderColor != null )
{
super.setBorderColorLeft( borderColor );
}
if ( space != null )
{
super.setBorderPaddingLeft( space );
}
break;
case Rectangle.RIGHT:
if ( size != -1 )
{
this.setBorderWidthRight( size );
}
if ( borderColor != null )
{
super.setBorderColorRight( borderColor );
}
if ( space != null )
{
super.setBorderPaddingRight( space );
}
break;
}
}
}
public String getListItemText()
{
return listItemText;
}
public void setListItemText( String listItemText )
{
this.listItemText = listItemText;
}
public String getListItemFontFamily()
{
return listItemFontFamily;
}
public void setListItemFontFamily( String listItemFontFamily )
{
this.listItemFontFamily = listItemFontFamily;
}
public Float getListItemFontSize()
{
return listItemFontSize;
}
public void setListItemFontSize( Float listItemFontSize )
{
this.listItemFontSize = listItemFontSize;
}
public int getListItemFontStyle()
{
return listItemFontStyle;
}
public void setListItemFontStyle( int listItemFontStyle )
{
this.listItemFontStyle = listItemFontStyle;
}
public Color getListItemFontColor()
{
return listItemFontColor;
}
public void setListItemFontColor( Color listItemFontColor )
{
this.listItemFontColor = listItemFontColor;
}
@Override
public void setLeading( float fixedLeading, float multipliedLeading )
{
super.setLeading( fixedLeading, multipliedLeading );
this.originMultipliedLeading = multipliedLeading;
}
@Override
public void setMultipliedLeading( float multipliedLeading )
{
super.setMultipliedLeading( multipliedLeading );
this.originMultipliedLeading = multipliedLeading;
}
/**
* Adjust iText multiplied leading according the given font.
*
* @param font
*/
public void adjustMultipliedLeading( Font font )
{
if ( originMultipliedLeading != null && font != null && font.getBaseFont() != null )
{
// iText and open office computes proportional line height differently
// [iText] line height = coefficient * font size
// [MS Word] line height = coefficient * (font ascender + font descender + font extra margin)
// we have to increase paragraph line height to generate pdf similar to OOXML docx document
// this algorithm may be inaccurate if fonts with different multipliers are used in this paragraph
float size = font.getSize();
float ascender = font.getBaseFont().getFontDescriptor( BaseFont.AWT_ASCENT, size );
float descender = -font.getBaseFont().getFontDescriptor( BaseFont.AWT_DESCENT, size ); // negative value
float margin = font.getBaseFont().getFontDescriptor( BaseFont.AWT_LEADING, size );
float multiplier = ( ascender + descender + margin ) / size;
super.setMultipliedLeading( originMultipliedLeading * multiplier );
}
}
}