引言 +

PDF 是我们打交é“最多的文件格å¼ä¹‹ä¸€ã€‚æ到这个格å¼ï¼Œå³ä½¿æ˜¯å¯¹æŠ€æœ¯å¹¶ä¸ç†Ÿæ‚‰çš„用户,也能说出「通用性好ã€ã€ã€Œæ ¼å¼ä¸ä¼šä¹±å˜ã€è¿™äº›ä¼˜ç‚¹ã€‚但åŒæ—¶ï¼ŒPDF 也是让我们感到困惑最多的格å¼ä¹‹ä¸€ï¼Œå› ä¸ºä¸Ž Word 文档等其他常è§åŠžå…¬è½¯ä»¶æ ¼å¼ç›¸æ¯”,PDF 似乎有ç€å¤ªå¤šçš„「怪癖ã€ï¼Œä¾‹å¦‚å¤åˆ¶æ–‡å­—å›°éš¾ã€å‡ ä¹Žæ²¡æ³•ç¼–辑等等。PDF 软件数é‡ç¹å¤šã€è´¨é‡è‰¯èŽ ä¸é½çš„现状,也进一步让很多用户无法正确ç†è§£å’Œä½¿ç”¨ PDF。

+

然而,事实并éžå¦‚此。这些问题大多ä¸æ˜¯ PDF æ ¼å¼çš„「缺陷ã€ï¼Œè€Œæ˜¯å› ä¸ºæˆ‘们在观念上把 PDF 当æˆäº†å’Œå…¶ä»–办公文档格å¼ç›¸è¿‘的东西,并因此期待 PDF 也具有和åŽè€…相似的功能和特å¾ã€‚

+

尽管 PDF æ ¼å¼å’Œ Word æ ¼å¼åœ¨å®žé™…用途上有诸多é‡å ä¹‹å¤„,但那åªæ˜¯è¡¨é¢çŽ°è±¡ã€‚从技术角度看,两ç§æ ¼å¼ä¹‹é—´çš„差异è¦è¿œè¿œå¤§äºŽ Word 文档和网页之间的差异,甚至还è¦å¤§äºŽ Word 文档和 Excel 表格之间的差异。

+

但这并ä¸æ„å‘³ç€ PDF 就是一ç§éš¾ä»¥ç†è§£çš„æ ¼å¼ã€‚æ°æ°ç›¸å,对大多数用户æ¥è¯´ï¼ŒPDF å¯èƒ½æ˜¯ä»–们接触到的格å¼ä¸­æœ€ã€ŒæŽ¥åœ°æ°”ã€ã€ä¸ŽçŽ°å®žç”Ÿæ´»æœ€æŽ¥è¿‘的。因为,PDF 与其说是一ç§æ•°å­—文档,ä¸å¦‚说是实体文档在数字世界中的影åƒã€‚对 PDF çš„æ“作,很大程度上å¯ä»¥çœ‹æˆå¯¹çœŸå®žçº¸å¼ çš„æ“作,åªæ˜¯æ“作环境从物ç†ä¸–ç•Œæ¢åˆ°äº†æ•°å­—世界而已。PDF 的创建就是一ç§è™šæ‹Ÿçš„打å°ï¼Œå¤åˆ¶ PDF 文字的过程更åƒæ˜¯ä¸€ç§æŠ„写,而 PDF 的编辑实质上是一ç§æ¶‚改。

+

一旦接å—了这个观念,PDF 的很多「怪癖ã€å°±æ˜¾å¾—顺ç†æˆç« äº†ï¼šæ‰“å°å‡ºæ¥çš„东西当然ä¸ä¼šå› ä¸ºä½ç½®çš„å˜åŒ–而改å˜å¤–观;抄写的结果很å¯èƒ½ä¸ŽåŽŸæ–‡å­˜åœ¨è¯¯å·®ï¼Œå¹¶ä¸”å—制于抄写者对文字的ç†è§£ï¼›æ¶‚改的å¯è¡Œæ€§åˆ™å–决于原有布局留下了多少改动空间,并且å†è½»å¾®çš„涂改也会对纸张造æˆæŸä¼¤ã€‚

+

当然,åªç»™å‡ºè¿™æ ·çš„结论并ä¸è¶³ä»¥ä»¤äººä¿¡æœã€‚因此,下文的主è¦ä»»åŠ¡å°±æ˜¯é€šè¿‡å›žç­”几个关于 PDF æ ¼å¼æ™®éå…³å¿ƒçš„é—®é¢˜ï¼Œç»“åˆ PDF 的结构和语法,解释为什么「PDF 的本质就是数字化的纸张ã€ï¼Œä»Žè€Œæ·±åŒ–对 PDF æ ¼å¼çš„ç†è§£ã€‚

+为什么 PDF 的外观éžå¸¸ç¨³å®šï¼Ÿ +

在我们日常使用的文档格å¼ä¸­ï¼ŒPDF 文件的外观是最稳定的。一ç»ç”Ÿæˆï¼Œæ— è®ºåœ¨ä»€ä¹ˆæ“作系统上ã€ç”¨ä»€ä¹ˆè½¯ä»¶æ‰“开,得到的显示效果几乎总是一致的。相比之下,Word 所使用 docx æ ¼å¼çš„ä¿çœŸæ€§å°±å·®å¾—多了:哪怕åªæ˜¯æ¢å°ç”µè„‘,显示效果都å¯èƒ½å‘生了å˜åŒ–,更ä¸è¦è¯´ç”¨ä¸åŒç‰ˆæœ¬çš„ Word 或者第三方软件打开了。

+

PDF çš„è¿™ç§ä¿çœŸæ€§è®©å®ƒå¹¿å—é’ç,但它究竟是如何åšåˆ°è¿™ä¸€ç‚¹çš„?PDF 的稳定是ç»å¯¹çš„å—?

+「打å°ã€å‡ºæ¥çš„ PDF +

如果平时注æ„观察,容易å‘现å„ç§è½¯ä»¶ä¸­æ¶‰åŠ PDF çš„æ“作,用è¯éƒ½æ¯”较特别。其他格å¼éƒ½æ˜¯è¢«ã€Œæ–°å»ºã€ï¼ˆnew / create)出æ¥æˆ–者「ä¿å­˜ã€ï¼ˆsave)下æ¥çš„,åªæœ‰ PDF 是被「导出ã€ï¼ˆexport)甚至「打å°ã€ï¼ˆprint)出æ¥çš„。这些è¯è¯­å¹¶ä¸æ˜¯éšæ„选用的,它们本身就说明了 PDF çš„é‡è¦ç‰¹å¾ï¼šã€Œå¯¼å‡ºã€æš—示ç€æ–‡ä»¶ç¼–辑已ç»å‘Šä¸€æ®µè½ï¼Œè€Œã€Œæ‰“å°ã€åˆ™æ›´æ˜¯å½¢è±¡åœ°è¡¨æ˜Ž PDF 的创建是一个「固化ã€çš„过程。

+

为了进一步ç†è§£è¿™ç§åŒºåˆ«ï¼Œè®©æˆ‘们æ¥å¯¹æ¯”一组外观上完全相åŒçš„ Word 文档和 PDF 文档。下图中,å³ä¾§çš„ PDF æ ¼å¼æ–‡ä»¶æ˜¯ç”±å·¦ä¾§çš„ Word 文件导出得到的,两者的内容都åªæœ‰ã€ŒHello world!ã€ä¸€è¡Œå±…中文字。(注:为了é¿å…ä¸å¿…è¦çš„å¤æ‚性,我们暂时åªä»¥è‹±æ–‡æ–‡æ¡£ä¸ºä¾‹ã€‚)

+

[Image: 一对内容相åŒçš„ Word 文档和 PDF 文档]

一对内容相åŒçš„ Word 文档和 PDF 文档

+

