Overview

Packages

  • JAMA
  • None
  • PHP
  • PHPExcel
    • CachedObjectStorage
    • Calculation
    • Cell
    • Chart
      • Renderer
    • Reader
      • Excel2007
      • Excel5
    • RichText
    • Settings
    • Shared
      • Escher
      • OLE
      • Trend
      • ZipArchive
    • Style
    • Worksheet
      • Drawing
    • Writer
      • 2007
      • CSV
      • Excel2007
      • Excel5
      • HTML
      • PDF

Classes

  • CholeskyDecomposition
  • Dao
  • DateTime
  • DateTimeZone
  • DOMNode
  • EigenvalueDecomposition
  • Elemento
  • Historial
  • Irradiacion
  • Latitud
  • MotorPhp
  • Panel
  • PclZip
  • Periodo
  • PHPExcel
  • PHPExcel_Autoloader
  • PHPExcel_Best_Fit
  • PHPExcel_CachedObjectStorage_APC
  • PHPExcel_CachedObjectStorage_CacheBase
  • PHPExcel_CachedObjectStorage_DiscISAM
  • PHPExcel_CachedObjectStorage_Igbinary
  • PHPExcel_CachedObjectStorage_Memcache
  • PHPExcel_CachedObjectStorage_Memory
  • PHPExcel_CachedObjectStorage_MemoryGZip
  • PHPExcel_CachedObjectStorage_MemorySerialized
  • PHPExcel_CachedObjectStorage_PHPTemp
  • PHPExcel_CachedObjectStorage_SQLite
  • PHPExcel_CachedObjectStorage_SQLite3
  • PHPExcel_CachedObjectStorage_Wincache
  • PHPExcel_CachedObjectStorageFactory
  • PHPExcel_CalcEngine_CyclicReferenceStack
  • PHPExcel_CalcEngine_Logger
  • PHPExcel_Calculation
  • PHPExcel_Calculation_Database
  • PHPExcel_Calculation_DateTime
  • PHPExcel_Calculation_Engineering
  • PHPExcel_Calculation_ExceptionHandler
  • PHPExcel_Calculation_Financial
  • PHPExcel_Calculation_FormulaParser
  • PHPExcel_Calculation_FormulaToken
  • PHPExcel_Calculation_Function
  • PHPExcel_Calculation_Functions
  • PHPExcel_Calculation_Logical
  • PHPExcel_Calculation_LookupRef
  • PHPExcel_Calculation_MathTrig
  • PHPExcel_Calculation_Statistical
  • PHPExcel_Calculation_TextData
  • PHPExcel_Calculation_Token_Stack
  • PHPExcel_Cell
  • PHPExcel_Cell_AdvancedValueBinder
  • PHPExcel_Cell_DataType
  • PHPExcel_Cell_DataValidation
  • PHPExcel_Cell_DefaultValueBinder
  • PHPExcel_Cell_Hyperlink
  • PHPExcel_Chart
  • PHPExcel_Chart_DataSeries
  • PHPExcel_Chart_DataSeriesValues
  • PHPExcel_Chart_Layout
  • PHPExcel_Chart_Legend
  • PHPExcel_Chart_PlotArea
  • PHPExcel_Chart_Renderer_jpgraph
  • PHPExcel_Chart_Title
  • PHPExcel_Comment
  • PHPExcel_DocumentProperties
  • PHPExcel_DocumentSecurity
  • PHPExcel_Exponential_Best_Fit
  • PHPExcel_HashTable
  • PHPExcel_IOFactory
  • PHPExcel_Linear_Best_Fit
  • PHPExcel_Logarithmic_Best_Fit
  • PHPExcel_NamedRange
  • PHPExcel_Polynomial_Best_Fit
  • PHPExcel_Power_Best_Fit
  • PHPExcel_Reader_Abstract
  • PHPExcel_Reader_CSV
  • PHPExcel_Reader_DefaultReadFilter
  • PHPExcel_Reader_Excel2003XML
  • PHPExcel_Reader_Excel2007
  • PHPExcel_Reader_Excel2007_Chart
  • PHPExcel_Reader_Excel2007_Theme
  • PHPExcel_Reader_Excel5
  • PHPExcel_Reader_Excel5_Escher
  • PHPExcel_Reader_Excel5_MD5
  • PHPExcel_Reader_Excel5_RC4
  • PHPExcel_Reader_Gnumeric
  • PHPExcel_Reader_HTML
  • PHPExcel_Reader_OOCalc
  • PHPExcel_Reader_SYLK
  • PHPExcel_ReferenceHelper
  • PHPExcel_RichText
  • PHPExcel_RichText_Run
  • PHPExcel_RichText_TextElement
  • PHPExcel_Settings
  • PHPExcel_Shared_CodePage
  • PHPExcel_Shared_Date
  • PHPExcel_Shared_Drawing
  • PHPExcel_Shared_Escher
  • PHPExcel_Shared_Escher_DgContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer
  • PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer
  • PHPExcel_Shared_Escher_DggContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE
  • PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip
  • PHPExcel_Shared_Excel5
  • PHPExcel_Shared_File
  • PHPExcel_Shared_Font
  • PHPExcel_Shared_JAMA_LUDecomposition
  • PHPExcel_Shared_JAMA_Matrix
  • PHPExcel_Shared_JAMA_QRDecomposition
  • PHPExcel_Shared_OLE
  • PHPExcel_Shared_OLE_ChainedBlockStream
  • PHPExcel_Shared_OLE_PPS
  • PHPExcel_Shared_OLE_PPS_File
  • PHPExcel_Shared_OLE_PPS_Root
  • PHPExcel_Shared_OLERead
  • PHPExcel_Shared_PasswordHasher
  • PHPExcel_Shared_String
  • PHPExcel_Shared_TimeZone
  • PHPExcel_Shared_XMLWriter
  • PHPExcel_Shared_ZipArchive
  • PHPExcel_Shared_ZipStreamWrapper
  • PHPExcel_Style
  • PHPExcel_Style_Alignment
  • PHPExcel_Style_Border
  • PHPExcel_Style_Borders
  • PHPExcel_Style_Color
  • PHPExcel_Style_Conditional
  • PHPExcel_Style_Fill
  • PHPExcel_Style_Font
  • PHPExcel_Style_NumberFormat
  • PHPExcel_Style_Protection
  • PHPExcel_Style_Supervisor
  • PHPExcel_Worksheet
  • PHPExcel_Worksheet_AutoFilter
  • PHPExcel_Worksheet_AutoFilter_Column
  • PHPExcel_Worksheet_AutoFilter_Column_Rule
  • PHPExcel_Worksheet_BaseDrawing
  • PHPExcel_Worksheet_CellIterator
  • PHPExcel_Worksheet_ColumnDimension
  • PHPExcel_Worksheet_Drawing
  • PHPExcel_Worksheet_Drawing_Shadow
  • PHPExcel_Worksheet_HeaderFooter
  • PHPExcel_Worksheet_HeaderFooterDrawing
  • PHPExcel_Worksheet_MemoryDrawing
  • PHPExcel_Worksheet_PageMargins
  • PHPExcel_Worksheet_PageSetup
  • PHPExcel_Worksheet_Protection
  • PHPExcel_Worksheet_Row
  • PHPExcel_Worksheet_RowDimension
  • PHPExcel_Worksheet_RowIterator
  • PHPExcel_Worksheet_SheetView
  • PHPExcel_WorksheetIterator
  • PHPExcel_Writer_Abstract
  • PHPExcel_Writer_CSV
  • PHPExcel_Writer_Excel2007
  • PHPExcel_Writer_Excel2007_Chart
  • PHPExcel_Writer_Excel2007_Comments
  • PHPExcel_Writer_Excel2007_ContentTypes
  • PHPExcel_Writer_Excel2007_DocProps
  • PHPExcel_Writer_Excel2007_Drawing
  • PHPExcel_Writer_Excel2007_Rels
  • PHPExcel_Writer_Excel2007_RelsRibbon
  • PHPExcel_Writer_Excel2007_RelsVBA
  • PHPExcel_Writer_Excel2007_StringTable
  • PHPExcel_Writer_Excel2007_Style
  • PHPExcel_Writer_Excel2007_Theme
  • PHPExcel_Writer_Excel2007_Workbook
  • PHPExcel_Writer_Excel2007_Worksheet
  • PHPExcel_Writer_Excel2007_WriterPart
  • PHPExcel_Writer_Excel5
  • PHPExcel_Writer_Excel5_BIFFwriter
  • PHPExcel_Writer_Excel5_Escher
  • PHPExcel_Writer_Excel5_Font
  • PHPExcel_Writer_Excel5_Parser
  • PHPExcel_Writer_Excel5_Workbook
  • PHPExcel_Writer_Excel5_Worksheet
  • PHPExcel_Writer_Excel5_Xf
  • PHPExcel_Writer_HTML
  • PHPExcel_Writer_PDF
  • PHPExcel_Writer_PDF_Core
  • PHPExcel_Writer_PDF_DomPDF
  • PHPExcel_Writer_PDF_mPDF
  • PHPExcel_Writer_PDF_tcPDF
  • Provincia
  • Radiacion
  • SingularValueDecomposition
  • Sistema
  • trendClass
  • xajax
  • xajaxArgumentManager
  • xajaxCallableObject
  • xajaxCallableObjectPlugin
  • xajaxControl
  • xajaxControlContainer
  • xajaxCustomRequest
  • xajaxCustomResponse
  • xajaxEvent
  • xajaxEventPlugin
  • xajaxFunctionPlugin
  • xajaxIncludeClientScriptPlugin
  • xajaxLanguageManager
  • xajaxPlugin
  • xajaxPluginManager
  • xajaxRequest
  • xajaxRequestPlugin
  • xajaxResponse
  • xajaxResponseManager
  • xajaxResponsePlugin
  • xajaxScriptPlugin
  • xajaxUserFunction
  • XMLWriter

