訊息一旦超過幾千則,「列印整段對話」就不再是功能清單上的一個勾選項,而是一個工程問題。很多人吃了苦頭才發現這一點:論壇裡到處是永遠卡住的輸出、第 500 頁之後全是空白頁的輸出,或乾脆當掉的輸出。我們也是吃了苦頭才發現的,所以以下說明內部實際發生了什麼,以及讓一段 84,000 則訊息的對話能夠列印需要做些什麼。
為什麼長對話會讓輸出工具出問題
幾乎每一個產生漂亮紀錄的工具,包括我們自己的,最後都要讓瀏覽器引擎來排版對話並分頁。瀏覽器列印引擎是為網頁設計的,而不是為一份包含多年訊息和數千張照片的單一文件設計的。讓它一次完成分頁,就會依序出現三個越來越嚴重的問題:耗時極長;記憶體吃緊時悄悄輸出空白頁;最後算繪程序記憶體耗盡而當掉。一份影響了我們工作的實際回報:一次 8,400 則訊息的輸出產生了 811 頁的 PDF,從第 583 頁起全是空白。引擎沒有報錯,只是停止繪製。
行得通的做法:分段、檢查、合併
- 分段。紀錄每次最多算繪 1,500 則訊息,每次都列印到獨立的分段檔案。任何一次都不會大到碰上極限。
- 空白頁檢查。每個分段寫出後都會檢查:如果引擎什麼也沒繪製,就捨棄該分段並重試;仍然無法繪製的分段會一分為二再試。空白輸出不可能進入最終文件。
- 強化的合併。各分段會被接成一個 PDF,合併後的檔案在寫出時會針對真實 PDF 閱讀器在意的各種錯誤進行檢查。檢查中的每一條規則,都來自一次真實損壞的輸出給我們的教訓;像 Acrobat 這樣嚴格的閱讀器,會拒絕寬鬆閱讀器照樣能打開的檔案。
- 如實標示,而不是假裝完整。多段輸出會在頁首寫明「第 3 部分,共 9 部分,第 12,001 至 13,500 則訊息,共 84,000 則」。如果有任何內容被省略,文件會寫明。
數據
這一切的壓力測試,是一位真實使用者的 84,000 則訊息對話,多年的簡訊,到處都是照片。它能輸出為一份完整、好讀的 PDF。說說規模:同一段對話在早期版本中輸出為 1.05 GB;現在的引擎產生的檔案只有 164 MB,而一段照片很多的 2,500 則訊息對話,在一台普通桌機上大約 17 秒就能輸出。
真正印出來
誠實說明一點:列印對話框本身也有和任何瀏覽器引擎一樣的一次處理限制,所以對於非常長的對話,Text2Store 會引導您使用輸出 > PDF…,而不是讓對話框失敗,然後您從 PDF 列印全部或只列印需要的頁面。逐步說明見把 iPhone 簡訊輸出為 PDF,整篇內容的簡短版本見列印 iPhone 簡訊。
有問題嗎?
寄信到 hello@text2store.com。如果您有一段懷疑太大的對話,我們真心很想聽聽。