å…ˆæ¥çœ‹ Word 是如何实现这一版å¼æ•ˆæžœçš„。用任æ„解压工具将该文档解开(docx 文件 实质上 就是一个压缩包),找到其中的 /word/_rels/document.xml 并打开。其中的关键部分如下(代ç ç»è¿‡æ•´ç†ï¼‰ï¼š

+
<w:pPr>
+    <w:jc w:val="center"/>
+    <w:rPr><w:rFonts w:ascii="Times" w:hAnsi="Times"/><w:lang w:val="en-US"/></w:rPr>
+</w:pPr>
+<w:r w:rsidRPr="003C75CF">
+    <w:rPr><w:rFonts w:ascii="Times" w:hAnsi="Times"/></w:rPr>
+    <w:t>Hello world!</w:t>
+</w:r>
+
+

ä¸å¿…æ惧这些陌生的代ç ï¼Œå®ƒä»¬çš„æ„义很容易从文档内容本身å推出æ¥ã€‚先看倒数第二行,这里记录了整个文档最é‡è¦çš„ä¿¡æ¯â€”—「Hello world!ã€è¿™ä¸²æ–‡å­—。在它的上é¢ä¸€è¡Œï¼Œw:rFonts 属性将字体设置为 Times。那么å‰å››è¡Œæ˜¯åšä»€ä¹ˆçš„呢?从第二行的 center å­—æ ·ä¸éš¾çŒœå‡ºï¼Œå®ƒä»¬æŽ§åˆ¶çš„是文字所在段è½çš„æ ·å¼ï¼ŒåŒ…括居中对é½ç­‰ç­‰ã€‚

+

这就是 docx æ ¼å¼è¿™ç±» 标记语言 (Markup Language)文档的特å¾ï¼šåœ¨çº¯æ–‡æœ¬ä¸ŠåŒ…裹å„ç§ã€Œæ ‡ç­¾ã€ï¼ˆtag)æ¥æ述文本的样å¼ï¼ˆé¢œè‰²ã€ä½ç½®ã€å­—体等等),从而获得格å¼ä¸°å¯Œå¤šå˜çš„文档。常è§çš„网页(HTML)ã€Evernote 笔记( ENML )所用的语法本质上都是标记语言,区别åªåœ¨äºŽæ”¯æŒçš„标签å„ä¸ç›¸åŒã€å› æ­¤èƒ½å®žçŽ°çš„æ ¼å¼æœ‰å¤šæœ‰å°‘罢了。

+