Interfaces

  • DateTimeInterface
  • Iterator
  • PHPExcel_CachedObjectStorage_ICache
  • PHPExcel_Cell_IValueBinder
  • PHPExcel_IComparable
  • PHPExcel_Reader_IReader
  • PHPExcel_Reader_IReadFilter
  • PHPExcel_RichText_ITextElement
  • PHPExcel_Writer_IWriter
  • Throwable
  • Traversable

Exceptions

  • Exception
  • PHPExcel_Calculation_Exception
  • PHPExcel_Chart_Exception
  • PHPExcel_Exception
  • PHPExcel_Reader_Exception
  • PHPExcel_Writer_Exception

Functions

  • acosh
  • agregar_elemento
  • asinh
  • atanh
  • borrar_elementos
  • borrar_gdm_ab
  • borrar_irradiacion
  • borrar_latitud
  • borrar_panel
  • borrar_periodo
  • borrar_pmp_min_pmp_max
  • borrar_radiacion
  • borrar_resumen
  • borrar_sistema
  • borrar_sombra
  • gdm_ab
  • grabar_resumen
  • historial
  • hypo
  • irradiacion
  • JAMAError
  • latitud
  • limpiar_historial
  • login
  • mb_str_replace
  • mostrar_energia_total_ch
  • mostrar_panel_md_th
  • mostrar_panel_th
  • mostrar_radiacion_md_th
  • mostrar_radiacion_th
  • mostrar_resumen_th
  • panel
  • PclZipUtilCopyBlock
  • PclZipUtilOptionText
  • PclZipUtilPathInclusion
  • PclZipUtilPathReduction
  • PclZipUtilRename
  • PclZipUtilTranslateWinPath
  • periodo
  • pmp_min_pmp_max
  • preparar_panel
  • preparar_radiacion
  • preparar_radiacion_media
  • radiacion
  • resumen
  • sistema
  • sombra
  • xajaxCompressFile
  • xajaxErrorHandler
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
  1: <?php
  2: /**
  3:  * PHPExcel
  4:  *
  5:  * Copyright (c) 2006 - 2014 PHPExcel
  6:  *
  7:  * This library is free software; you can redistribute it and/or
  8:  * modify it under the terms of the GNU Lesser General Public
  9:  * License as published by the Free Software Foundation; either
 10:  * version 2.1 of the License, or (at your option) any later version.
 11:  *
 12:  * This library is distributed in the hope that it will be useful,
 13:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 15:  * Lesser General Public License for more details.
 16:  *
 17:  * You should have received a copy of the GNU Lesser General Public
 18:  * License along with this library; if not, write to the Free Software
 19:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 20:  *
 21:  * @category   PHPExcel
 22:  * @package    PHPExcel_Shared
 23:  * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 24:  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 25:  * @version    1.8.0, 2014-03-02
 26:  */
 27: 
 28: 
 29: /**
 30:  * PHPExcel_Shared_Font
 31:  *
 32:  * @category   PHPExcel
 33:  * @package    PHPExcel_Shared
 34:  * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 35:  */
 36: class PHPExcel_Shared_Font
 37: {
 38:     /* Methods for resolving autosize value */
 39:     const AUTOSIZE_METHOD_APPROX    = 'approx';
 40:     const AUTOSIZE_METHOD_EXACT     = 'exact';
 41: 
 42:     private static $_autoSizeMethods = array(
 43:         self::AUTOSIZE_METHOD_APPROX,
 44:         self::AUTOSIZE_METHOD_EXACT,
 45:     );
 46: 
 47:     /** Character set codes used by BIFF5-8 in Font records */
 48:     const CHARSET_ANSI_LATIN                = 0x00;
 49:     const CHARSET_SYSTEM_DEFAULT            = 0x01;
 50:     const CHARSET_SYMBOL                    = 0x02;
 51:     const CHARSET_APPLE_ROMAN               = 0x4D;
 52:     const CHARSET_ANSI_JAPANESE_SHIFTJIS    = 0x80;
 53:     const CHARSET_ANSI_KOREAN_HANGUL        = 0x81;
 54:     const CHARSET_ANSI_KOREAN_JOHAB         = 0x82;
 55:     const CHARSET_ANSI_CHINESE_SIMIPLIFIED  = 0x86;     //  gb2312
 56:     const CHARSET_ANSI_CHINESE_TRADITIONAL  = 0x88;     //  big5
 57:     const CHARSET_ANSI_GREEK                = 0xA1;
 58:     const CHARSET_ANSI_TURKISH              = 0xA2;
 59:     const CHARSET_ANSI_VIETNAMESE           = 0xA3;
 60:     const CHARSET_ANSI_HEBREW               = 0xB1;
 61:     const CHARSET_ANSI_ARABIC               = 0xB2;
 62:     const CHARSET_ANSI_BALTIC               = 0xBA;
 63:     const CHARSET_ANSI_CYRILLIC             = 0xCC;
 64:     const CHARSET_ANSI_THAI                 = 0xDD;
 65:     const CHARSET_ANSI_LATIN_II             = 0xEE;
 66:     const CHARSET_OEM_LATIN_I               = 0xFF;
 67: 
 68:     //  XXX: Constants created!
 69:     /** Font filenames */
 70:     const ARIAL                             = 'arial.ttf';
 71:     const ARIAL_BOLD                        = 'arialbd.ttf';
 72:     const ARIAL_ITALIC                      = 'ariali.ttf';
 73:     const ARIAL_BOLD_ITALIC                 = 'arialbi.ttf';
 74: 
 75:     const CALIBRI                           = 'CALIBRI.TTF';
 76:     const CALIBRI_BOLD                      = 'CALIBRIB.TTF';
 77:     const CALIBRI_ITALIC                    = 'CALIBRII.TTF';
 78:     const CALIBRI_BOLD_ITALIC               = 'CALIBRIZ.TTF';
 79: 
 80:     const COMIC_SANS_MS                     = 'comic.ttf';
 81:     const COMIC_SANS_MS_BOLD                = 'comicbd.ttf';
 82: 
 83:     const COURIER_NEW                       = 'cour.ttf';
 84:     const COURIER_NEW_BOLD                  = 'courbd.ttf';
 85:     const COURIER_NEW_ITALIC                = 'couri.ttf';
 86:     const COURIER_NEW_BOLD_ITALIC           = 'courbi.ttf';
 87: 
 88:     const GEORGIA                           = 'georgia.ttf';
 89:     const GEORGIA_BOLD                      = 'georgiab.ttf';
 90:     const GEORGIA_ITALIC                    = 'georgiai.ttf';
 91:     const GEORGIA_BOLD_ITALIC               = 'georgiaz.ttf';
 92: 
 93:     const IMPACT                            = 'impact.ttf';
 94: 
 95:     const LIBERATION_SANS                   = 'LiberationSans-Regular.ttf';
 96:     const LIBERATION_SANS_BOLD              = 'LiberationSans-Bold.ttf';
 97:     const LIBERATION_SANS_ITALIC            = 'LiberationSans-Italic.ttf';
 98:     const LIBERATION_SANS_BOLD_ITALIC       = 'LiberationSans-BoldItalic.ttf';
 99: 
100:     const LUCIDA_CONSOLE                    = 'lucon.ttf';
101:     const LUCIDA_SANS_UNICODE               = 'l_10646.ttf';
102: 
103:     const MICROSOFT_SANS_SERIF              = 'micross.ttf';
104: 
105:     const PALATINO_LINOTYPE                 = 'pala.ttf';
106:     const PALATINO_LINOTYPE_BOLD            = 'palab.ttf';
107:     const PALATINO_LINOTYPE_ITALIC          = 'palai.ttf';
108:     const PALATINO_LINOTYPE_BOLD_ITALIC     = 'palabi.ttf';
109: 
110:     const SYMBOL                            = 'symbol.ttf';
111: 
112:     const TAHOMA                            = 'tahoma.ttf';
113:     const TAHOMA_BOLD                       = 'tahomabd.ttf';
114: 
115:     const TIMES_NEW_ROMAN                   = 'times.ttf';
116:     const TIMES_NEW_ROMAN_BOLD              = 'timesbd.ttf';
117:     const TIMES_NEW_ROMAN_ITALIC            = 'timesi.ttf';
118:     const TIMES_NEW_ROMAN_BOLD_ITALIC       = 'timesbi.ttf';
119: 
120:     const TREBUCHET_MS                      = 'trebuc.ttf';
121:     const TREBUCHET_MS_BOLD                 = 'trebucbd.ttf';
122:     const TREBUCHET_MS_ITALIC               = 'trebucit.ttf';
123:     const TREBUCHET_MS_BOLD_ITALIC          = 'trebucbi.ttf';
124: 
125:     const VERDANA                           = 'verdana.ttf';
126:     const VERDANA_BOLD                      = 'verdanab.ttf';
127:     const VERDANA_ITALIC                    = 'verdanai.ttf';
128:     const VERDANA_BOLD_ITALIC               = 'verdanaz.ttf';
129: 
130:     /**
131:      * AutoSize method
132:      *
133:      * @var string
134:      */
135:     private static $autoSizeMethod = self::AUTOSIZE_METHOD_APPROX;
136: 
137:     /**
138:      * Path to folder containing TrueType font .ttf files
139:      *
140:      * @var string
141:      */
142:     private static $trueTypeFontPath = null;
143: 
144:     /**
145:      * How wide is a default column for a given default font and size?
146:      * Empirical data found by inspecting real Excel files and reading off the pixel width
147:      * in Microsoft Office Excel 2007.
148:      *
149:      * @var array
150:      */
151:     public static $defaultColumnWidths = array(
152:         'Arial' => array(
153:              1 => array('px' => 24, 'width' => 12.00000000),
154:              2 => array('px' => 24, 'width' => 12.00000000),
155:              3 => array('px' => 32, 'width' => 10.66406250),
156:              4 => array('px' => 32, 'width' => 10.66406250),
157:              5 => array('px' => 40, 'width' => 10.00000000),
158:              6 => array('px' => 48, 'width' =>  9.59765625),
159:              7 => array('px' => 48, 'width' =>  9.59765625),
160:              8 => array('px' => 56, 'width' =>  9.33203125),
161:              9 => array('px' => 64, 'width' =>  9.14062500),
162:             10 => array('px' => 64, 'width' =>  9.14062500),
163:         ),
164:         'Calibri' => array(
165:              1 => array('px' => 24, 'width' => 12.00000000),
166:              2 => array('px' => 24, 'width' => 12.00000000),
167:              3 => array('px' => 32, 'width' => 10.66406250),
168:              4 => array('px' => 32, 'width' => 10.66406250),
169:              5 => array('px' => 40, 'width' => 10.00000000),
170:              6 => array('px' => 48, 'width' =>  9.59765625),
171:              7 => array('px' => 48, 'width' =>  9.59765625),
172:              8 => array('px' => 56, 'width' =>  9.33203125),
173:              9 => array('px' => 56, 'width' =>  9.33203125),
174:             10 => array('px' => 64, 'width' =>  9.14062500),
175:             11 => array('px' => 64, 'width' =>  9.14062500),
176:         ),
177:         'Verdana' => array(
178:              1 => array('px' => 24, 'width' => 12.00000000),
179:              2 => array('px' => 24, 'width' => 12.00000000),
180:              3 => array('px' => 32, 'width' => 10.66406250),
181:              4 => array('px' => 32, 'width' => 10.66406250),
182:              5 => array('px' => 40, 'width' => 10.00000000),
183:              6 => array('px' => 48, 'width' =>  9.59765625),
184:              7 => array('px' => 48, 'width' =>  9.59765625),
185:              8 => array('px' => 64, 'width' =>  9.14062500),
186:              9 => array('px' => 72, 'width' =>  9.00000000),
187:             10 => array('px' => 72, 'width' =>  9.00000000),
188:         ),
189:     );
190: 
191:     /**
192:      * Set autoSize method
193:      *
194:      * @param string $pValue
195:      * @return   boolean                    Success or failure
196:      */
197:     public static function setAutoSizeMethod($pValue = self::AUTOSIZE_METHOD_APPROX)
198:     {
199:         if (!in_array($pValue,self::$_autoSizeMethods)) {
200:             return FALSE;
201:         }
202: 
203:         self::$autoSizeMethod = $pValue;
204: 
205:         return TRUE;
206:     }
207: 
208:     /**
209:      * Get autoSize method
210:      *
211:      * @return string
212:      */
213:     public static function getAutoSizeMethod()
214:     {
215:         return self::$autoSizeMethod;
216:     }
217: 
218:     /**
219:      * Set the path to the folder containing .ttf files. There should be a trailing slash.
220:      * Typical locations on variout some platforms:
221:      *  <ul>
222:      *      <li>C:/Windows/Fonts/</li>
223:      *      <li>/usr/share/fonts/truetype/</li>
224:      *      <li>~/.fonts/</li>
225:      *  </ul>
226:      *
227:      * @param string $pValue
228:      */
229:     public static function setTrueTypeFontPath($pValue = '')
230:     {
231:         self::$trueTypeFontPath = $pValue;
232:     }
233: 
234:     /**
235:      * Get the path to the folder containing .ttf files.
236:      *
237:      * @return string
238:      */
239:     public static function getTrueTypeFontPath()
240:     {
241:         return self::$trueTypeFontPath;
242:     }
243: 
244:     /**
245:      * Calculate an (approximate) OpenXML column width, based on font size and text contained
246:      *
247:      * @param   PHPExcel_Style_Font         $font           Font object
248:      * @param   PHPExcel_RichText|string    $cellText       Text to calculate width
249:      * @param   integer                     $rotation       Rotation angle
250:      * @param   PHPExcel_Style_Font|NULL    $defaultFont    Font object
251:      * @return  integer     Column width
252:      */
253:     public static function calculateColumnWidth(PHPExcel_Style_Font $font, $cellText = '', $rotation = 0, PHPExcel_Style_Font $defaultFont = null) {
254: 
255:         // If it is rich text, use plain text
256:         if ($cellText instanceof PHPExcel_RichText) {
257:             $cellText = $cellText->getPlainText();
258:         }
259: 
260:         // Special case if there are one or more newline characters ("\n")
261:         if (strpos($cellText, "\n") !== false) {
262:             $lineTexts = explode("\n", $cellText);
263:             $lineWitdhs = array();
264:             foreach ($lineTexts as $lineText) {
265:                 $lineWidths[] = self::calculateColumnWidth($font, $lineText, $rotation = 0, $defaultFont);
266:             }
267:             return max($lineWidths); // width of longest line in cell
268:         }
269: 
270:         // Try to get the exact text width in pixels
271:         try {
272:             // If autosize method is set to 'approx', use approximation
273:             if (self::$autoSizeMethod == self::AUTOSIZE_METHOD_APPROX) {
274:                 throw new PHPExcel_Exception('AutoSize method is set to approx');
275:             }
276: 
277:             // Width of text in pixels excl. padding
278:             $columnWidth = self::getTextWidthPixelsExact($cellText, $font, $rotation);
279: 
280:             // Excel adds some padding, use 1.07 of the width of an 'n' glyph
281:             $columnWidth += ceil(self::getTextWidthPixelsExact('0', $font, 0) * 1.07); // pixels incl. padding
282: 
283:         } catch (PHPExcel_Exception $e) {
284:             // Width of text in pixels excl. padding, approximation
285:             $columnWidth = self::getTextWidthPixelsApprox($cellText, $font, $rotation);
286: 
287:             // Excel adds some padding, just use approx width of 'n' glyph
288:             $columnWidth += self::getTextWidthPixelsApprox('n', $font, 0);
289:         }
290: 
291:         // Convert from pixel width to column width
292:         $columnWidth = PHPExcel_Shared_Drawing::pixelsToCellDimension($columnWidth, $defaultFont);
293: 
294:         // Return
295:         return round($columnWidth, 6);
296:     }
297: 
298:     /**
299:      * Get GD text width in pixels for a string of text in a certain font at a certain rotation angle
300:      *
301:      * @param string $text
302:      * @param PHPExcel_Style_Font
303:      * @param int $rotation
304:      * @return int
305:      * @throws PHPExcel_Exception
306:      */
307:     public static function getTextWidthPixelsExact($text, PHPExcel_Style_Font $font, $rotation = 0) {
308:         if (!function_exists('imagettfbbox')) {
309:             throw new PHPExcel_Exception('GD library needs to be enabled');
310:         }
311: 
312:         // font size should really be supplied in pixels in GD2,
313:         // but since GD2 seems to assume 72dpi, pixels and points are the same
314:         $fontFile = self::getTrueTypeFontFileFromFont($font);
315:         $textBox = imagettfbbox($font->getSize(), $rotation, $fontFile, $text);
316: 
317:         // Get corners positions
318:         $lowerLeftCornerX  = $textBox[0];
319:         $lowerLeftCornerY  = $textBox[1];
320:         $lowerRightCornerX = $textBox[2];
321:         $lowerRightCornerY = $textBox[3];
322:         $upperRightCornerX = $textBox[4];
323:         $upperRightCornerY = $textBox[5];
324:         $upperLeftCornerX  = $textBox[6];
325:         $upperLeftCornerY  = $textBox[7];
326: 
327:         // Consider the rotation when calculating the width
328:         $textWidth = max($lowerRightCornerX - $upperLeftCornerX, $upperRightCornerX - $lowerLeftCornerX);
329: 
330:         return $textWidth;
331:     }
332: 
333:     /**
334:      * Get approximate width in pixels for a string of text in a certain font at a certain rotation angle
335:      *
336:      * @param string $columnText
337:      * @param PHPExcel_Style_Font $font
338:      * @param int $rotation
339:      * @return int Text width in pixels (no padding added)
340:      */
341:     public static function getTextWidthPixelsApprox($columnText, PHPExcel_Style_Font $font = null, $rotation = 0)
342:     {
343:         $fontName = $font->getName();
344:         $fontSize = $font->getSize();
345: 
346:         // Calculate column width in pixels. We assume fixed glyph width. Result varies with font name and size.
347:         switch ($fontName) {
348:             case 'Calibri':
349:                 // value 8.26 was found via interpolation by inspecting real Excel files with Calibri 11 font.
350:                 $columnWidth = (int) (8.26 * PHPExcel_Shared_String::CountCharacters($columnText));
351:                 $columnWidth = $columnWidth * $fontSize / 11; // extrapolate from font size
352:                 break;
353: 
354:             case 'Arial':
355:                 // value 7 was found via interpolation by inspecting real Excel files with Arial 10 font.
356:                 $columnWidth = (int) (7 * PHPExcel_Shared_String::CountCharacters($columnText));
357:                 $columnWidth = $columnWidth * $fontSize / 10; // extrapolate from font size
358:                 break;
359: 
360:             case 'Verdana':
361:                 // value 8 was found via interpolation by inspecting real Excel files with Verdana 10 font.
362:                 $columnWidth = (int) (8 * PHPExcel_Shared_String::CountCharacters($columnText));
363:                 $columnWidth = $columnWidth * $fontSize / 10; // extrapolate from font size
364:                 break;
365: 
366:             default:
367:                 // just assume Calibri
368:                 $columnWidth = (int) (8.26 * PHPExcel_Shared_String::CountCharacters($columnText));
369:                 $columnWidth = $columnWidth * $fontSize / 11; // extrapolate from font size
370:                 break;
371:         }
372: 
373:         // Calculate approximate rotated column width
374:         if ($rotation !== 0) {
375:             if ($rotation == -165) {
376:                 // stacked text
377:                 $columnWidth = 4; // approximation
378:             } else {
379:                 // rotated text
380:                 $columnWidth = $columnWidth * cos(deg2rad($rotation))
381:                                 + $fontSize * abs(sin(deg2rad($rotation))) / 5; // approximation
382:             }
383:         }
384: 
385:         // pixel width is an integer
386:         $columnWidth = (int) $columnWidth;
387:         return $columnWidth;
388:     }
389: 
390:     /**
391:      * Calculate an (approximate) pixel size, based on a font points size
392:      *
393:      * @param   int     $fontSizeInPoints   Font size (in points)
394:      * @return  int     Font size (in pixels)
395:      */
396:     public static function fontSizeToPixels($fontSizeInPoints = 11) {
397:         return (int) ((4 / 3) * $fontSizeInPoints);
398:     }
399: 
400:     /**
401:      * Calculate an (approximate) pixel size, based on inch size
402:      *
403:      * @param   int     $sizeInInch Font size (in inch)
404:      * @return  int     Size (in pixels)
405:      */
406:     public static function inchSizeToPixels($sizeInInch = 1) {
407:         return ($sizeInInch * 96);
408:     }
409: 
410:     /**
411:      * Calculate an (approximate) pixel size, based on centimeter size
412:      *
413:      * @param   int     $sizeInCm   Font size (in centimeters)
414:      * @return  int     Size (in pixels)
415:      */
416:     public static function centimeterSizeToPixels($sizeInCm = 1) {
417:         return ($sizeInCm * 37.795275591);
418:     }
419: 
420:     /**
421:      * Returns the font path given the font
422:      *
423:      * @param PHPExcel_Style_Font
424:      * @return string Path to TrueType font file
425:      */
426:     public static function getTrueTypeFontFileFromFont($font) {
427:         if (!file_exists(self::$trueTypeFontPath) || !is_dir(self::$trueTypeFontPath)) {
428:             throw new PHPExcel_Exception('Valid directory to TrueType Font files not specified');
429:         }
430: 
431:         $name       = $font->getName();
432:         $bold       = $font->getBold();
433:         $italic     = $font->getItalic();
434: 
435:         // Check if we can map font to true type font file
436:         switch ($name) {
437:             case 'Arial':
438:                 $fontFile = (
439:                     $bold ? ($italic ? self::ARIAL_BOLD_ITALIC : self::ARIAL_BOLD)
440:                           : ($italic ? self::ARIAL_ITALIC : self::ARIAL)
441:                 );
442:                 break;
443: 
444:             case 'Calibri':
445:                 $fontFile = (
446:                     $bold ? ($italic ? self::CALIBRI_BOLD_ITALIC : self::CALIBRI_BOLD)
447:                           : ($italic ? self::CALIBRI_ITALIC : self::CALIBRI)
448:                 );
449:                 break;
450: 
451:             case 'Courier New':
452:                 $fontFile = (
453:                     $bold ? ($italic ? self::COURIER_NEW_BOLD_ITALIC : self::COURIER_NEW_BOLD)
454:                           : ($italic ? self::COURIER_NEW_ITALIC : self::COURIER_NEW)
455:                 );
456:                 break;
457: 
458:             case 'Comic Sans MS':
459:                 $fontFile = (
460:                     $bold ? self::COMIC_SANS_MS_BOLD : self::COMIC_SANS_MS
461:                 );
462:                 break;
463: 
464:             case 'Georgia':
465:                 $fontFile = (
466:                     $bold ? ($italic ? self::GEORGIA_BOLD_ITALIC : self::GEORGIA_BOLD)
467:                           : ($italic ? self::GEORGIA_ITALIC : self::GEORGIA)
468:                 );
469:                 break;
470: 
471:             case 'Impact':
472:                 $fontFile = self::IMPACT;
473:                 break;
474: 
475:             case 'Liberation Sans':
476:                 $fontFile = (
477:                     $bold ? ($italic ? self::LIBERATION_SANS_BOLD_ITALIC : self::LIBERATION_SANS_BOLD)
478:                           : ($italic ? self::LIBERATION_SANS_ITALIC : self::LIBERATION_SANS)
479:                 );
480:                 break;
481: 
482:             case 'Lucida Console':
483:                 $fontFile = self::LUCIDA_CONSOLE;
484:                 break;
485: 
486:             case 'Lucida Sans Unicode':
487:                 $fontFile = self::LUCIDA_SANS_UNICODE;
488:                 break;
489: 
490:             case 'Microsoft Sans Serif':
491:                 $fontFile = self::MICROSOFT_SANS_SERIF;
492:                 break;
493: 
494:             case 'Palatino Linotype':
495:                 $fontFile = (
496:                     $bold ? ($italic ? self::PALATINO_LINOTYPE_BOLD_ITALIC : self::PALATINO_LINOTYPE_BOLD)
497:                           : ($italic ? self::PALATINO_LINOTYPE_ITALIC : self::PALATINO_LINOTYPE)
498:                 );
499:                 break;
500: 
501:             case 'Symbol':
502:                 $fontFile = self::SYMBOL;
503:                 break;
504: 
505:             case 'Tahoma':
506:                 $fontFile = (
507:                     $bold ? self::TAHOMA_BOLD : self::TAHOMA
508:                 );
509:                 break;
510: 
511:             case 'Times New Roman':
512:                 $fontFile = (
513:                     $bold ? ($italic ? self::TIMES_NEW_ROMAN_BOLD_ITALIC : self::TIMES_NEW_ROMAN_BOLD)
514:                           : ($italic ? self::TIMES_NEW_ROMAN_ITALIC : self::TIMES_NEW_ROMAN)
515:                 );
516:                 break;
517: 
518:             case 'Trebuchet MS':
519:                 $fontFile = (
520:                     $bold ? ($italic ? self::TREBUCHET_MS_BOLD_ITALIC : self::TREBUCHET_MS_BOLD)
521:                           : ($italic ? self::TREBUCHET_MS_ITALIC : self::TREBUCHET_MS)
522:                 );
523:                 break;
524: 
525:             case 'Verdana':
526:                 $fontFile = (
527:                     $bold ? ($italic ? self::VERDANA_BOLD_ITALIC : self::VERDANA_BOLD)
528:                           : ($italic ? self::VERDANA_ITALIC : self::VERDANA)
529:                 );
530:                 break;
531: 
532:             default:
533:                 throw new PHPExcel_Exception('Unknown font name "'. $name .'". Cannot map to TrueType font file');
534:                 break;
535:         }
536: 
537:         $fontFile = self::$trueTypeFontPath . $fontFile;
538: 
539:         // Check if file actually exists
540:         if (!file_exists($fontFile)) {
541:             throw New PHPExcel_Exception('TrueType Font file not found');
542:         }
543: 
544:         return $fontFile;
545:     }
546: 
547:     /**
548:      * Returns the associated charset for the font name.
549:      *
550:      * @param string $name Font name
551:      * @return int Character set code
552:      */
553:     public static function getCharsetFromFontName($name)
554:     {
555:         switch ($name) {
556:             // Add more cases. Check FONT records in real Excel files.
557:             case 'EucrosiaUPC':     return self::CHARSET_ANSI_THAI;
558:             case 'Wingdings':       return self::CHARSET_SYMBOL;
559:             case 'Wingdings 2':     return self::CHARSET_SYMBOL;
560:             case 'Wingdings 3':     return self::CHARSET_SYMBOL;
561:             default:                return self::CHARSET_ANSI_LATIN;
562:         }
563:     }
564: 
565:     /**
566:      * Get the effective column width for columns without a column dimension or column with width -1
567:      * For example, for Calibri 11 this is 9.140625 (64 px)
568:      *
569:      * @param PHPExcel_Style_Font $font The workbooks default font
570:      * @param boolean $pPixels true = return column width in pixels, false = return in OOXML units
571:      * @return mixed Column width
572:      */
573:     public static function getDefaultColumnWidthByFont(PHPExcel_Style_Font $font, $pPixels = false)
574:     {
575:         if (isset(self::$defaultColumnWidths[$font->getName()][$font->getSize()])) {
576:             // Exact width can be determined
577:             $columnWidth = $pPixels ?
578:                 self::$defaultColumnWidths[$font->getName()][$font->getSize()]['px']
579:                     : self::$defaultColumnWidths[$font->getName()][$font->getSize()]['width'];
580: 
581:         } else {
582:             // We don't have data for this particular font and size, use approximation by
583:             // extrapolating from Calibri 11
584:             $columnWidth = $pPixels ?
585:                 self::$defaultColumnWidths['Calibri'][11]['px']
586:                     : self::$defaultColumnWidths['Calibri'][11]['width'];
587:             $columnWidth = $columnWidth * $font->getSize() / 11;
588: 
589:             // Round pixels to closest integer
590:             if ($pPixels) {
591:                 $columnWidth = (int) round($columnWidth);
592:             }
593:         }
594: 
595:         return $columnWidth;
596:     }
597: 
598:     /**
599:      * Get the effective row height for rows without a row dimension or rows with height -1
600:      * For example, for Calibri 11 this is 15 points
601:      *
602:      * @param PHPExcel_Style_Font $font The workbooks default font
603:      * @return float Row height in points
604:      */
605:     public static function getDefaultRowHeightByFont(PHPExcel_Style_Font $font)
606:     {
607:         switch ($font->getName()) {
608:             case 'Arial':
609:                 switch ($font->getSize()) {
610:                     case 10:
611:                         // inspection of Arial 10 workbook says 12.75pt ~17px
612:                         $rowHeight = 12.75;
613:                         break;
614: 
615:                     case 9:
616:                         // inspection of Arial 9 workbook says 12.00pt ~16px
617:                         $rowHeight = 12;
618:                         break;
619: 
620:                     case 8:
621:                         // inspection of Arial 8 workbook says 11.25pt ~15px
622:                         $rowHeight = 11.25;
623:                         break;
624: 
625:                     case 7:
626:                         // inspection of Arial 7 workbook says 9.00pt ~12px
627:                         $rowHeight = 9;
628:                         break;
629: 
630:                     case 6:
631:                     case 5:
632:                         // inspection of Arial 5,6 workbook says 8.25pt ~11px
633:                         $rowHeight = 8.25;
634:                         break;
635: 
636:                     case 4:
637:                         // inspection of Arial 4 workbook says 6.75pt ~9px
638:                         $rowHeight = 6.75;
639:                         break;
640: 
641:                     case 3:
642:                         // inspection of Arial 3 workbook says 6.00pt ~8px
643:                         $rowHeight = 6;
644:                         break;
645: 
646:                     case 2:
647:                     case 1:
648:                         // inspection of Arial 1,2 workbook says 5.25pt ~7px
649:                         $rowHeight = 5.25;
650:                         break;
651: 
652:                     default:
653:                         // use Arial 10 workbook as an approximation, extrapolation
654:                         $rowHeight = 12.75 * $font->getSize() / 10;
655:                         break;
656:                 }
657:                 break;
658: 
659:             case 'Calibri':
660:                 switch ($font->getSize()) {
661:                     case 11:
662:                         // inspection of Calibri 11 workbook says 15.00pt ~20px
663:                         $rowHeight = 15;
664:                         break;
665: 
666:                     case 10:
667:                         // inspection of Calibri 10 workbook says 12.75pt ~17px
668:                         $rowHeight = 12.75;
669:                         break;
670: 
671:                     case 9:
672:                         // inspection of Calibri 9 workbook says 12.00pt ~16px
673:                         $rowHeight = 12;
674:                         break;
675: 
676:                     case 8:
677:                         // inspection of Calibri 8 workbook says 11.25pt ~15px
678:                         $rowHeight = 11.25;
679:                         break;
680: 
681:                     case 7:
682:                         // inspection of Calibri 7 workbook says 9.00pt ~12px
683:                         $rowHeight = 9;
684:                         break;
685: 
686:                     case 6:
687:                     case 5:
688:                         // inspection of Calibri 5,6 workbook says 8.25pt ~11px
689:                         $rowHeight = 8.25;
690:                         break;
691: 
692:                     case 4:
693:                         // inspection of Calibri 4 workbook says 6.75pt ~9px
694:                         $rowHeight = 6.75;
695:                         break;
696: 
697:                     case 3:
698:                         // inspection of Calibri 3 workbook says 6.00pt ~8px
699:                         $rowHeight = 6.00;
700:                         break;
701: 
702:                     case 2:
703:                     case 1:
704:                         // inspection of Calibri 1,2 workbook says 5.25pt ~7px
705:                         $rowHeight = 5.25;
706:                         break;
707: 
708:                     default:
709:                         // use Calibri 11 workbook as an approximation, extrapolation
710:                         $rowHeight = 15 * $font->getSize() / 11;
711:                         break;
712:                 }
713:                 break;
714: 
715:             case 'Verdana':
716:                 switch ($font->getSize()) {
717:                     case 10:
718:                         // inspection of Verdana 10 workbook says 12.75pt ~17px
719:                         $rowHeight = 12.75;
720:                         break;
721: 
722:                     case 9:
723:                         // inspection of Verdana 9 workbook says 11.25pt ~15px
724:                         $rowHeight = 11.25;
725:                         break;
726: 
727:                     case 8:
728:                         // inspection of Verdana 8 workbook says 10.50pt ~14px
729:                         $rowHeight = 10.50;
730:                         break;
731: 
732:                     case 7:
733:                         // inspection of Verdana 7 workbook says 9.00pt ~12px
734:                         $rowHeight = 9.00;
735:                         break;
736: 
737:                     case 6:
738:                     case 5:
739:                         // inspection of Verdana 5,6 workbook says 8.25pt ~11px
740:                         $rowHeight = 8.25;
741:                         break;
742: 
743:                     case 4:
744:                         // inspection of Verdana 4 workbook says 6.75pt ~9px
745:                         $rowHeight = 6.75;
746:                         break;
747: 
748:                     case 3:
749:                         // inspection of Verdana 3 workbook says 6.00pt ~8px
750:                         $rowHeight = 6;
751:                         break;
752: 
753:                     case 2:
754:                     case 1:
755:                         // inspection of Verdana 1,2 workbook says 5.25pt ~7px
756:                         $rowHeight = 5.25;
757:                         break;
758: 
759:                     default:
760:                         // use Verdana 10 workbook as an approximation, extrapolation
761:                         $rowHeight = 12.75 * $font->getSize() / 10;
762:                         break;
763:                 }
764:                 break;
765: 
766:             default:
767:                 // just use Calibri as an approximation
768:                 $rowHeight = 15 * $font->getSize() / 11;
769:                 break;
770:         }
771: 
772:         return $rowHeight;
773:     }
774: 
775: }
776: 
Autene API documentation generated by ApiGen