phpword插件导出word文件时中文乱码问题处理方案
PHPWord是一个可以把相关文件生成word文档的插件了,但由于是老外开发的对于gbk支持不好,所以我们在导出带有中文的word时会出现乱码问题,下面本文就PHPWord中
最近一个项目开发要用到PHP技术导出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)
比如我的修改片段基本是下面这样:
// Font if($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 $replace */ public 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); }
调用方式如下:
$document->setValue('Template', iconv('utf-8', 'GB2312//IGNORE', '中文'));
上面的代码主要解决模板的问题,下面同样的道理,解决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_Text */ public 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哦。反正我的显示中文了。在网上找了好久,研究了半天才搞定。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Musik zu hören ist eine sehr alltägliche Sache. Ich glaube, dass viele Freunde es tun werden, egal wo sie sind. Mit welcher Software hören Sie normalerweise Musik? Nutzen Sie QQ Music wie ich? Ich verwende derzeit QQ Music zum Anhören von Liedern und es kann nicht nur auf Mobiltelefonen, sondern auch auf Mac-Computern verwendet werden. Zusätzlich zum Online-Hören von Liedern können wir unsere Lieblingslieder auch von QQ Music auf den Computer herunterladen. Die von QQ Music für Mac heruntergeladenen Songs haben jedoch nicht das von uns benötigte Format. Was wir brauchen, ist Musik im MP3-Format. Wie exportiert man die von QQ Music für Mac heruntergeladenen Songs in das MP3-Format? Wie exportiere und konvertiere ich von QQ Music für Mac heruntergeladene Songs in das MP3-Format? Wenn Sie von QQ Music für Mac heruntergeladene Songs in MP exportieren und konvertieren möchten

Methoden zur Lösung des chinesischen verstümmelten Problems von PHPDompdf PHPDompdf ist ein Tool zum Konvertieren von HTML-Dokumenten in PDF-Dateien. Es ist leistungsstark und einfach zu verwenden. Allerdings stößt man bei der Verarbeitung chinesischer Inhalte manchmal auf das Problem verstümmelter chinesischer Schriftzeichen. In diesem Artikel werden einige Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen in PHPDompdf vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Bei der Verwendung von Schriftartdateien zur Verarbeitung chinesischer Inhalte besteht ein häufiges Problem darin, dass Dompdf standardmäßig keine chinesischen Inhalte unterstützt.

Mit dem kontinuierlichen Aufstieg der sozialen Medien hat Douyin als beliebte Kurzvideoplattform eine große Anzahl von Nutzern angezogen. Auf Douyin können Nutzer nicht nur ihr Leben zeigen, sondern auch mit anderen Nutzern interagieren. In dieser Interaktion sind Emoticons für Benutzer nach und nach zu einer wichtigen Möglichkeit geworden, ihre Emotionen auszudrücken. 1. Wie erhalte ich Douyin-Emoticons für private Nachrichten auf WeChat? Um private Nachrichten-Emoticons auf der Douyin-Plattform zu erhalten, müssen Sie sich zunächst bei Ihrem Douyin-Konto anmelden und dann die Emoticons durchsuchen und auswählen, die Ihnen gefallen. Sie können sie an Freunde senden oder selbst sammeln. Nachdem Sie das Emoticon-Paket auf Douyin erhalten haben, können Sie über die private Nachrichtenschnittstelle lange auf das Emoticon-Paket drücken und dann die Funktion „Zum Emoticon hinzufügen“ auswählen. Auf diese Weise können Sie dieses Emoticon-Paket zur Emoticon-Bibliothek von Douyin hinzufügen. 3. Als nächstes müssen wir die Ausdrücke zur Douyin-Emoticon-Bibliothek hinzufügen