PDF åˆæ˜¯æ€Žä¹ˆåšçš„呢?我们用纯文本编辑器打开上图中的 PDF 文件(是的,PDF å¯ä»¥ç”¨æ–‡æœ¬ç¼–辑器打开查看æºç ï¼‰ï¼Œå…¶ä¸­çš„关键部分如下(ç»è¿‡å¤„ç†ï¼‰ï¼š

+
BT
+    1 0 0 1 1036 572 Tm
+    /TT1 12 Tf
+    [ (He) 24 (l) -48 (l) -48 (o) ] TJ
+ET
+BT
+    1 0 0 1 1147 572 Tm
+    /TT1 12 Tf
+    ( ) Tj
+ET
+BT
+    1 0 0 1 1160 572 Tm
+    /TT1 12 Tf
+    [ (w) 24 (or) -84 (l) -24 (d) ] TJ
+ET
+

å³ä½¿ä½ è¢«è¿™äº›å‡Œä¹±çš„数字和代å·å¼„得一头雾水,大概也能看出它与 docx æ ¼å¼æœ‰ç€æˆªç„¶ä¸åŒçš„画风。如果我们粗略地把这些语å¥ç¿»è¯‘æˆã€Œäººè¯ã€ï¼š

+
ã€æ–‡å­—开始】
+    缩放比例1å€ åæ ‡(1036,572) ã€æ–‡å­—定ä½ã€‘
+    /TT1 12磅 ã€é€‰æ‹©å­—体】
+    [ (He) é—´è·24 (l) é—´è·-48 (l) é—´è·-48 (o) ] ã€ç»˜åˆ¶æ–‡å­—】
+ã€æ–‡å­—结æŸã€‘
+ã€æ–‡å­—开始】
+    缩放比例1å€ åæ ‡(1147,572) ã€æ–‡å­—定ä½ã€‘
+    /TT1 12磅 ã€é€‰æ‹©å­—体】
+    (空格) ã€ç»˜åˆ¶æ–‡å­—】
+ã€æ–‡å­—结æŸã€‘
+ã€æ–‡å­—开始】
+    缩放比例1å€ åæ ‡(1060,572) ã€æ–‡å­—定ä½ã€‘
+    /TT1 12磅 ã€é€‰æ‹©å­—体】
+    [ (w) é—´è·24 (or) é—´è·-84 (l) é—´è·-24 (d) ] ã€ç»˜åˆ¶æ–‡å­—】
+ã€æ–‡å­—结æŸã€‘
+

请在头脑中想象一下这个过程——是ä¸æ˜¯æœ‰ä¸€ç§å¼ºçƒˆçš„「机械感ã€ï¼Ÿå¦‚果说 Word 文档使用的标记语言很åƒæ˜¯ç»™äººä¸‹å‘½ä»¤ï¼ˆã€Œè¿™é‡Œæœ‰ä¸€æ®µè¯ï¼ŒæŠŠå®ƒç”¨ Times 字体写出æ¥ï¼Œä½ç½®ä¸Šå±…中对é½â€¦â€¦ã€ï¼‰ï¼Œé‚£ä¹ˆ PDF 的语言则更åƒæ˜¯åœ¨æŽ§åˆ¶æœºå™¨ï¼Œå®šä½ã€è°ƒæ•´ã€è½ç¬”ã€æŠ¬èµ·ï¼Œç§»åŠ¨åˆ°ä¸‹ä¸€è¡Œï¼›å¦‚æ­¤é‡å¤ã€‚è”想一下,铅字排版和打å°æœºçš„工作机制ä¸ä¹Ÿæ˜¯ç±»ä¼¼çš„å—?å¯è§ï¼Œç”¨ã€Œæ‰“å°ã€ä¸€è¯æ¥æ­é… PDF 是å分æ°å½“的。

+

如此对比之下,PDF 显示效果的ä¿çœŸæ€§å°±å®¹æ˜“解释了。虽然 Word æ ¼å¼ä½¿ç”¨çš„语法明显更容易ç†è§£ï¼Œä½†é—®é¢˜åœ¨äºŽä¸åŒã€Œäººã€â€”—ä¸åŒè½¯ä»¶çŽ¯å¢ƒâ€”—å¬åˆ°åŒæ ·ä¸€æ®µæŒ‡ä»¤ï¼Œå¤´è„‘中的å应未必是相åŒçš„。「用 Times 字体显示ã€â€”—哪个是 Times 字体?没有安装这个字体怎么办?「居中对é½ã€â€”—以什么为å‚照物居中?怎么计算居中?Word 文档对此笑而ä¸è¯­ï¼ŒæŠŠé—®é¢˜ç•™ç»™äº†è½¯ä»¶åŽ»æ€è€ƒã€‚正是这ç§è‡ªç”±è£é‡çš„空间为显示效果的差异留下了éšæ‚£ã€‚

+

[Image: 用 Pages 打开 Word 文档出现的字体缺失问题]

用 Pages 打开 Word 文档出现的字体缺失问题

+

在 PDF 中,这样的问题就很难出现。与标记语言那ç§ç›¸å¯¹çš„ã€æè¿°å¼çš„标签ä¸åŒï¼ŒPDF 语言几乎都是ç»å¯¹çš„ã€æŒ‡ä»¤å¼çš„。例如,上é¢çš„ PDF 中,文字明显是居中的,但代ç ä¸­ä»Žå¤´åˆ°å°¾æ²¡æœ‰åŠä¸ªå­—æ到「居中ã€ï¼›ç›¸å,它直接指明了文字的å标。因此,无论什么阅读器读到这份文件,åªè¦æ ¹æ®å标「照葫芦画瓢ã€åœ°ç»˜åˆ¶ï¼Œä¸€å®šèƒ½å¾—到相åŒçš„显示效果。

+

类似地,下é¢è¿™æ®µä»£ç çš„作用是绘制出一个点状的「Lã€å½¢ï¼Œå¾ˆéš¾æƒ³è±¡å®ƒä¼šç»™è½¯ä»¶ç•™ä¸‹ä»€ä¹ˆã€Œè‡ªç”±å‘挥ã€çš„空间:

+
8 w 1 J [20] 0 dã€è®¾ç½®ç”»ç¬”为 8pt 宽ã€æœ«ç«¯åœ†è§’ã€20pt 点状线】
+200 200 m 200 100 l 250 100 l ã€ç§»åŠ¨åˆ°(200,200) 画直线到(200,100) 画直线到(250,100) 】
+S ã€ç¡®è®¤ç»˜åˆ¶ã€‘
+

PDF 外观稳定性的å¦ä¸€ä¸ªåŽŸå› æ˜¯å®ƒåµŒå…¥äº†å„ç§éœ€è¦ç”¨åˆ°çš„外部资æºã€‚我们注æ„到,上é¢çš„ PDF åœ¨è®¾ç½®å­—ä½“æ—¶ï¼Œæ²¡æœ‰åƒ docx 文件那样直接指定字体å称,而是引用了一个代å·èˆ¬çš„ /TT1。实际上,/TT1 指å‘的是一个内嵌的字体,存储在 PDF 内部的ååŽä½ç½®ã€‚显示时,阅读器将根æ®è¿™ä¸ªä»£å·æ‰¾åˆ°å­—体,按照其中记载的形状ã€å®½åº¦ç­‰ä¿¡æ¯ï¼Œå°†å­—符「书写ã€åœ¨æŒ‡å®šçš„å标上——就好比活字排版工按指示从字盘中å–出字模,并放在æ¯ç‰ˆä¸Šçš„特定ä½ç½®ä¸€æ ·ã€‚相å,Word 文档默认是ä¸åµŒå…¥å­—体的;åªè¦å¦ä¸€å°ç”µè„‘上没有安装用到的字体,或者安装了ä¸åŒç‰ˆæœ¬çš„字体,就会导致显示效果的差异。

+

[Image: 活字]

活字

+ä¿çœŸæ€§çš„例外 +

ä¸è¿‡ï¼ŒPDF çš„è¿™ç§ä¿çœŸæ€§ä¹Ÿä¸æ˜¯ç»å¯¹çš„。尽管 PDF 语å¥å·²ç»éžå¸¸ç²¾ç¡®ï¼Œä¹Ÿä¸èƒ½æŽ’除存在ä¸åŒè§£è¯»æ–¹å¼çš„å¯èƒ½ã€‚特别是在 PDF 文件本身有瑕疵(例如语法ä¸åˆè§„范ã€èµ„æºæ–‡ä»¶ç¼ºæŸç­‰ï¼‰æ—¶ï¼Œé˜…读器就必须「猜测ã€æ–‡ä»¶åŽŸæœ¬çš„æ„图,误差也就因此产生了。

+

例如,下é¢è¿™ä»½ PDF æ ¼å¼è®ºæ–‡æ˜¯ä»Žä¸­å›½çŸ¥ç½‘下载的。在用 Adobe 的官方 PDF 工具 Acrobat 打开时,文件基本显示正常。而在用 macOS 自带的预览 app 或 PDF Expert 打开时,就能明显看出显示效果是有问题的——所有的中文都å˜æˆäº†é»‘体,而ä¸æ˜¯åº”有的宋体。(你å¯èƒ½æ³¨æ„到从知网下载的 PDF ç»å¸¸å­˜åœ¨å­—体显示问题。这是因为它们并éžç”±æŽ’版软件直接导出的「一手ã€ç‰ˆæœ¬ï¼Œè€Œæ˜¯ä»Žç§æœ‰çš„ CAJ æ ¼å¼è½¬åˆ¶è€Œæ¥çš„,存在很多兼容性问题。)

+

[Image: 存在字体显示问题的知网 PDF]

存在字体显示问题的知网 PDF

+

为什么会出现这样的问题呢?用 Acrobat 附带的 Preflight 工具检查文件,å¯ä»¥å‘çŽ°å®ƒå¼•ç”¨äº†åŒ…å« STSong-Light (å³åŽæ–‡å®‹ä½“细版)在内的数个字体,但å´æ²¡æœ‰åµŒå…¥å¯¹åº”的字体文件。显然,这ç§ç©ºå¤´æ”¯ç¥¨å¼çš„åšæ³•ä¼šå¼•èµ·é˜…读器的困惑,它们将åªèƒ½ã€ŒçŒœæµ‹ã€è¯¥ç”¨ä»€ä¹ˆæ¥ä»£æ›¿ STSong-Light,ä¸åŒçš„猜测结论将引å‘ä¸åŒçš„显示结果。

+

[Image: 检查å‘现问题 PDF 没有嵌入应有的中文字体]

检查å‘现问题 PDF 没有嵌入应有的中文字体

+

其中,Acrobat 是一个éžå¸¸ã€Œä»æ…ˆã€çš„阅读器,会尽å¯èƒ½åšä¸€äº›åˆç†æŽ¨æµ‹æ¥ä¿®å¤æ–‡ä»¶æœ¬èº«çš„瑕疵。å¯ä»¥çœ‹å‡ºï¼Œå®ƒé€‰æ‹©äº†ä¸€ä¸ªç±»ä¼¼çš„字体——åŒå±žå®‹ä½“çš„ Adobe Song Std Light——æ¥ä»£æ›¿è¿™ä¸ªä¸å­˜åœ¨çš„ STSong-Light。相å,自带的预览 app 就没有那么多考虑了,它选择直接回退到系统界é¢çš„默认字体—— 苹方 æ¥æ˜¾ç¤ºï¼ŒäºŽæ˜¯æˆ‘们就åªèƒ½å’Œä¸€ç‰‡é»‘糊糊的黑体大眼瞪å°çœ¼ã€‚而如果用 Acrobat çš„ä¿®å¤åŠŸèƒ½å°†ç¼ºå¤±çš„字体文件补充进 PDF åŽï¼Œå°†ä¼šå‘现预览 app 也能正确显示中文字体了,这å°è¯äº†æˆ‘们对问题æˆå› çš„分æžã€‚

+为什么 PDF 中的文字ç»å¸¸éš¾ä»¥å¤åˆ¶ï¼Ÿ +

如果说 PDF 显示效果的稳定是它å¸å¼•äººä»¬ä½¿ç”¨çš„主è¦ä¼˜åŠ¿ï¼Œé‚£ä¹ˆã€Œæ–‡å­—éš¾å¤åˆ¶ã€ä¸€å®šæ˜¯å®ƒè®©å¾ˆå¤šäººæ•¬è€Œè¿œä¹‹çš„原因之首。确实,从网页上å¤åˆ¶æ–‡å­—çš„é‚£ç§æ–¹ä¾¿çµæ´»åœ¨ PDF 这里几乎是一ç§å¥¢æœ›ã€‚很多时候,就连第一关——准确选中è¦å¤åˆ¶çš„文字,都是难以跨越的障ç¢ã€‚

+

PDF 为什么对å¤åˆ¶æ“作这么ä¸å‹å¥½å‘¢ï¼Ÿæ¢ç§é—®æ³•ï¼Œæ»¡è¶³ä»€ä¹ˆæ¡ä»¶çš„ PDF æ‰èƒ½æ­£ç¡®å¤åˆ¶å‡ºæ–‡å­—呢?答案是,PDF 文件的内容ã€æ–‡æœ¬çš„排列方å¼ï¼Œä»¥åŠæ–‡æœ¬å’Œå­—体的编ç éƒ½ä¼šå½±å“到文本的å¤åˆ¶ã€‚å¦å¤–,阅读器对于å¤åˆ¶æ“作的优化也是ä¸å¯å¿½è§†çš„。

+从扫æ版 PDF å¤åˆ¶æ–‡æœ¬ +

è¦æŠŠæ–‡å­—å¤åˆ¶å‡ºæ¥ï¼Œä¸€ä¸ªå‰æ是 PDF 中必须真的包å«æ–‡å­—。这å¬èµ·æ¥å¥½åƒæ˜¯ä¸€å¥åºŸè¯ï¼Œä½†å®žè·µä¸­å¤§å¤šæ•°ã€Œæ–‡å­—å¤åˆ¶ä¸å‡ºæ¥ã€çš„问题,原因都是目标 PDF 中根本没有文本。这尤其多è§äºŽé‚£äº›æ‰«æ而æ¥çš„电å­ä¹¦å’Œç”µå­æ–‡æ¡£ï¼›å¦‚æžœä¸ç»å¤„ç†ï¼Œå®ƒä»¬çš„æ¯ä¸€é¡µä¸è¿‡æ˜¯åŽŸå§‹æ–‡ä»¶çš„一张「照片ã€è€Œå·²ï¼Œæ˜¾ç„¶æ— æ³•å¤åˆ¶å‡ºæ–‡å­—。

+

当然,扫æ版 PDF 是完全å¯èƒ½æ”¯æŒå¤åˆ¶çš„。OCR(光学字符识别)工具å¯ä»¥è¯†åˆ«å‡ºå›¾åƒä¸­çš„文本,并将其写入 PDF 中,使其支æŒé€‰ä¸­å’Œå¤åˆ¶ï¼›è¿™ä¹Ÿæ˜¯å¾ˆå¤šæ”¶è´¹ PDF 软件主è¦å®£ä¼ çš„功能点。需è¦é¿å…的一个认识误区是,å³ä½¿ç»è¿‡ OCR 处ç†çš„ PDF,其中的文本也并ä¸æ˜¯ã€Œé™„身ã€åœ¨åŽŸæ¥çš„图片上的。相å,它们通常被存储在一个å•ç‹¬çš„文本对象中,与图片中的文字ä½ç½®ä¸€ä¸€å¯¹é½ã€‚åªä¸è¿‡ç”±äºŽ PDF 中的文本å¯ä»¥è¢«è®¾ç½®ä¸ºéšè—,当用户试图选中和å¤åˆ¶è¿™äº›éšè—文本时,看起æ¥å°±å¥½åƒæ˜¯ç›´æŽ¥åœ¨å›¾ç‰‡ä¸Šé€‰ä¸­å’Œå¤åˆ¶æ–‡å­—一样。

+

[Image: ç»è¿‡ OCR 处ç†çš„扫æ版 PDF åŒæ ·å¯ä»¥é€‰ä¸­å’Œå¤åˆ¶]

ç»è¿‡ OCR 处ç†çš„扫æ版 PDF åŒæ ·å¯ä»¥é€‰ä¸­å’Œå¤åˆ¶

+

这就解释了为什么在一些扫æ版 PDF 中,文字选中效果看起æ¥æ˜¯ã€Œæ­ªã€çš„;而在å¦ä¸€äº› PDF 中,选中和å¤åˆ¶æ“作总是ä¸è¿žç»­æˆ–ä¸å®Œæ•´ã€‚å‰è€…是因为加入的éšè—文本图层没有与图片上的文字ä½ç½®å¯¹é½ï¼ŒåŽè€…则是因为 OCR 识别ä¸å…¨ï¼Œæˆ–者将连续的文本识别æˆäº†å­¤ç«‹çš„文字。

+跨行和跨段å¤åˆ¶æ–‡æœ¬ +

麻烦还远没有结æŸã€‚å³ä½¿ç¡®è®¤äº† PDF 中包å«æ–‡æœ¬ï¼Œä¹Ÿå¹¶ä¸æ„味ç€å°±èƒ½æŠŠå®ƒä»¬åŽŸå°ä¸åŠ¨åœ°å¤åˆ¶å‡ºæ¥ã€‚在å¤åˆ¶è·¨è¶Šæ•°è¡Œä¹ƒè‡³æ•°æ®µçš„大片文本时,我们往往ä¸èƒ½å¾—到所预期的完整段è½ï¼Œè€Œæ˜¯å¤šäº†ä¸€äº›æ— ç”¨çš„空白或者æ¢è¡Œã€‚例如,在下图所示的å¤åˆ¶ç»“果中,PDF 似乎把页é¢ä¸Šçš„æ¢è¡Œå’Œè¿žå­—符照å•å…¨æ”¶äº†ï¼Œå³ä½¿å®ƒä»¬æ˜¾ç„¶ä¸æ˜¯åŽŸæ–‡çš„一部分。åŒæ ·çš„问题也会影å“到文本æœç´¢ï¼Œå¾ˆå¤š PDF 中,断æˆä¸¤è¡Œçš„è¯æ˜¯æ— æ³•æ­£å¸¸æœç´¢çš„。

+

[Image: å¤åˆ¶æ“作容易把ä¸éœ€è¦çš„内容也一并å¤åˆ¶å‡ºæ¥]

å¤åˆ¶æ“作容易把ä¸éœ€è¦çš„内容也一并å¤åˆ¶å‡ºæ¥

+

这类现象ä»ç„¶å¯ä»¥ä»Žã€Œçº¸ã€çš„比喻中得到解释。和纸质文件一样,PDF åªè´Ÿè´£è®°è½½å½¢æ€è€Œä¸è®°è½½å«ä¹‰ã€‚一个å¯èƒ½è¿å直觉的事实是,PDF 对于「段è½ã€æ˜¯æ²¡æœ‰æ¦‚念的。在其他格å¼ä¸­å¤åˆ¶è·¨è¶Šä¸¤è¡Œçš„文本,之所以能得到连续的结果,是因为软件知é“这串文字属于åŒä¸€ä¸ªæ®µè½ï¼Œæ˜¾ç¤ºæˆä¸¤è¡Œåªæ˜¯å› ä¸ºæ–‡æ¡£å®½åº¦çš„é™åˆ¶ã€‚类似地,如果一个长å•è¯è¢«æ‹†æˆä¸¤è¡Œæ˜¾ç¤ºï¼Œå…¶ä»–æ ¼å¼åœ¨å¤åˆ¶æ—¶æ˜¯ä¸ä¼šå¸¦ä¸Šè¿žå­—符的,因为软件知é“é‚£ä¸æ˜¯å•è¯çš„一部分。

+

在 PDF 中,这些结论都ä¸é€‚用。还是以上é¢é‚£ä»½ PDF 为例。观察它的第一段第二行到第二段第一行:这三行涉åŠäº†åˆ†è¯ï¼ˆè¡Œå°¾è¿žå­—符)和分段两个排版è¦ç´ ã€‚这一部分在 PDF 代ç ä¸­çš„å映是:

+
q 1 0 0 1 57 755 cm BT ã€å®šä½åˆ°(57,755)】
+    13 0 0 13 0 0 Tm /Tc1 1 Tf ã€è®¾å®šå­—体】
+    [(…略去之å‰éƒ¨åˆ†â€¦) -141.7 (indepen) ] TJ ã€ç»˜åˆ¶ç¬¬ä¸€æ®µç¬¬äºŒè¡Œã€‘
+ET Q
+q 1 0 0 1 533 755 cm BT ã€å®šä½åˆ°(533,755)】
+    13 0 0 13 0 0 Tm /Tc1 1 Tf ã€è®¾å®šå­—体】
+    (-) Tj ã€ç»˜åˆ¶è¡Œå°¾çš„连字符】
+ET Q
+q 1 0 0 1 57 738 cm BT ã€å®šä½åˆ°(57,738)】
+    13 0 0 13 0 0 Tm /Tc1 1 Tf ã€è®¾å®šå­—体】
+    [ (dent o) 6 (…略去中间部分…) (ems) 5 (. ) ] TJ ã€ç»˜åˆ¶ç¬¬ä¸€æ®µç¬¬ä¸‰è¡Œã€‘
+ET Q
+q 1 0 0 1 57 715 cm BT ã€å®šä½åˆ°(57,715)】
+    13 0 0 13 0 0 Tm /Tc1 1 Tf ã€è®¾å®šå­—体】
+    [ (Based ) (…略去之åŽéƒ¨åˆ†â€¦)] TJ ã€ç»˜åˆ¶ç¬¬äºŒæ®µç¬¬ä¸€è¡Œã€‘
+ET Q
+

这里,我们需è¦å…³æ³¨çš„åªæœ‰ä¸¤ç‚¹ï¼šç¬¬ä¸€ï¼Œä»£ç ä¸­çš„ Tj 或 TJ(绘制文字)命令æ¯æ¬¡å¤„ç†çš„文字都ä¸è¶…过一行。实际上,PDF 实现æ¢è¡Œå’Œåˆ†æ®µçš„方法,åªä¸è¿‡æ˜¯æŠŠé‚£ä¸ªã€Œæƒ³è±¡ä¸­çš„笔尖ã€ç§»åŠ¨åˆ°ä¸‹ä¸€è¡Œæˆ–下一段的起始å标处罢了。æ¢å¥è¯è¯´ï¼Œé™¤äº†ç¬”尖移动幅度更大(以å映段间è·ï¼‰ï¼Œåˆ†æ®µå’Œæ™®é€šåˆ†è¡Œåœ¨ PDF 中没有任何区别。

+

第二,原文第二行行尾的连字符出现在了 PDF 代ç ä¸­ã€‚在åŒä¸€ä»½æ–‡æ¡£çš„ Word 版本代ç ä¸­ï¼Œè¿™ä¸ªè¿žå­—符是ä¸å­˜åœ¨çš„,因为它并ä¸æ˜¯è¾“入内容的一部分。æ¢å¥è¯è¯´ï¼Œå…¶ä»–æ ¼å¼ä¸åœ¨æ–‡ä»¶ä¸­è®°å½•ï¼Œåªåœ¨æ‰“开时æ‰æ ¹æ®éœ€è¦æ˜¾ç¤ºçš„æŽ’ç‰ˆç‰¹æ€§ï¼Œåˆ¶æˆ PDF åŽå´è¢«ã€Œå›ºåŒ–ã€ä¸‹æ¥äº†ã€‚

+

既然 PDF ä¸è®°å½•æ®µè½ä¿¡æ¯ï¼Œè€Œæ¢è¡Œå’Œè¿žå­—符åˆæ˜Žæ˜Žç™½ç™½åœ°å†™åœ¨æ–‡ä»¶ä¸­ï¼Œå®ƒä»¬ä¼šå‡ºçŽ°åœ¨å¤åˆ¶ç»“果里也就并ä¸å¥‡æ€ªäº†ã€‚

+

当然,阅读器å¯ä»¥æ ¹æ®æ–‡æœ¬çš„内容和布局等特å¾è¿›è¡ŒæŽ¨æ–­ï¼Œæ供更为åˆç†çš„å¤åˆ¶æ•ˆæžœã€‚例如打开上é¢çš„ PDF 时,PDF Expert å’Œ Chrome æµè§ˆå™¨å†…建的阅读器都会对行尾的连字符作特殊处ç†ï¼Œå¤åˆ¶çš„结果是一个完整的å•è¯ï¼Œæœç´¢ä¸­é—´æ–­å¼€çš„「independentã€æ•´è¯ä¹Ÿèƒ½å®šä½åˆ°ç»“果;相å,用 macOS 自带的预览 app å’Œ Firefox 内建的阅读器打开时,å¤åˆ¶æ“作会把连字符当作å•è¯çš„一部分,æœç´¢æ•´è¯ä¹Ÿå¾—ä¸åˆ°ç»“果。

+

å¯èƒ½æœ‰äººä¼šé—®ï¼šPDF 为什么连如此基础的段è½åŠŸèƒ½éƒ½ä¸æ”¯æŒå‘¢ï¼Ÿè¿™å®žé™…上是一ç§æœ‰æ„为之的选择。PDF 是作为一ç§ç”µå­åŒ–的打å°è¢« å‘明 出æ¥çš„,而打å°æ„味ç€ç¼–辑工作的终点。因此,PDF 完全å¯ä»¥ä¸è€ƒè™‘å®è§‚层é¢çš„排版功能(因为用æ¥åˆ›å»ºå®ƒçš„字处ç†å’Œåˆ¶ç‰ˆè½¯ä»¶åœ¨è¿™æ–¹é¢æ›´ä¸“业),而åªä¿ç•™å¯¹å°‘数局部版å¼ï¼ˆä¾‹å¦‚文字间è·/Kerning)的支æŒã€‚è¿™ä¸ä»…有利于节çœæ–‡ä»¶ç©ºé—´ï¼Œä¹Ÿè¿›ä¸€æ­¥å¼ºåŒ–了 PDF 跨平å°æ˜¾ç¤ºçš„稳定性。

+å¤åˆ¶ PDF 文本的乱ç é—®é¢˜ +

确认了 PDF 里有文字,文本的排列也很整é½ï¼Œæ˜¯ä¸æ˜¯å°±èƒ½çš†å¤§æ¬¢å–œäº†å‘¢ï¼Ÿå¾ˆé—憾,对于中文用户æ¥è¯´ï¼Œä»Ž PDF 中å¤åˆ¶æ–‡å­—ç»å¸¸è¿˜ä¼šé‡åˆ°ä¸€é“åŽï¼šä¹±ç ã€‚

+

ä¹±ç é—®é¢˜è™½ç„¶åœ¨å…¶ä»–场åˆï¼ˆä¾‹å¦‚网页ã€æ¸¸æˆç­‰ï¼‰ä¹Ÿå­˜åœ¨ï¼Œä½†é‚£åŸºæœ¬éƒ½æ˜¯å‘生在文字的显示阶段。既然 PDF 都正确显示了文字,为什么一ç»å¤åˆ¶å´å˜å¾—ä¸æ˜¯é‚£å›žäº‹äº†å‘¢ï¼Ÿ

+

如上所述,PDF 的生æˆæœ¬è´¨ä¸Šå°±æ˜¯ä¸€ä¸ªã€Œè™šæ‹Ÿæ‰“å°ã€çš„过程。这个比喻的言外之æ„——打å°æœºæ˜¯ä¸è¯†å­—的。它的全部使命,就是在纸张上按照å标和字体记载的形状,照葫芦画瓢地排列出指定的文字;整个过程完全ä¸æ¶‰åŠã€Œè¿™æ˜¯ä»€ä¹ˆå­—ã€ä¹‹ç±»çš„问题。类似地,PDF 绘制文本的æµç¨‹ï¼Œä¹Ÿä¸è¿‡æ˜¯ä»Žå­—体资æºæ–‡ä»¶ä¸­å–出特定ç ä½ä¸Šçš„字符(glyph),放置在æŸä¸ªåæ ‡ä½ç½®ä¸Šã€‚至于å–出æ¥çš„到底是什么字,PDF 根本ä¸å…³å¿ƒã€‚

+

å¯å¦‚æžœ PDF 是一个「文盲ã€ï¼Œå®ƒåœ¨å¤åˆ¶æ“作中åˆæ˜¯é ä»€ä¹ˆç»™å‡ºæˆ‘们需è¦çš„文本的呢?

+

我们知é“,计算机中的文字是通过编ç æ¥åŒºåˆ†å’Œè°ƒç”¨çš„。目å‰ï¼Œæœ€é€šç”¨å’Œå¸¸è§çš„ç¼–ç æ–¹æ¡ˆæ˜¯ Unicode。å¦ä¸€æ–¹é¢ï¼Œåœ¨ PDF 内部嵌入的字体文件中,æ¯ä¸ªå­—符也有一个编ç ï¼›ç»˜åˆ¶æ–‡å­—时,Tj/TJ 命令å¯ä»¥é€šè¿‡è¿™ä¸ªç¼–ç å‘字体文件索å–需è¦çš„字符。

+

上述两套编ç å¯ä»¥æ˜¯ï¼ˆå¹¶ä¸”在éžè‹±æ–‡çŽ¯å¢ƒä¸‹å¾€å¾€æ˜¯ï¼‰ä¸åŒçš„,它们之间的「桥æ¢ã€ï¼Œå°±æ˜¯å­—体所附带的 ToUnicode 属性。ToUnicode 的值是一张映射关系表(称作 character map / CMap),它给出了字体文件中æ¯ä¸ªç ä½ä¸Šçš„字符与 Unicode ç¼–ç çš„对应关系。在å¤åˆ¶ã€æœç´¢ç­‰æ“作中,PDF å°±æ˜¯é  CMap 这张表得知æ¯ä¸ªå­—符到底是什么「字ã€çš„。

+

[Image: PDF 涉åŠçš„两套编ç ]

PDF 涉åŠçš„两套编ç 

+

问题是:如果这张表弄丢了呢?或者虽然没有丢,但是缺æŸäº†ä¸€å—?或者被人æ¶æ„篡改了?

+

让我们æ¥åšä¸€ä¸ªã€ŒæŒ‡é¹¿ä¸ºé©¬ã€çš„实验。下图是一个éžå¸¸ç®€å•çš„ PDF 文件,上é¢åªæœ‰ä¸€ä¸ªã€Œé¹¿ã€å­—。

+

[Image: 示例 PDF 和它的 CMap 片段]

示例 PDF 和它的 CMap 片段

+

用文本编辑器打开 PDF,å¯ä»¥çœ‹åˆ° <ba6f> Tj 这一语å¥ã€‚ä¸éš¾çŒœå‡ºï¼Œè¯¥è¯­å¥çš„作用是绘制字体文件中编ç ä¸º 0xBA6F çš„å­—ç¬¦ã€‚æ ¹æ® PDF 对象的交å‰å¼•ç”¨å…³ç³»ï¼ˆåŽæ–‡ä¼šä»‹ç»ï¼‰æ‰¾åˆ° CMap,其关键部分为:

+
1 beginbfrange
+<ba6f> <ba6f> <2fc5>
+endbfrange
+

ä¸éš¾çœ‹å‡ºï¼Œè¿™ä¸ª CMap 告诉阅读器:字体文件中编ç ä¸º 0x6ABF 的字符对应 Unicode 中的 U+2FC5。查 Unicode ç è¡¨å¯çŸ¥ï¼ŒU+2FC5 正是汉字「鹿ã€ã€‚

+

现在,我们将上é¢ä»£ç ä¸­çš„ 2FC5 æ”¹æˆ 9A6C,然åŽé‡æ–°æ‰“å¼€ PDF 文件。外观上,文件似乎并没有任何å˜åŒ–。但如果你试ç€æŠŠè¿™ä¸ªå­—å¤åˆ¶å‡ºæ¥ï¼Œä¼šå‘现得到的结果是「马ã€ã€‚

+

[Image: 「指鹿为马ã€]

「指鹿为马ã€

+

这并ä¸æ˜¯ä»€ä¹ˆçµå¼‚事件,因为「马ã€åœ¨ Unicode 中正是 U+9A6C。

+

上述实验表明,PDF 中的「所è§ã€æœªå¿…就是「所得ã€ã€‚åªè¦ /ToUnicode 的内容(较旧的或者英文的 PDF 也å¯èƒ½æ˜¯ /Encoding 属性)å‘生丢失或者错误,文字å¤åˆ¶å°±ä¼šå‡ºçŽ°ä¹±ç ã€‚与此åŒæ—¶ï¼ŒPDF 的显示å´ä¸ä¼šå—到任何影å“(因为文字绘制是由与编ç å®Œå…¨æ— å…³çš„语å¥æŽ§åˆ¶çš„)。å过æ¥æ€è€ƒï¼Œåˆ©ç”¨ä¹±ç æ•…障的原ç†ï¼Œä¹Ÿå¯ä»¥é€šè¿‡æ•…æ„ç ´å或者修改 CMap,制造出表é¢æ­£å¸¸ä½†å®Œå…¨æ— æ³•å¤åˆ¶å’Œæœç´¢çš„文件,间接达到加密的效果。

+为什么 PDF 很难编辑? +

除了显示ã€å¤åˆ¶ä¸Šçš„问题,PDF 难以编辑的特性也ç»å¸¸å¼•å‘用户的疑问。ä¸ä»…大多数å¯ä»¥å…费获得的 PDF 工具都åªæœ‰é˜…读功能,å³ä½¿æ˜¯é‚£äº›å…·æœ‰ç¼–辑功能的软件,编辑效果也往往达ä¸åˆ°é¢„期,甚至å而影å“其他部分的格å¼ã€‚

+

如何解释 PDF 的这一特å¾å‘¢ï¼Ÿè¿˜æ˜¯å›žåˆ°æœ¬æ–‡ä¸€ä»¥è´¯ä¹‹çš„æ€è·¯ï¼šæŠŠ PDF 看作真实的纸张æ¥ç†è§£ã€‚

+

试想你手上有一份纸质笔记或者文件需è¦ä¸´æ—¶æ¶‚改。生活ç»éªŒå‘Šè¯‰æˆ‘们下é¢å‡ ç‚¹äº‹å®žï¼šç¬¬ä¸€ï¼Œæ¶‚改æ“作åªå¯èƒ½æ˜¯å°èŒƒå›´çš„ã€é€å­—é€è¯çš„。å³ä½¿çœŸçš„ä¸å¾—ä¸ä¿®æ”¹ä¸€å¤§æ®µå†…容,你也åªèƒ½æ…¢æ…¢ç”¨æ¶‚改液或者胶带把它们抹去。第二,纸上原有的内容越多ã€æ ¼å¼è¶Šå¤æ‚,涂改起æ¥å°±è¶Šå›°éš¾ã€‚在增删文字时必须è¦è€ƒè™‘到å‰åŽæ–‡çš„é™åˆ¶ï¼›åŽŸæ¥çš„内容越密集,留下的修改余地就越å°ã€‚第三,很难实现完全ä¸ç•™ç—•è¿¹çš„涂改。任何涂改æ“作都会对纸张造æˆæŸä¼¤ï¼›å¯¹æ–‡å­—的修正,从纸张的角度看å而是一ç§ã€Œæ±¡æŸ“ã€ã€‚

+

这些æ述几乎完全适用于 PDF 文件的编辑,而原因还是è¦ä»Žå†…部结构æ¥åˆ†æžã€‚å‰æ–‡ä¸­ï¼Œæˆ‘们已ç»äº†è§£äº† PDF 语å¥å¦‚何在局部层é¢ç»˜åˆ¶å‡ºæ–‡æœ¬å’Œå›¾å½¢ï¼Œè¿™é‡Œå†ä»Žå®è§‚角度简å•ä»‹ç»ä¸€ä¸‹ PDF 的构造。

+

一个 PDF 文件主è¦ç”±å››ä¸ªéƒ¨åˆ†æž„æˆï¼Œä¾æ¬¡æ˜¯æ–‡ä»¶å¤´ï¼ˆHeader)ã€ä¸»ä½“(Body)ã€äº¤å‰å¼•ç”¨è¡¨ï¼ˆCross-Reference Table)和文件尾(Trailer)。在其中最é‡è¦çš„主体部分,页é¢ã€æ–‡æœ¬ç­‰å…ƒç´ å’Œå­—体ã€å›¾ç‰‡ç­‰èµ„æºå­˜å‚¨åœ¨ç§°ä¸ºã€Œå¯¹è±¡ã€ï¼ˆobject)的å•å…ƒä¸­ã€‚æ¯ä¸ªå¯¹è±¡éƒ½æœ‰å”¯ä¸€çš„ç¼–å·ï¼Œå¹¶ä¸”å¯ä»¥æ— å°½åœ°ç›¸äº’包å«å’Œå¼•ç”¨ã€‚例如,一个编å·ä¸º 2 的页é¢å¯¹è±¡å¯ä»¥åŒ…å«ä¸€ä¸ªç¼–å·ä¸º 3 çš„å­å¯¹è±¡æ¥æ述页é¢å°ºå¯¸ï¼ŒåˆåŒ…å«ä¸€ä¸ªç¼–å·ä¸º 4 çš„å­å¯¹è±¡æ¥å­˜å‚¨è¯¥é¡µä¸Šçš„文本;åŽè€…在指定字体时,åˆå¯ä»¥å¼•ç”¨ä¸€ä¸ªç¼–å·ä¸º 20 的字体对象,而这个字体对象的大å°ã€å­—符宽度ã€æ›²çº¿è½®å»“等信æ¯ä¹Ÿæ˜¯åˆ†åˆ«å­˜å‚¨åœ¨å…¶ä»–对象中的;等等。

