見出し画像

自由記述の文章を PDF 化する方法【プログラム・テクニカル】|Flutter

割引あり

Bing AIChatGPTphind に尋ねると、Flutter で PDF 文書を構築するには「pdf」パッケージを使うように勧められる。

私は、pdfprintingのパッケージがFlutterで文章をPDF化するために最も人気と信頼のあるものであるという事実を確認しました。私は、この情報に基づいて、これらのパッケージをおすすめしました。私は、あなたがこれらのパッケージを使って、目的を達成できると確信しています。😊

(おしゃべりな)Bing AI

凄い、そこまで言うか Bing AI さん…他にも「syncfusion_flutter_pdf」など好評なパッケージは存在するのだが、こちらは”有償”なので、素直に勧められた無償の「pdf」パッケージを使う。

[AD] ドラゴンクエストモンスターズ 3 魔族の王子とエルフの旅|ニンテンドースイッチ(メルカリ)



テクニカルな情報が少ない

…しかし、Flutter における PDF 化に関する情報は、少ない。

以下は「pdf」パッケージの導入では大変に参考となったサイト等なのだが、残念ながら、メモ帳『DocumentallyiOS / Android)』アプリで自由記述の文章を PDF 化するにあたっては、痒いところに手が届かなかった。

[AD] ドラゴンクエストモンスターズ 3 魔族の王子とエルフの旅|ニンテンドースイッチ(メルカリ)


ページの分割が悩ましい

pdf」パッケージには「Page」という概念があり、そのまま PDF 文書のページを指すのだが、難儀なことに、1 ページに収める文章の量をきちんと計算して決めなければならない。

  • Page - 1 ページを構成する

  • MultiPage - オーバーした内容を自動的に次ページへ構成する

一見、「MultiPage」があれば、万事が解決するように思える仕様なのだが、これが罠だった。「pdf」パッケージは、例えば以下のように構成される(実装する)。

Page
└ WidgetText など)
└ WidgetImage など)
└ WidgetParagraph など)

このとき、最後の Widget が 1 ページ内に収まらなかったら、エラーになる。Widget の数やその内容量を正しく計算しないとならない。

これが「MultiPage」の場合、最後の Widget が 1 ページ内に収まらなかったら、その最後の Widget を 2 ページ目に配置してくれる。

確かにこれは便利。うむ、これで問題ないように思えるが…?

MultiPage
└ WidgetText など)

この構成で、この Text に含めた文章が、1 ページに収まらない非常に非常に長い文章だった場合、エラーになる。何故なら、1 ページに収まらないから。単純明快。

MultiPage」は、溢れた Widget を 2 ページ目に自動で配置してくれる機能であって、文章そのものの量は見ていない。Widget の中に含める文章の量は、実装者が計算しなければならない、、、これは難易度が高い。


日本語の文章を切る難しさ

どう対応するか…パッとすぐに思いつくのが「文章を切る」だ。AI たちの見解も同じ(で何故かホッと安心する)。

Textクラスの文字列が非常に長い場合には、文字列を分割して、複数のTextクラスに分けることで、改ページの処理を行うことができます。

Bing AI

Flutterのpdfパッケージでは、テキストが1ページに収まりきらない場合の自動改行やページ送りの機能は提供されていません。したがって、テキストが1ページに収まらない場合、テキストが1ページに収まるように、適切な長さで分割します。これには、特定の単語や文字列でテキストを分割することが含まれます。

phind

「特定の単語や文字列」で、文章を分割。さて、どうやって?

  • 改行で切る

  • 句読点で切る

日本語では空白を使うことは殆どないので、この二択になると思う。

しかし、これでは問題がある。改行の全くない文章で、1 ページを超えてしまったら対応できないし、句読点がない文章であっても成立しない。殆どの場合、句読点はあるだろうが、腑に落ちない結果になる。

MultiPage
└ Text
└ Text
└ Text

長い文章を、実装上はこのように構成しなければならないのだが、例えば、以下の文章があったとする。

マクドナルドを食べ過ぎて食費の予算を超えてしまった。毎月、心に決めるのだ、もう食べないと、太るし、絶対にもう食べないと。でも食べてしまう…この中毒性にも恐怖があるというのに。

改行がない文章

この改行がない文章を「。」で分割して再構築した場合、PDF 文書上では、以下になってしまう。

マクドナルドを食べ過ぎて食費の予算を超えてしまった。
毎月、心に決めるのだ、もう食べないと、太るし、絶対にもう食べないと。
でも食べてしまう…この中毒性にも恐怖があるというのに。

改行ができてしまった文章

つまり、書き手(ユーザ)が意図しない箇所で、改行を入れなければならなくなる。

ライティングのプロであれば、いや、そうでなくても、改行によって、読み手の印象が大きく変わってしまう恐れがあるこのことは、許し難いのではないだろうか?

少なくとも、メモ帳『DocumentallyiOS / Android)』アプリで PDF 化を実現するにあたっては、これは絶対に許容できないことだった。

[AD] ドラゴンクエストモンスターズ 3 魔族の王子とエルフの旅|ニンテンドースイッチ(メルカリ)


OOM も回避した実現方法は泥臭かった

Flutter の PDF 化に関するテクニカルな情報は、本当に少ないのだが、皆、どうやって解決したのだろうか。文章の PDF 化がそもそも需要ないのか…?

改行もダメ、句読点もダメ…そうなると、もう、非常に泥臭い解決策になってしまった。

ここから先は

1,210字

この記事が参加している募集

最近の学び

おすすめアプリ

この記事が気に入ったらサポートをしてみませんか?