亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

phpword插件導出word文件時中文亂碼問題處理方案

2020-03-22 19:47:37
字體:
來源:轉載
供稿:網友
最近一個項目開發要用到PHP技術導出html' target='_blank'>Word文檔,比較了幾種方案,首先是使用Microsoft Office自帶的ActiveX/COM組件,比如Word.Application,這種方式的優點是格式兼容度高,可以生成純doc的Word2003格式文檔,缺點一是比較占資源(調用會啟動一個WINWORD.EXE進程),不適合Web多用戶訪問使用;二是PHP這種Web開發技術大多數是跑在Linux服務器上,當然也就無法使用Windows下的技術了,平臺可移植和兼容性不好。第二種生成Word的方案是生成Word兼容的網頁格式,然后以Word方式打開,這種方案總體上感覺怪怪的,畢竟文件格式是HTML的,而且格式兼容度不好,不過這種方式的優點是節省服務器資源,能夠快速生成;最后一種方案也就是今天的主角,采用PHPWord生成Word2007(docx)格式的文檔,現在基本上微軟Office Word 2003以后的版本均兼容這種格式了,對于2003版本來說,僅需要下載安裝個兼容格式包(下載地址),也能正常打開這類文件,當然如果你使用的是最新版本的Office(包括但不限于Office 2007、Office 2010)則不需要安裝此格式包。好了,下面我就介紹一下PHPWord,大家可以通過訪問項目主頁下載并獲得關于項目的更多信息。我在使用過程中主要遇到了中文亂碼的問題,結合網上大神們的指導,通過下面的方式解決了這類問題,希望對大家有所幫助。1、增加東亞字體支持打開并編輯路徑/Writer/Word2007/Base.php文件內容,大概在第349行(行數隨著版本可能會有變化)大概函數_writeTextStyle內添加:$objWriter- writeAttribute('w:eastAsia', $font)
比如我的修改片段基本是下面這樣:// Fontif($font != 'Arial') { $objWriter- startElement('w:rFonts'); $objWriter- writeAttribute('w:eastAsia', $font); // 添加這行 $objWriter- writeAttribute('w:ascii', $font); $objWriter- writeAttribute('w:hAnsi', $font); $objWriter- writeAttribute('w:cs', $font); $objWriter- endElement();2. 解決中文亂碼問題編輯PHPWord/Template.php,找到代碼$replace = utf8_encode($replace);,刪除或者注釋掉這行代碼,添加$replace = iconv( 'gbk','utf-8', $replace);,比如代碼改為如下: * Set a Template value * @param mixed $search * @param mixed $replacepublic function setValue($search, $replace) { if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') { $search = '${'.$search.'}'; if(!is_array($replace)) { //$replace = utf8_encode($replace); $replace =iconv('gbk', 'utf-8', $replace); // 注釋掉上面行后添加這行 $this- _documentXML = str_replace($search, $replace, $this- _documentXML);
上面的代碼主要解決模板的問題,下面同樣的道理,解決Section添加文本的問題,找到代碼$givenText = utf8_encode($text);,刪除或者注釋掉這行代碼,添加$givenText = iconv('gbk', 'utf-8', $text);,比如代碼如下: * Add a Text Element * @param string $text * @param mixed $styleFont * @param mixed $styleParagraph * @return PHPWord_Section_Textpublic function addText($text, $styleFont = null, $styleParagraph = null) { //$givenText = utf8_encode($text); $givenText = iconv('gbk', 'utf-8', $text); // 注釋掉上面行后添加這行 $text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph); $this- _elementCollection[] = $text; return $text;調用方式和上面的模板調用大同小異,這邊就不列舉了。折騰了這么多,突然發現網上還有另外一個版本的PhpWord,項目類名大小寫上略有不同,隸屬于PHPOffice/PHPWord,GitHub項目地址(文檔)。這個版本的PHPWord內容更加豐富,支持的功能也比較多(包括行間距,縮進和首行縮進等),最后我也采取的這個版本的PHPWord,值得注意的是這兩個版本的PHPWord在API接口上基本一致,可以通用。但是有些API,在PHPOffice/PHPWord里是不推薦的,比如createSection需要改成addSection,另外應用這個版本的PHPWord不需要像上面那樣做任何中文支持的修改,比較省事。這兩個PHPWord項目的官方都提供了較詳細的使用例子和文檔,這里就不介紹了。最后提示的是:在模板模式下loadTemplate,只能使用setValue等模板操作方法,不能再添加段落或者段落修改了。這個略有不便。對于PHPOffice/PHPWord我提供一個簡單的例子供參考(當然官方例子更多):require_once 'PhpOffice/PhpWord/PhpWord.php'; // 包含頭文件use PhpOffice\PhpWord\Autoloader;use PhpOffice\PhpWord\Settings;use PhpOffice\PhpWord\IOFactory;require_once __DIR__ . '/PhpOffice/PhpWord/Autoloader.php';Autoloader::register();Settings::loadConfig();// Create a new PHPWord Object$PHPWord = new \PhpOffice\PhpWord\PhpWord();$PHPWordHelper= new \PhpOffice\PhpWord\Shared\Font();$PHPWord- setDefaultFontName('仿宋'); // 全局字體$PHPWord- setDefaultFontSize(16); // 全局字號為3號// 設置文檔的屬性,這些在對文檔右擊屬性可以看到,也可以省去這些步驟$properties = $PHPWord- getDocumentProperties();$properties- setCreator('張三'); // 創建者$properties- setCompany('某公司'); // 公司$properties- setTitle('某某文檔'); // 標題$properties- setDescription('http://wangye.org'); // 描述$properties- setLastModifiedBy('李四'); // 最后修改$properties- setCreated( time() ); // 創建時間$properties- setModified( time() ); // 修改時間// 添加3號仿宋字體到'FangSong16pt'留著下面使用$PHPWord- addFontStyle('FangSong16pt', array('name'= '仿宋', 'size'= 16));// 添加段落樣式到'Normal'以備下面使用$PHPWord- addParagraphStyle( 'Normal',array( 'align'= 'both', 'spaceBefore' = 0, 'spaceAfter' = 0, 'spacing'= $PHPWordHelper- pointSizeToTwips(2.8), 'lineHeight' = 1.19, // 行間距 'indentation' = array( // 首行縮進 'firstLine' = $PHPWordHelper- pointSizeToTwips(32)// Section樣式:上3.5厘米、下3.8厘米、左3厘米、右3厘米,頁腳3厘米// 注意這里厘米(centimeter)要轉換為twips單位$sectionStyle = array( 'orientation' = null, 'marginLeft' = $PHPWordHelper- centimeterSizeToTwips(3), 'marginRight' = $PHPWordHelper- centimeterSizeToTwips(3), 'marginTop' = $PHPWordHelper- centimeterSizeToTwips(3.5), 'marginBottom' = $PHPWordHelper- centimeterSizeToTwips(3.8), 'pageNumberingStart' = 1, // 頁碼從1開始 'footerHeight' = $PHPWordHelper- centimeterSizeToTwips(3),$section = $PHPWord- addSection($sectionStyle); // 添加一節// 下面這句是輸入文檔內容,注意這里用到了剛才我們添加的// 字體樣式FangSong16pt和段落樣式Normal$section- addText('文檔內容', 'FangSong16pt', 'Normal');$section- addTextBreak(1); // 新起一個空白段落$objWriter = IOFactory::createWriter($PHPWord, 'Word2007');$objWriter- save('/path/to/file'); // 保存到/path/to/file路徑下總結1、用模板word生成word中文亂碼解決方案:打開phpword/Template.php文件,找到$replace = utf8_encode($replace);將其改為$replace =iconv('gbk', 'utf-8', $replace); 即可。
2、直接生成word文檔,調用addText對象時中文亂碼解決方案:打開phpword/Section.php文件,找到$givenText = utf8_encode($text);將其改為$givenText = iconv('gbk', 'utf-8', $text);即可。
3、貌似其他方法也類似第解決。
4、注意php文件采用gbk哦。反正我的顯示中文了。在網上找了好久,研究了半天才搞定。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久久久久| 中文字幕亚洲欧美日韩高清| 欧美一级高清免费播放| 92版电视剧仙鹤神针在线观看| 欧美激情成人在线视频| 国产精品自拍小视频| 日本精品视频在线播放| 国产一区av在线| 成人网址在线观看| 国产日韩欧美日韩| 国产精品久久久久久影视| 亚洲品质视频自拍网| 自拍亚洲一区欧美另类| 亚洲美女视频网| 亚洲精品一区二区三区婷婷月| 欧美国产精品人人做人人爱| 成人激情视频小说免费下载| 欧洲成人免费视频| 中日韩午夜理伦电影免费| 欧美成人激情视频| 91精品国产91| 国产中文欧美精品| 日韩在线视频二区| 久久免费精品视频| 国产丝袜一区视频在线观看| 欧美性69xxxx肥| 国产精品999999| 91社区国产高清| 欧美成人小视频| 日韩大陆欧美高清视频区| 亚洲精品98久久久久久中文字幕| 精品久久久久久亚洲国产300| 亚洲精品成人久久| 欧美极品美女视频网站在线观看免费| 亚洲老头老太hd| 亚洲欧美日韩中文在线| 国产精品一香蕉国产线看观看| 欧美大片欧美激情性色a∨久久| 久久久国产成人精品| 亚洲第一精品福利| 欧美性猛交xxxx免费看久久久| 亚洲无av在线中文字幕| 久久久久国产精品免费| 欧美福利视频在线| 91精品免费视频| 欧美性xxxx极品高清hd直播| 5566日本婷婷色中文字幕97| 亚洲精品福利在线| 国产成人精品电影久久久| 伊人精品在线观看| 亚洲最新中文字幕| 国外色69视频在线观看| 成人精品久久av网站| 日韩hd视频在线观看| 亚洲精品免费网站| 91老司机精品视频| 久久中文字幕视频| 国产精品色悠悠| 一区二区欧美激情| 美日韩丰满少妇在线观看| 国产精品永久免费视频| 欧美巨猛xxxx猛交黑人97人| 国外日韩电影在线观看| 亚洲欧美成人精品| 亚洲一区二区三区四区在线播放| 日韩中文字幕在线精品| 欧美激情视频在线免费观看 欧美视频免费一| 日本午夜在线亚洲.国产| 国产精品一区二区三| 97超级碰在线看视频免费在线看| 亚洲欧洲日产国产网站| 日韩免费观看视频| 国产精品成人品| 亚洲欧美精品伊人久久| 精品日本高清在线播放| 精品久久香蕉国产线看观看亚洲| 97超视频免费观看| 日本国产一区二区三区| 日韩在线视频观看| 久久久久久午夜| 91亚洲午夜在线| 国产成人精品一区二区在线| 国产999精品| 91在线观看免费网站| 国产成人精品999| 亚洲a区在线视频| 久久97久久97精品免视看| 亚洲美女久久久| 日韩激情av在线免费观看| 狠狠色噜噜狠狠狠狠97| 亚洲男人第一av网站| 韩国精品久久久999| 欧美成人在线网站| 欧美成人免费在线视频| 国产国产精品人在线视| 成人免费观看a| 韩国精品美女www爽爽爽视频| 欧美性猛交xxxx免费看漫画| 91亚洲精品一区二区| 日韩欧美在线观看| 尤物tv国产一区| 亚洲精品欧美日韩| 亚洲女人被黑人巨大进入| 成人免费福利在线| 91九色国产视频| 精品国产网站地址| 国产精品夜色7777狼人| 亚洲免费视频网站| 亚洲japanese制服美女| 91在线精品播放| 亚洲精品久久久久久久久久久久久| 日韩一区二区福利| 欧美亚洲免费电影| 国产精品91久久久久久| 国产午夜精品一区二区三区| 668精品在线视频| 久久成年人免费电影| 亚洲欧美在线一区二区| 爽爽爽爽爽爽爽成人免费观看| 中文字幕欧美视频在线| 欧美色另类天堂2015| 久久精品99国产精品酒店日本| 精品福利一区二区| 中文字幕亚洲欧美在线| 欧美电影免费观看大全| 国产亚洲一区二区在线| 精品中文字幕视频| 国模私拍一区二区三区| www.日韩系列| 久久影视电视剧凤归四时歌| 91av在线播放视频| 欧美亚洲视频一区二区| 久久韩剧网电视剧| 国产精品久久久av| 伊人久久久久久久久久久久久| 精品国产一区二区三区久久狼黑人| 欧美激情极品视频| 亚洲免费视频在线观看| 精品视频偷偷看在线观看| 人体精品一二三区| 亚洲男人天堂视频| 亚洲视频欧美视频| 亚洲精品国产福利| 日韩av免费看网站| 欧美日韩综合视频| 欧美极品欧美精品欧美视频| 国产在线精品播放| 亚洲香蕉av在线一区二区三区| 欧美激情一级欧美精品| 久久影视电视剧免费网站清宫辞电视| 国产成人精品免高潮费视频| 日韩麻豆第一页| 91精品在线国产| 亚洲精品美女在线观看播放| 亚洲美女激情视频| 亚洲免费影视第一页| 亚洲无限乱码一二三四麻| 日韩欧美在线网址| 在线日韩第一页| 久久成人av网站| 色综合老司机第九色激情| 国产精品xxx视频| 日韩亚洲精品视频| 国产精品福利在线观看网址|