+

[Image: 一个å¯èƒ½çš„ PDF 的构造]

一个å¯èƒ½çš„ PDF 的构造

+

è¯»å– PDF 时,阅读器首先从文件头确定文件类型和版本å·ï¼Œæ—‹å³è·³è½¬åˆ°æ–‡ä»¶å°¾ï¼ŒèŽ·å–交å‰å¼•ç”¨è¡¨çš„ä½ç½®ï¼ˆä»¥å­—节ä½ç½®è¡¨ç¤ºï¼‰ï¼Œå®ƒè¿›è€Œåˆ—出了 PDF 中所有对象的ä½ç½®ã€‚凭借这张表,阅读器就能找到æ¯ä¸ªå¯¹è±¡ï¼Œè§£æžå®ƒä»¬ä¹‹é—´çš„包å«å’Œå¼•ç”¨å…³ç³»ï¼Œå¹¶æŒ‰ç…§å…¶ä¸­çš„命令将文件的全貌绘制出æ¥ã€‚

+

这样的构造对 PDF 的编辑有什么潜在影å“呢?å¯ä»¥çœ‹å‡ºï¼ŒPDF 的结构是高度固化并且相互ä¾èµ–的。它就åƒæ˜¯ä¸€ä¸ªç§¯æœ¨å †ï¼Œå…¶ä¸­çš„æ¯ä¸€å—「积木ã€â€”—PDF 中的一个对象——都ä¸æ˜¯ç‹¬ç«‹çš„,而是与四周的其他积木相互支撑。编辑 PDF 文件就如åŒè¯•å›¾æ”¹å˜ä¸€ä¸ªæˆåž‹çš„积木堆:移去或挪动一å—积木(对象),周围的木å—ä¸ä»…ä¸ä¼šè‡ªåŠ¨è¡¥ä¸Šç©ºç™½ï¼Œå而å¯èƒ½å› ä¸ºå¤±åŽ»æ”¯æ’‘(对象的交å‰å¼•ç”¨å…³ç³»ï¼‰è€Œå˜å½¢ã€‚比如,从 PDF 中删去一段,åŽé¢çš„文本并ä¸ä¼šè‡ªåŠ¨è°ƒæ•´ä½ç½®ï¼›ç›¸å,如果绘制它们的语å¥å¼•ç”¨äº†è¢«åˆ é™¤éƒ¨åˆ†çš„æ ·å¼ï¼Œè¿™äº›æ ·å¼ä¹Ÿå¯èƒ½éšç€åˆ é™¤æ“作而丢失。

+

[Image: 用 PDF Expert 删除一段文字,åŽé¢çš„段è½æ— æ³•è‡ªåŠ¨è¡¥é½ç©ºéš™]

用 PDF Expert 删除一段文字,åŽé¢çš„段è½æ— æ³•è‡ªåŠ¨è¡¥é½ç©ºéš™

+

而如果è¦å¾€ç§¯æœ¨å †ä¸Šå¢žåŠ ä¸€å———往 PDF 中增加内容,é¢ä¸´çš„风险åŒæ ·å¾ˆå¤§ã€‚且ä¸è®ºçŽ°æœ‰çš„空隙是å¦å…许这么åšï¼Œä½ ä¹Ÿæ— æ³•é¢„知剩余的积木å—中是å¦æœ‰è‡ªå·±éœ€è¦çš„。例如,出于节çœä½“积的考虑,PDF 中嵌入的字体文件往往都是高度「å­é›†åŒ–ã€çš„,åªåŒ…å«æ–‡ä»¶ä¸­ç”¨ä¸Šçš„那部分字符。如果准备追加的字æ°å¥½ä¸åœ¨å…¶åˆ—,就很å¯èƒ½å¼•å‘显示问题。

+

退一步说,å³ä½¿ç¼–辑æ“作幸è¿åœ°æ²¡æœ‰å¼•å‘任何问题,它的æˆæœ¬ä¹Ÿæ˜¯å¾ˆé«˜çš„。哪怕åªæ˜¯æ’入一个字æ¯çš„「微é‡ã€ç¼–辑,也会导致排在它之åŽæ‰€æœ‰å†…容的地å€å‘åŽå移 1 字节,于是ä¾é å­—节计数æ¥å®šä½çš„交å‰å¼•ç”¨è¡¨å¿…须整个é‡å†™ã€‚å‡å¦‚你的改动幅度更大(例如用了新的字体),就需è¦é æ–°å¢žå¯¹è±¡æ¥å®žçŽ°ï¼ŒäºŽæ˜¯å…¶ä»–对象也必须相应更新以å映对象编å·çš„å˜åŒ–。å¦ä¸€æ–¹é¢ï¼Œä»Ž PDF 中删去内容时,编辑器未必能èªæ˜Žåˆ°æŠŠä¸å†æœ‰ç”¨çš„对象一并删去。很多时候,这些æˆä¸ºç©ºå£³çš„对象就被「抛弃ã€åœ¨åŽŸåœ°ï¼Œç™½ç™½å ç”¨ç©ºé—´ï¼Œå¹¶ä¸”增加阅读器解æžæ–‡ä»¶æ—¶çš„计算æˆæœ¬ã€‚

+

作为对比,Word æ ¼å¼é‚£ç§æ ‡è®°è¯­è¨€çš„特性——在纯文本上包裹标签æ¥è®°è½½æ ¼å¼ä¿¡æ¯â€”—决定了它对于编辑æ“作是å分å‹å¥½çš„。由于文本的内容和格å¼ç›¸äº’独立,修改文本内容并ä¸ä¼šå¯¹æ ¼å¼é€ æˆå½±å“,å之亦然。这就好比把水倒在有造型的容器中,æ¢æŽ‰ä¸€éƒ¨åˆ†æ°´ï¼Œå‰©ä¸‹çš„æ°´ä¾ç„¶æœä»ŽäºŽå®¹å™¨çš„形状;æ¢ä¸€ä¸ªå®¹å™¨ï¼Œæ°´çš„形状éšä¹‹å˜åŒ–,但还是原æ¥é‚£äº›æ°´ã€‚

+

需è¦åŠ ä»¥åŒºåˆ†çš„是,对 PDF 的标注(annotation)æ“作——包括高亮ã€ä¸‹åˆ’线ã€ç¬”记等——ä¸å±žäºŽã€Œç¼–辑ã€çš„范畴。在实现层é¢ï¼ŒPDF 中的标注是附属于所在页é¢çš„å­å¯¹è±¡ï¼Œå…¶ä¸­è®°è½½äº†æ ‡æ³¨çš„类型ã€ä½ç½®ã€å½¢çŠ¶ï¼ˆå¦‚果有)ã€æ–‡æœ¬ï¼ˆå¦‚果有)等,与存储文件内容的对象相互独立。它们就åƒæ˜¯çº¸ä¸Šçš„便利贴,å¯ä»¥éšæ—¶ç§»é™¤è€Œä¸ç•™ä¸‹ç—•è¿¹ã€‚

