確實(shí)難度很大
PDF是基于PostScript子集渲染的,PostScript是一門圖靈完備的語(yǔ)言
而Word能實(shí)現(xiàn)的,實(shí)際上又是PDF能力的子集(不考慮各種插件的話),而且很巧的是Word是版式編輯轉(zhuǎn)PDF連排版都不用管
子集向父集轉(zhuǎn)換是很容易的,因?yàn)橹灰灰挥成渚托辛耍阉蠾ord支持的東西逐一映射過(guò)去就完事了
但反過(guò)來(lái)父集轉(zhuǎn)子集就不好辦了,子集里有的能力可以一一映射,沒(méi)有的能力就需要額外處理workaround
就比如PDF支持非常復(fù)雜的陰影信息,但是Word沒(méi)有這么復(fù)雜的矢量圖和陰影混合繪制的支持,那怎么辦,那就得把陰影也處理成矢量圖,還要進(jìn)行元素合并,因?yàn)镻DF的元素單位可以小到一條線,但Word處理不了那么高精度的矢量元素疊加。更不要說(shuō)PDF復(fù)雜的色彩管理和十幾種字體格式甚至允許同名的不同字體和諧存在于一個(gè)文件中了(PDF中的字體引用都是DictionaryObject,不涉及名稱,記錄字體名稱純屬參考用罷了,你刪掉或更改字體名稱不影響頁(yè)面渲染效果)
同樣類似的,Word因?yàn)槭前媸骄庉嬁蚣芟碌牧魇脚虐妫匀コ媸郊s束的Web編輯模式實(shí)際上又是HTML的子集,所以Word可以完美轉(zhuǎn)HTML,但HTML反過(guò)來(lái)轉(zhuǎn)Word一大堆無(wú)法實(shí)現(xiàn)的特性就也會(huì)一團(tuán)糟
而反過(guò)來(lái),沒(méi)有HTML標(biāo)簽的Markdown又是Word的子集,所以Markdown轉(zhuǎn)Word是成熟的不能再成熟的東西了
當(dāng)然你硬要說(shuō)直接轉(zhuǎn)成一張圖片塞進(jìn)去就算了那也不是不行,但那和直接一個(gè)img標(biāo)簽把美工做的圖丟進(jìn)去跟美工說(shuō)我把頁(yè)面做好了有什么區(qū)別?
這時(shí)候可能有人就會(huì)問(wèn)了,為什么有的程序生成的PDF再用這個(gè)程序打開(kāi)可以完全還原呢?其實(shí)原理很簡(jiǎn)單
PDF實(shí)在是太自由了,你甚至可以插入一個(gè)自定義的Dictionary Object,然后把原始文件流直接寫進(jìn)去
然后讀取PDF的時(shí)候檢測(cè)到之前寫的原始文件流就讀出來(lái)就和讀原來(lái)的文件一點(diǎn)區(qū)別都沒(méi)有