xmind ist eine sehr praktische Mind-Mapping-Software. Es handelt sich um eine Kartenform, die auf der Grundlage der Gedanken und Inspirationen von Menschen erstellt wurde. Nachdem wir die xmind-Datei erstellt haben, konvertieren wir sie normalerweise in ein PDF-Dateiformat, um die Verbreitung und Verwendung von xmind-Dateien zu erleichtern in PDF-Dateien? Nachfolgend finden Sie die spezifischen Schritte als Referenz. 1. Lassen Sie uns zunächst zeigen, wie Sie die Mind Map in ein PDF-Dokument exportieren. Wählen Sie die Funktionsschaltfläche [Datei]-[Exportieren]. 2. Wählen Sie in der neu angezeigten Benutzeroberfläche [PDF-Dokument] und klicken Sie auf die Schaltfläche [Weiter]. 3. Wählen Sie in der Exportschnittstelle Einstellungen aus: Papierformat, Ausrichtung, Auflösung und Speicherort des Dokuments. Klicken Sie nach Abschluss der Einstellungen auf die Schaltfläche [Fertig stellen]. 4. Wenn Sie auf die Schaltfläche [Fertig stellen] klicken

1. Öffnen Sie zunächst den zu bearbeitenden Entwurfsplan in Kujiale und klicken Sie auf die Konstruktionszeichnungen unter der Zeichnungsliste oben. 2. Klicken Sie dann, um den vollfarbigen Grundriss auszuwählen. 3. Blenden Sie dann die unnötigen Möbel in der Zeichnung aus und lassen Sie nur die Möbel übrig, die exportiert werden müssen. 4. Klicken Sie abschließend auf Herunterladen.

Die ultimative Methode zur Lösung des Problems verstümmelter chinesischer Zeichen in PyCharm erfordert spezifische Codebeispiele. Einführung: PyCharm ist eine häufig verwendete integrierte Entwicklungsumgebung (IDE) für Python und verfügt über leistungsstarke Funktionen und eine benutzerfreundliche Benutzeroberfläche Mehrheit der Entwickler. Wenn PyCharm jedoch chinesische Zeichen verarbeitet, kann es manchmal zu verstümmelten Zeichen kommen, was zu bestimmten Problemen bei der Entwicklung und beim Debuggen führt. In diesem Artikel wird vorgestellt, wie das chinesische verstümmelte Problem in PyCharm gelöst werden kann, und es werden spezifische Codebeispiele gegeben. 1. Richten Sie das Projekt ein

Häufige Gründe und Lösungen für verstümmelte chinesische Zeichen bei der MySQL-Installation MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem. Bei der Verwendung kann es jedoch zu Problemen mit verstümmelten chinesischen Zeichen kommen, die Entwicklern und Systemadministratoren Probleme bereiten. Das Problem verstümmelter chinesischer Zeichen wird hauptsächlich durch falsche Zeichensatzeinstellungen, inkonsistente Zeichensätze zwischen dem Datenbankserver und dem Client usw. verursacht. In diesem Artikel werden die häufigsten Ursachen und Lösungen für verstümmelte chinesische Zeichen bei der MySQL-Installation ausführlich vorgestellt, um allen zu helfen, dieses Problem besser zu lösen. 1. Häufige Gründe: Zeichensatzeinstellung

Die Anrufaufzeichnung im iPhone wird oft unterschätzt und ist eine der wichtigsten Funktionen des iPhone. Aufgrund ihrer Einfachheit ist diese Funktion von entscheidender Bedeutung und kann wichtige Erkenntnisse über die auf dem Gerät getätigten oder empfangenen Anrufe liefern. Ob für Arbeitszwecke oder für Gerichtsverfahren, die Möglichkeit, auf Anrufaufzeichnungen zuzugreifen, kann von unschätzbarem Wert sein. Vereinfacht ausgedrückt bezieht sich der Anrufverlauf auf die Einträge, die auf Ihrem iPhone erstellt werden, wenn Sie einen Anruf tätigen oder entgegennehmen. Diese Protokolle enthalten wichtige Informationen, einschließlich des Namens des Kontakts (oder der Nummer, falls nicht als Kontakt gespeichert), Zeitstempel, Dauer und Anrufstatus (gewählt, verpasst oder nicht angenommen). Sie sind eine prägnante Aufzeichnung Ihres Kommunikationsverlaufs. Der Anrufverlauf umfasst auf Ihrem iPhone gespeicherte Anrufverlaufsstreifen