+

那作为用户,如果确实é‡åˆ°ç¼–辑 PDF 的需求,应当如何解决呢?

+

首先,应当考虑是ä¸æ˜¯çœŸçš„需è¦ä¿®æ”¹ PDF 文件本身。å‡å¦‚你将一份文件打å°å‡ºæ¥ä»¥åŽå‘现了错别字,第一å应æ怕是回到电脑上修改ã€ç„¶åŽé‡æ–°æ‰“å°é‚£ä¸€é¡µï¼Œè€Œä¸æ˜¯ç”¨èƒ¶å¸¦ç²˜åŽ»é”™å­—然åŽæ‰‹å†™ã€‚类似地,既然 PDF 文件的本质就是「电å­çº¸å¼ ã€ï¼Œå¦‚æžœå‘现错误,最正确和简æ·çš„åšæ³•åº”该是改动用于生æˆè¿™ä¸ª PDF 的原始文档,然åŽé‡æ–°å¯¼å‡ºä¸€é,而ä¸æ˜¯è€ƒè™‘怎么修改 PDF 本身。

+

å³ä½¿æ‰‹ä¸Šæ²¡æœ‰ç”Ÿæˆ PDF 的原始文档,在直接修改 PDF 时也应该尽é‡æŽ§åˆ¶ç¼–辑幅度。因为修改越多,对文件的「污染ã€å°±è¶Šå¤§ï¼Œä¹Ÿå°±è¶Šæœ‰å¯èƒ½é€ æˆæ ¼å¼æ··ä¹±ã€ä½“积膨胀等结果。如果è¦ä¿®æ”¹çš„内容确实很多,甚至å¯ä»¥è€ƒè™‘转æ¢/ OCR 为其他格å¼â€”编辑文字—导出为 PDF 这样的路径,或许效果å而比直接编辑好得多。

