ホームページ バックエンド開発 PHPチュートリアル PHPWord の中国語の文字化けの解決、中国語フォントの設定、および使用上の一般的な問題

PHPWord の中国語の文字化けの解決、中国語フォントの設定、および使用上の一般的な問題

Jun 06, 2017 pm 01:39 PM
PHPのスキル

PHPWord での中国語の文字化けの解決、中国語フォントの設定、および一般的な使用上の問題

最近のプロジェクト開発では、Word ドキュメントをエクスポートするために PHP テクノロジを使用する必要がありました。最初は、ActiveX/ を使用することでした。 Word.Application などの COM コンポーネントには、高い形式互換性という利点があり、純粋な doc Word2003 形式のドキュメントを生成できるという利点があります。欠点は、より多くのリソースを消費することです (呼び出しにより WINWORD.EXE プロセスが開始されます)。また、マルチユーザーの Web ユーザーには適していません。第 2 に、PHP などのほとんどの Web 開発テクノロジは Linux サーバー上で実行できず、プラットフォームの移植性と互換性も良好ではありません。 Word を生成する 2 番目の方法は、Word と互換性のある Web ページ形式を生成して、それを Word で開くことです。この方法は、結局のところ、ファイル形式が HTML であるため、形式の互換性が良くありません。利点は、サーバー リソースを節約し、迅速に生成できることです。最後の解決策は、PHPWord を使用して Word2007 (docx) 形式でドキュメントを生成することです。現在、基本的に Microsoft Office Word 2003 以降のバージョンはこの形式と互換性があります。バージョンに関しては、互換性のある形式のパッケージ (ダウンロード アドレス) をダウンロードしてインストールするだけで済みます。もちろん、最新バージョンの Office (Office 2007 を含むがこれに限定されません) を使用している場合は、そのようなファイルを通常どおり開くことができます。 2010) の場合、この形式のパッケージをインストールする必要はありません。

それでは、PHPWord を紹介します。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);
}
ログイン後にコピー

呼び出しメソッドは次のとおりです:

/**
 * 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;
}
ログイン後にコピー

上記のコードは主にテンプレートの問題を解決します。以下の同じ理由で、コード $givenText = utf8_encode($text); を検索し、このコード行を削除またはコメント アウトして、$givenText = iconv(' を追加します。 gbk', 'utf-8', $text); たとえば、コードは次のとおりです:

呼び出しメソッドは上記のテンプレート呼び出しと似ているため、ここにはリストされません。

苦労した結果、インターネット上に 別のバージョンの PhpWord があることを発見しました。プロジェクトのクラス名は、PHPOffice/PHPWord のものです。 GitHub プロジェクトのアドレス (ドキュメント) 。このバージョンの PHPWord には、より豊富なコンテンツがあり、より多くの機能 (行間、インデント、最初の行のインデントなど) がサポートされています。また、このバージョンの PHPWord は API インターフェイスであることも注目に値します。基本的には同じであり、普遍的に使用できます。ただし、一部の API は PHPOffice/PHPWord では推奨されません。たとえば、createSection を addSection に変更する必要があります。また、このバージョンの PHPWord を適用するには、上記のような中国語サポートの変更 は必要ありません。トラブルフリー。

これら 2 つの 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路径下
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP でのファイルのアップロードおよびダウンロード手法の詳細な説明 PHP でのファイルのアップロードおよびダウンロード手法の詳細な説明 Jun 25, 2023 pm 05:57 PM

PHP は、Web サイト開発で広く使用されている非常に人気のあるサーバー側プログラミング言語です。中でもファイルのアップロードとダウンロードはWebサイトでよく使われる機能の1つであり、PHPはこれらの機能を実現するための機能や技術を豊富に提供しています。この記事では、ウェブサイトをより効率的に開発できるように、PHP でのファイルのアップロードとダウンロードのテクニックを詳しく紹介します。ファイルのアップロード ファイルのアップロードとは、ローカル コンピュータからリモート サーバーにファイルを送信することを指し、ファイルをアップロードした後、これらのファイルを保存、処理、表示できます。 PHPの場合

PHP Kuaishou API インターフェース呼び出しスキル: インターフェースから返されたエラー情報の処理方法 PHP Kuaishou API インターフェース呼び出しスキル: インターフェースから返されたエラー情報の処理方法 Jul 20, 2023 pm 11:22 PM

PHP Kuaishou API インターフェイス呼び出しのヒント: インターフェイスから返されるエラー情報の処理方法 PHP を使用して Kuaishou API インターフェイスを呼び出すと、インターフェイスがエラーを返す状況がよく発生します。処理インターフェイスから返されたエラー情報については、アプリケーションの安定性とユーザー エクスペリエンスを向上させるために、適切な処理とフィードバックを提供する必要があります。この記事では、インターフェイスから返されるエラー情報を処理するためのいくつかの手法を紹介し、対応するコード例を示します。 try-catch を使用して例外をキャッチします。API インターフェイスを呼び出すときに、いくつかの例外エラーが発生する場合があります。

PHPにおけるページング技術のフレームワークへの応用方法を詳しく解説 PHPにおけるページング技術のフレームワークへの応用方法を詳しく解説 Jun 09, 2023 am 11:40 AM

インターネットの急速な発展に伴い、ユーザーのブラウジング エクスペリエンスを向上させるためにデータ ページング機能を実装する必要がある Web サイトがますます増えています。 Web開発においてPHPは最も人気のあるサーバーサイドプログラミング言語の1つであり、データページング機能はPHP開発において欠かせない技術です。この記事では、フレームワークにおける PHP のページング テクノロジの適用方法を紹介し、さまざまなページング ソリューションの長所と短所を比較します。 1. 従来の PHP ページング手法 従来の PHP 開発では、データ ページング機能を実装するには大量のコードを記述する必要があり、それを各ページで繰り返す必要がありました。

PHP プログラミングのヒント: 画像のスケーリングを処理する方法 PHP プログラミングのヒント: 画像のスケーリングを処理する方法 Aug 19, 2023 am 10:36 AM

PHP プログラミング スキル: 画像のスケーリングを処理する方法 最新の Web デザインでは、画像は不可欠な部分であり、画像のスケーリングは一般的な操作の 1 つです。画像のコレクションを表示する場合でも、さまざまなサイズのデバイスのニーズに対応する場合でも、画像のスケーリングは重要な役割を果たします。この記事では、PHP プログラミング言語を使用して画像のスケーリングを処理する方法を紹介し、参考用のコード例を添付します。 1. 画像のスケーリングに GD ライブラリを使用する GD ライブラリは PHP の強力な画像処理ライブラリであり、画像のスケーリング機能を実装するために使用できます。まず、確認してください

PHP プログラミングのヒント: 配列内の欠落している数値をすばやく見つける方法 PHP プログラミングのヒント: 配列内の欠落している数値をすばやく見つける方法 Mar 01, 2024 pm 04:27 PM

PHP プログラミングのヒント: 配列内で欠落している数値をすばやく見つける方法 プログラミングでは、配列内で特定の数値が欠落しているかどうかを確認する必要がある状況によく遭遇します。現時点では、欠落している数値をタイムリーに処理できるように、配列内で欠落している数値を見つけ出す迅速かつ効果的な方法が必要です。この記事では、PHP ベースのプログラミング手法を紹介し、具体的なコード例を使用して、配列内の欠落している数値をすばやく見つける方法を示します。 1. 方法 1: ループを使用して配列を走査する まず、配列をループして、配列内の欠落している数値をチェックします。具体的な手順

PHP での改行の置換の詳細については、こちらをご覧ください。 PHP での改行の置換の詳細については、こちらをご覧ください。 Mar 20, 2024 pm 06:42 PM

PHP での改行の置換は、実際の開発、特にテキスト データを処理する場合によく発生する問題です。改行文字はオペレーティング システムによって表現方法が異なる場合があります。通常、Windows システムでは ""、Linux システムでは "" が使用されます。したがって、テキスト データが通常の形式であることを保証するために、改行を均一に処理する必要があります。この記事では、PHP で改行を置換する手法を詳しく説明し、具体的なコード例を示します。 1. PHP 組み込み関数を使用して改行を処理する PHP にはいくつかの組み込み関数が用意されています。

PHP の高度な同時処理スキルの分析 PHP の高度な同時処理スキルの分析 Aug 10, 2023 pm 06:53 PM

PHP の高度な同時処理スキルの分析 インターネットの発展に伴い、Web サイトへの同時アクセスの要件はますます高くなっています。 Web サイト開発用のプログラミング言語である PHP には、同時アクセスの負荷が高い場合にパフォーマンスと安定性を向上させるための特別な処理スキルが必要です。この記事では、PHP の高度な同時処理手法をいくつか紹介し、コード例を示します。 PHP-FPMPHP-FPM (FastCGIProcessManager) は、PHP によって公式に提供されているプロセス マネージャーです。

50の機能実装スキルをマスターし、PHP開発での経験を共有 50の機能実装スキルをマスターし、PHP開発での経験を共有 Nov 22, 2023 pm 04:51 PM

50の機能実装スキルをマスターし、PHP開発における経験を共有 PHP開発者として、効率的かつ高品質なコード実装を常に追求します。開発効率とコード品質を向上させるためには、さまざまな複雑な開発ニーズや課題に対処するための経験とスキルを蓄積する必要があります。この記事では、PHP 開発の旅を進めるすべての人に役立つことを願って、さまざまな機能を実装するための 50 の PHP 開発のヒントと経験を共有します。適切なフレームワークを使用する: 自分に合った PHP フレームワークを選択し、慣れることで、開発効率が向上し、

See all articles