Googleドキュメントで作成したrtfファイルをHTMLに変換し、任意のクラスを付与する方法を紹介します。
詳細は下記内容をご確認ください。
目次
要約
googleドキュメントで作成されたrtfファイルをHTMLに変換し、任意のクラスを付与する
※実装すべての記述はしません
経緯
文量が多いブログ記事のようなページのため、見出しや本文などのクラスを振り分けて一括でHTMLに変換したい業務があったため個人用にツールを作成しました。
欲しかった機能
- 原稿からざっくり見出し2, 3, 本文をそのままコピペできる形に変換する
- 見出し2, 3に章ごとの連番でid出力
- 見出し2直下に画像用のコードを出力
- 太字/アンダーラインなどを固有のクラスをつけたspanで囲む
実装について
Googleドキュメントからダウンロードする際、HTML形式を選ぶとminifyされた状態でファイルが保存されるため、一旦rtfファイルでダウンロードしHTML形式へ変換する工程を挟んでいます。
当初、MacOS標準のtextutilでrtfファイルからhtmlへの変換を行っていましたが、ツール内での操作で完結させたかったため、npmパッケージのrtf.js( https://www.npmjs.com/package/rtf.js )を使用しています。
変換後の処理はPHPで行っています。
HTMLを配列に格納
rtfから変換されたHTMLの改行ごとにフォントサイズや太字箇所を判定し、配列へ格納します。
その際に不要なスタイルを削除し、また続いている文章が細切れになっている場合があるので結合します。
//フォントサイズを確認
preg_match('/font-size\:\s([\d]*)/', $value, $matches);
if(empty($matches)){
$this_fontsize = '';
}else{
$this_fontsize = $matches[1];
//初出のフォントサイズの場合数値を追加
if(!in_array($this_fontsize, $arr_fontsize, true)){
$arr_fontsize[] = $matches[1];
}
}太字箇所がfont-weight:bold;として出力されているため、一旦b要素で囲みます。
これは後に固有のクラスがついたspan要素に変換されます。
if(strpos($value, 'font-weight: bold;')){
$htmlTag_pattern = '[0-9a-zA-Z\s\'\"\=\-\:\;\(\)\,\.]*';
$bold_pattern = "<span${htmlTag_pattern}font-weight\: bold;${htmlTag_pattern}>";
$value = preg_replace("/${bold_pattern}(.*?)<\/span>/", '<b>$1</b>', $value);
//細切れになっている<b>を結合
$value = str_replace('</b><b>','', $value);
$value = strip_tags($value, '<b>');
}bタグ以外のHTMLを削除し、フォントサイズとともに本文を配列へ格納します。
//太字以外のspanを削除
$value = strip_tags($value, '<b>');
//出力配列に追加
$arr_text_formated[] = [
'font-size' => $this_fontsize,
'text' => $value
];$arr_text_formatedに記事の全体が格納されるため、各要素を見出しや本文などに判定して固有のクラスをつけます。
また見出し2・3には連番でidを振り、アンカーリンクで移動できるようにします。
//例:見出し2の場合
if($this_fontsize == $arr_fontsize[0]){
// 固有のクラスを設定
// 太字設定はは見出し用のクラスで設定されるためbタグは削除する
$this_text = strip_tags($this_text);
$text_formated = '<h2 '.$arr_web_class['h2'].' id="article'. $h2_num.'_0">'. $this_text . '</h2>';
// id用の連番を更新
$h2_num ++;
$h3_num = 1;
$result .= $text_formated;
continue;
}任意のHTMLタグ・クラスを設定した見出し・本文は$resultに結合し、file_put_contentsとreadfileでHTMLファイルで出力します。
躓いたところ
前述の通りGoogleドキュメントからダウンロードする際HTML形式を選択すると、すべてminifyされた状態でファイルが作成され、html_entity_decodeしない限り日本語が読めない状態でファイルが保存されるため内容の確認がしづらくなってしまいました。
そのため、rtf形式でダウンロードするのですが、その場合はrtfファイルからHTMLへの変換が必要になります。MacOSの使用者は標準で搭載されているtextutilを使用すればよいのですが、Windowsを使用している人が変換できないためパッケージやライブラリを使いツール内でファイル形式の変換から対応できるようにしました。
終わりに
Webページを作成する際、文量が多いほど抜け漏れや重複などのミスが起こり、また確認の時間も増えるため、一括で指定した形式に変換するツールによって時短を図りました。
一行一行確認しながらコピーペーストを行っていた場合と比べ、作業時間は約1/3になったため時短としては成功したと思います。
しかし個人で機能を増やしたり精査したりしているうちに、主な使用先であるオウンドメディアの運用がHTMLベタ打ちからCMSへ移行したため大体2週間でお役御免となりました。そういうこともあります。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(594)
-
イベント(237)
-
カルチャー(60)
-
デザイン(70)
TAG
- 5G
- AI
- AI TALK
- AI 機械学習強化学習
- AI/機械学習
- AIエージェント
- AIコーディング
- AI人財
- AI駆動
- Behind the Scenes
- BIT VALLEY
- blockchain
- ChatGPT
- ChatGPT Team
- Claude Team
- cloudflare
- cloudnative
- CNDO
- CNDT
- CODE BLUE
- ConoHa
- ConoHa VPS
- CSS
- CTF
- Designship
- developer
- DevRel
- DevSecOpsThon
- Docker
- DTF
- Engineering Journey
- expert
- EXPERT CROSS
- GMO AI&ロボティクス商事
- GMO AIR
- GMO DESIGN AWARD
- GMO Developers Day
- GMO Developers Night
- GMO Flatt Security
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOインターネット
- GMOインターネットグループ
- GMOインターネットグループ陸上部
- GMOグローバルサイン
- GMOコネクト
- GMOサイバーセキュリティ byイエラエ
- GMOデジキッズ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOメディア
- GMO大会議
- GMO天秤AI
- Go
- Good Morning
- GPUクラウド
- GTB
- Hack-1グランプリ
- iOS
- IoT
- ISUCON
- Japan Drone
- JapanDrone
- Java
- JJUG
- K8s
- Kaigi on Rails
- Kids VALLEY
- LLM
- MCP
- MetaMask
- MySQL
- NFT
- OpenStack
- Perl
- PHP
- PHPcon
- PHPerKaigi
- Python
- RPA
- Ruby
- SECCON
- Selenium
- Spectrum Tokyo Meetup
- splunk
- SRE
- Takumi byGMO
- Terraform
- TypeScript
- UI/UX
- vibe
- VPN
- VS Code
- XSS
- ZTNA
- アドベントカレンダー
- インターンシップ
- インハウス
- お名前.com
- クリエイターインタビュー
- クリエイティブ
- コンテナ
- サイバーセキュリティ
- サマーインターン
- スクラム
- スペシャリスト
- セキュリティ
- ソフトウェアサプライチェーン
- チームビルディング
- デザイン
- ネットのセキュリティもGMO
- ハーネスエンジニアリング
- バックエンド
- ヒューマノイド
- ヒューマノイドロボット
- プログラミング教育
- ブロックチェーン
- フロントエンド
- ゆめみらいワーク
- リモートワーク
- レンタルサーバー
- ロボット
- 京大ミートアップ
- 国際ロボット展
- 基礎
- 多拠点開発
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 技術広報
- 技術書典
- 新卒
- 新卒研修
- 映像
- 映像クリエイター
- 暗号
- 業務効率化
- 機械学習
- 決済
- 生成AI
- 脆弱性診断
- 開発者
PICKUP
-
デザインカンファレンス「Yoitoi Summit 2026」をGMOYours・フクラスにて開催!
デザイン
-
攻撃者優位の時代に問われる「使命感」 GMO Flatt Security&GMOサイバーセキュリティ byイエラエが描く、AI時代のセキュリティ構想(後編)ーEngineering Journey
技術情報
-
頂上と裾野の両方から「底上げ」 GMO Flatt Security&GMO サイバーセキュリティ byイエラエが支える、日本のサイバーセキュリティ(前編)ーEngineering Journey
技術情報
-
【開催レポート】八幡小学校 社会科見学 at GMO kitaQ
カルチャー
-
デザインコンテスト「GMO DESIGN AWARD 2026」開催決定!3年目のテーマは「トキメキ」
デザイン
-
ソフトウェアサプライチェーン攻撃から「エンジニアの背中」を守る。Takumi byGMO・「Guard」機能「Runner」機能 開発の舞台裏ーEngineering Journey
技術情報