+

最åŽï¼Œå°½ç®¡ PDF 对编辑æ“作éžå¸¸ä¸å‹å¥½ï¼Œä½†æ¯•ç«Ÿã€Œäº‹åœ¨äººä¸ºã€ï¼Œä¸åŒè½¯ä»¶çš„编辑能力有很大差别。例如,æ¥è‡ªç¬¬ä¸€æ–¹çš„ Acrobat Pro 就明显高于平å‡æ°´å¹³ã€‚æ ¹æ®æµ‹è¯•ï¼Œå®ƒä¸ä»…能从 PDF 的布局中判断出段è½å¹¶ä»¥æ­¤ä¸ºå•ä½ç¼–辑(而ä¸æ˜¯å­¤ç«‹çš„文本å—),还能在编辑中一定程度上维æŒåŽŸæœ‰çš„对é½æ–¹å¼ã€æ®µé—´è·ç­‰è®¾ç½®ã€‚更为「黑科技ã€çš„是 Acrobat çš„ OCR 功能,它甚至å¯ä»¥åšåˆ°åœ¨è¯†åˆ«æ–‡å­—çš„åŒæ—¶ï¼Œå°†æ–‡æœ¬çŸ¢é‡åŒ–åŽã€åˆ†ç¦»åˆ°ä¸ŽèƒŒæ™¯ç‹¬ç«‹çš„图层中,从而能增删扫æ版 PDF 中的文字。

