国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > 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教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
香蕉视频在线观看www| 丁香婷婷激情| 91在线网站| 国产激情在线视频| 国产精品二线| 国产丝袜在线| 96精品视频| eeuss影院www在线播放| 男女午夜视频在线观看| 日本动漫理论片在线观看网站| 先锋av资源网| 91xxx在线观看| √天堂资源中文www| 精品全国在线一区二区| 男人操女人免费网站| 国产色在线播放| 先锋av资源网| 国产经典av| 国内精品免费一区二区三区| 在线一区观看| 天天av综合网| 亚洲成人福利| 国产小视频免费在线观看| 天天噜天天色| 日本中文字幕高清视频| 国产黄色片在线观看| www.蜜桃av| 怡红院av在线| 国产成人午夜| 国产视频青青| 国产美女被草| 欧美a免费在线| 91精品专区| 国产一级免费在线观看| 日本精品一区二区三区在线播放| 国产不卡在线| 国产黄在线看| 国产探花视频在线观看| 激情网站在线| 美女网站在线观看| 在线免费观看黄色av| 国产丝袜在线观看视频| 中文字幕人成高视频| 国产美女av| 午夜视频在线看| 成年网站免费入口在线观看| 久久精品最新免费国产成人| 亚洲视频在线网| 亚洲网站视频在线观看| 精品国产一区二区三区四区阿崩| 国产成人天天5g影院| 精品麻豆国产| 精品国产一区二区三区久久久狼牙 | 国产乱妇乱子在线播视频播放网站| 午夜在线不卡| 国产美女极品在线| 国产精品视频一区二区免费不卡| 国产寡妇树林野战在线播放| 国产a级网站| www.狠狠插| 中文字幕在线观看av| 中文字幕有码在线视频| 精品国产一区二区三区四区阿崩| 在线āv视频| 国产精品天堂| 伊人免费视频| 狠狠干在线视频| 国产区卡一卡二卡三乱码免费| 国产黄色片在线观看| 日本不卡影院| 国产成在线观看免费视频| 日本免费不卡| 国产福利视频在线| 日韩精品免费一区二区| 国产一级激情| 色综合久久五月天| 超碰免费在线| 99综合精品久久| 国产美女av在线| 一区二区三区免费视频网站| 国产免费av网站| 伊人网在线视频| 国产性色视频| 国产专区在线播放| a视频在线观看| 97高清视频| 国产午夜电影| 黄色三级视频在线观看| 性欧美精品xxxx| 亚洲综合在线网| 在线视频观看你懂的| 丁香视频免费观看| 久久久久久久久久久久久91| 一区二区精品区| 国产精品伦一区二区三区视频| 欧美高清视频| 啪啪免费视频一区| 日本韩国精品一区二区| 天天草天天草| 青青在线视频| 黄色av网站在线| 操人视频91| 欧美日韩在线视频免费观看| 国产免费人人看| 综合激情丁香| 亚洲最新永久观看在线| 免费a级毛片在线观看| 性网站在线播放| 香蕉视频在线观看网站| www.夜夜操| 毛片在线视频| 国产乱子视频| 国产特级毛片| 精品麻豆视频| 四虎一区二区三区| 不卡av免费观看| 国产69精品久久app免费版| 国产中文在线| 国产三级视频在线播放线观看| 国产精品理人伦一区二区三区 | 超碰国产在线观看| 超碰免费在线播放| 国产天堂av| 性色视频在线| 懂色av一区| 92国产在线视频| 国产中文字幕在线视频| 国产精品久久麻豆| 日韩中文字幕久久久经典网| 国产农村一级特黄α**毛片| 国产区在线观看| 人xxxx性xxxxx欧美| 尤物网在线观看| 国产精品入口麻豆免费观看| 日本福利午夜视频在线| 国产精品免费视频二三区| jizz国产| 91午夜在线| 天堂中文在线视频| 亚洲欧美综合乱码精品成人网| 浪潮av一区| 伊人影院在线播放| 国产精品久久久久永久免费看| 久草.com| 欧美亚洲系列| av中文天堂在线| 国产不卡视频| 国产精品99999| 国产美女在线一区二区三区| 香蕉视频网站在线观看| 99爱视频在线观看| 国产小视频在线高清播放| 青青艹在线视频| 在线一区观看| 国产福利在线观看| 国产三级在线| 国产小黄视频| 国产区卡一卡二卡三乱码免费| 久热国产在线视频| 欧美人成在线观看网站高清| 天天插天天操| 四虎成人精品在永久在线观看| 在线午夜视频| 精品福利影院| 精品国产一区二区三区四区阿崩| 2020国产在线视频| 2020中文字幕在线播放| 国产成人福利| 色综合久久五月天| av中文在线资源| 看成年女人免费午夜视频| 久久精品最新免费国产成人| 男人天堂v视频| 免费在线观看a| 最新中文字幕av专区| 国产精品福利视频一区二区三区| 国产经典av| www.xxx黄| www.99av| 国产视频福利在线| 在线观看视频污| 蜜桃av网站| 国产日韩欧美第一页| 在线视频1区2区| 国产裸舞福利在线视频合集| 91麻豆免费在线视频| 青青草在线免费观看| 国产乱视频在线观看| 国产成+人+亚洲+欧美+综合| 亚洲а∨精品天堂在线| 国产美女福利在线| 99在线视频影院| 丁香花视频在线观看| 中文字幕av中文字幕| 一区二区三区四区在线免费视频| www.香蕉视频在线观看| 国产一级黄色| 男人操女人免费网站| 国产福利电影在线| 国产在线视频精品视频免费看|