Hi, Thanks. Commited.
Cheers,
Dominik
Am Dienstag 14 September 2010 schrieb Emad Steitieh:
> Hi,
>
> I have improved DrawMultiLineText of PdfPainter little bit and the output
> is better. Here is my updated version:
>
> void PdfPainter::DrawMultiLineText( double dX, double dY, double dWidth,
> double dHeight, const PdfString & rsText, EPdfAlignment eAlignment,
> EPdfVerticalAlignment eVertical ) {
> PODOFO_RAISE_LOGIC_IF( !m_pCanvas, "Call SetPage() first before doing
> drawing operations." );
>
> if( !m_pFont || !m_pPage || !rsText.IsValid() )
> {
> PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
> }
>
> // Peter Petrov 25 September 2008
> m_pFont->EmbedFont();
>
> if( dWidth <= 0.0 || dHeight <= 0.0 ) // nonsense arguments
> return;
>
> TLineElement tLine;
> std::vector<TLineElement> vecLines;
> this->Save();
> this->SetClipRect( dX, dY, dWidth, dHeight );
>
> PdfString sString = this->ExpandTabs( rsText,
> rsText.GetCharacterLength() ); tLine.pszStart = sString.GetString();
> const char* pszEnd = tLine.pszStart;
> const char* pszWord = tLine.pszStart;
>
> double dCurWidth = 0.0;
>
> // do simple word wrapping
> // TODO: Use better algorithm!
> while( *pszEnd )
> {
> dCurWidth += m_pFont->GetFontMetrics()->CharWidth( *pszEnd );
>
> if( *pszEnd == '\n' ) // hard-break!
> {
> ++pszEnd; // skip the line feed
>
> tLine.lLen = pszEnd - tLine.pszStart;
> vecLines.push_back( tLine );
>
> tLine.pszStart = pszEnd;
> dCurWidth = 0.0;
> }
> else if( isspace( static_cast<unsigned int>(static_cast<unsigned
> char>(*pszEnd)) ) || ispunct( static_cast<unsigned
> int>(static_cast<unsigned char>(*pszEnd)) )) pszWord = pszEnd;
>
> if( dCurWidth > dWidth )
> {
> // The last word does not fit anymore in the current line.
> // -> Move it to the next one.
>
> // skip leading whitespaces!
> while( *tLine.pszStart && isspace( static_cast<unsigned
> int>(static_cast<unsigned char>(*tLine.pszStart)) ) ) ++tLine.pszStart;
>
> tLine.lLen = /*pszEnd*/pszWord - tLine.pszStart + 1;
> vecLines.push_back( tLine );
> tLine.pszStart = pszWord + 1;
>
> dCurWidth = pszEnd-pszWord > 0 ?
> m_pFont->GetFontMetrics()->StringWidth( pszWord+1,
> pszEnd-pszWord-1 ) : 0.0; }
> ++pszEnd;
> }
>
> if( pszEnd-tLine.pszStart > 0 )
> {
> tLine.lLen = pszEnd - tLine.pszStart;
> vecLines.push_back( tLine );
> }
>
> // Do vertical alignment
> switch( eVertical )
> {
> default:
> case ePdfVerticalAlignment_Top:
> dY += dHeight; break;
> case ePdfVerticalAlignment_Bottom:
> dY += m_pFont->GetFontMetrics()->GetLineSpacing() *
> vecLines.size(); break; case ePdfVerticalAlignment_Center:
> dY += (dHeight -
> ((dHeight - (m_pFont->GetFontMetrics()->GetLineSpacing()
> * vecLines.size()))/2.0)); break;
> }
>
> std::vector<TLineElement>::const_iterator it = vecLines.begin();
> while( it != vecLines.end() )
> {
> dY -= m_pFont->GetFontMetrics()->GetLineSpacing();
> if( (*it).pszStart )
> this->DrawTextAligned( dX, dY, dWidth, PdfString(
> (*it).pszStart, (*it).lLen ), eAlignment );
>
> ++it;
> }
> this->Restore();
> }
>
>
>
>
>
> ---------------------------------------------------------------------------
> --- Start uncovering the many advantages of virtual appliances
> and start using them to simplify application deployment and
> accelerate your shift to cloud computing.
> http://p.sf.net/sfu/novell-sfdev2dev
> _______________________________________________
> Podofo-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/podofo-users
>
--
**********************************************************************
Dominik Seichter - [email protected]
KRename - http://www.krename.net - Powerful batch renamer for KDE
KBarcode - http://www.kbarcode.net - Barcode and label printing
PoDoFo - http://podofo.sf.net - PDF generation and parsing library
SchafKopf - http://schafkopf.berlios.de - Schafkopf, a card game, for KDE
Alan - http://alan.sf.net - A Turing Machine in Java
**********************************************************************
signature.asc
Description: This is a digitally signed message part.
------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________ Podofo-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/podofo-users