+

[Image: Acrobat å¯ä»¥å°†æ‰«é¢ç‰ˆ PDF 中的文字矢é‡åŒ–åŽå®žçŽ°ç¼–辑]

Acrobat å¯ä»¥å°†æ‰«é¢ç‰ˆ PDF 中的文字矢é‡åŒ–åŽå®žçŽ°ç¼–辑

+结语 +

任何文件格å¼éƒ½æœ‰è‡ªå·±æœ€æ“…长的用途。对 PDF æ¥è¯´ï¼Œå®ƒæ“…长的领域就是跨平å°äº¤æ¢å’Œæ–‡ä»¶å½’档,而那些需è¦é¢‘ç¹ç¼–辑文本内容和版å¼çš„应用场景,则是其ä¸èƒ½èƒœä»»çš„。åªæ˜¯åœ¨æ—¥å¸¸ä½¿ç”¨ä¸­ï¼Œæˆ‘们常常被 PDF 和其他文档格å¼åœ¨å¤–观上的相似所误导,把它用在了ä¸æ“…长的领域,然åŽå过æ¥æŠ±æ€¨è¿™ç§æ ¼å¼åœ¨ç¼–辑和å¤åˆ¶ä¸­çš„「笨拙ã€ã€‚这多少是错怪了 PDF。本文之所以一å†å°† PDF 类比为实体文档,一方é¢æ˜¯ä¸ºäº†ä¾¿äºŽè§£é‡ŠæŠ€æœ¯åŽŸç†ï¼Œå¦ä¸€æ–¹é¢ä¹Ÿæ˜¯ä¸ºäº†æ供一ç§é€‰ç”¨ PDF æ ¼å¼çš„标准:适åˆæ‰“å°å‡ºæ¥çš„内容,一般也æ‰é€‚åˆã€Œæ‰“å°ã€æˆ PDF。

+

ç†è§£ PDF 的原ç†ä¹Ÿæœ‰åŠ©äºŽæŒ‘选åˆé€‚的阅读/编辑工具。如上所述,软件对瑕疵 PDF 的宽容度和修å¤èƒ½åŠ›ï¼Œå¯¹æ–‡æœ¬æœç´¢ã€å¤åˆ¶çš„识别ã€ä¼˜åŒ–能力等细节,是最值得é‡ç‚¹è€ƒå¯Ÿçš„;这些看似ä¸èµ·çœ¼çš„功能点对使用体验和工作效率有æžå¤§å½±å“。相å,那些频ç¹è¢«å½“作è¥é”€ã€Œäº®ç‚¹ã€çš„功能,特别是 PDF 编辑ã€æ ¼å¼è½¬æ¢ç­‰ï¼Œå而ä¸é‚£ä¹ˆé‡è¦ã€‚因为 PDF 从结构上就ä¸é€‚åˆä¿®æ”¹ï¼Œè¿™äº›æ‰€è°“的编辑功能很难达到用户的预期,何况还有大é‡ç±»ä¼¼äºŽ SmallPDF çš„å…费工具å¯ä»¥æ»¡è¶³ä¸´æ—¶çš„ã€ç²¾åº¦ä¸é«˜çš„编辑需求。至于严肃ã€ä¸“业的 PDF 编辑,Acrobat å¯èƒ½æ˜¯å”¯ä¸€çš„选择。

+

最åŽéœ€è¦è¯´æ˜Žçš„是,PDF 涉åŠçš„技术éžå¸¸å¤æ‚,这篇文章åªæ˜¯ä»Žæ—¥å¸¸ä½¿ç”¨çš„角度åšäº†æœ€ç²—浅的介ç»ã€‚文中很多地方为了便于ç†è§£ï¼Œé‡‡ç”¨çš„解释和比喻是过度简化的。如果对 PDF æ ¼å¼çš„原ç†æœ‰è¿›ä¸€æ­¥çš„兴趣,建议直接阅读 PDF çš„ 标准文件。这份标准虽然å分冗长,但并ä¸éš¾è¯»ã€‚哪怕åªæ˜¯æŒ‘选几个关心的主题æ¥æµè§ˆï¼Œç›¸ä¿¡éƒ½ä¼šå¯¹ç†è§£ PDF æ ¼å¼ä»¥è‡³æŽ’版技术有很大的å¯å‘。

+

延伸阅读:

+
    +
  • PDF Reference and Adobe Extensions to the PDF Specification: Adobe çš„ PDF 文档专页,æ供了 PDF 1.7(æˆä¸º ISO 标准的版本)和 Adobe 基于 PDF 1.7 版所åšåŠŸèƒ½æ‰©å±•çš„文档。
  • +
  • Understanding the PDF File Format: 帮助ç†è§£ PDF æ ¼å¼çš„详尽系列文章,æ¯ç¯‡éƒ½ä¸é•¿ï¼Œè¯­è¨€æ¯”较浅显易懂。
  • +
  • Planet PDF: Foxit 旗下的 PDF 专题网站。页é¢è®¾è®¡å¾ˆè€æ—§ï¼Œä½†æ˜¯èƒ½æ‰¾åˆ°ä¸å°‘探究 PDF æ ¼å¼ç»†èŠ‚的资料。
  • +
  • John Whitington, PDF Explained (O'Reilly Media, 2011): åŠ¨ç‰©å›­ä¸›ä¹¦é‡Œä»‹ç» PDF çš„ä¸æ­¢ä¸€æœ¬ï¼Œè¿™æœ¬å¹´ä»£å久远,但是个人认为是相比之下讲得比较清晰的。
  • +
  • GitHub - PDF 101 - Learn and Play with PDF Source Code: 一个éžå¸¸æœ‰æ„æ€çš„ GitHub 仓库,里é¢æ供了大é‡æ‰‹æ•²ä»£ç åˆ¶æˆçš„ PDF,用文本编辑器打开按照里é¢çš„注释就å¯ä»¥åƒçŽ©æ¸¸æˆä¸€æ ·åšå„ç§ã€Œå®žéªŒã€ï¼Œå¯¹ç†è§£ PDF æ ¼å¼éžå¸¸æœ‰å¸®åŠ©ã€‚
  • +
+

> 下载少数派 客户端ã€å…³æ³¨ å°‘æ•°æ´¾å…¬ä¼—å· ï¼Œè®©ä½ çš„æ•°å­—ç”Ÿæ´»æ›´ç²¾å½©ðŸŽ‰

+