<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>%%CATEGORY%%:rss</title>
		<link>http://ccckmit.wikidot.com</link>
		<description>陳鍾誠的首頁 -- 金門大學 資訊工程系</description>
				<copyright></copyright>
		<lastBuildDate>Sun, 09 Aug 2026 17:13:10 +0000</lastBuildDate>
		
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:site</guid>
				<title>PDF 檔案格式研究 -- 相關網站</title>
				<link>http://ccckmit.wikidot.com/pdf:site</link>
				<description>

&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://get.adobe.com/&quot;&gt;http://get.adobe.com/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://get.adobe.com/tw/reader/&quot;&gt;http://get.adobe.com/tw/reader/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Portable_Document_Format&quot;&gt;http://en.wikipedia.org/wiki/Portable_Document_Format&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 26 Dec 2011 02:46:48 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <ol> <li><a href="http://get.adobe.com/">http://get.adobe.com/</a> <ul> <li><a href="http://get.adobe.com/tw/reader/">http://get.adobe.com/tw/reader/</a></li> </ul> </li> <li><a href="http://en.wikipedia.org/wiki/Portable_Document_Format">http://en.wikipedia.org/wiki/Portable_Document_Format</a></li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:modify</guid>
				<title>PDF 檔案格式研究 -- 最新修改</title>
				<link>http://ccckmit.wikidot.com/pdf:modify</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 26 Dec 2011 02:45:52 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:structure</guid>
				<title>PDF 檔案的內部結構</title>
				<link>http://ccckmit.wikidot.com/pdf:structure</link>
				<description>

&lt;p&gt;為了要將 PDF 文件轉換為 XML，我們首先研究了 PDF 的格式，有關 PDF 格式的資訊大部分都可以從 Adobe PDF Reference [[cite:3]] 這份文件中取得，然而、該文件總共有 1236 頁，要完全研究透徹相當不易，況且、有些資訊還不包含在該文件當中，因此、我們以該文件為參考，然後直接以二進位編輯器閱讀數個中文的 PDF 原始檔，一步步研究出 PDF 格式的結構與意義，以下我們將簡要的說明 PDF 的文件格式，並就我們程式中所採取的關鍵方法進行較深入的探討。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 05:57:02 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>為了要將 PDF 文件轉換為 XML，我們首先研究了 PDF 的格式，有關 PDF 格式的資訊大部分都可以從 Adobe PDF Reference [[cite:3]] 這份文件中取得，然而、該文件總共有 1236 頁，要完全研究透徹相當不易，況且、有些資訊還不包含在該文件當中，因此、我們以該文件為參考，然後直接以二進位編輯器閱讀數個中文的 PDF 原始檔，一步步研究出 PDF 格式的結構與意義，以下我們將簡要的說明 PDF 的文件格式，並就我們程式中所採取的關鍵方法進行較深入的探討。</p> <p>PDF 的核心是 Page Description Language，這是一個以樹狀結構為主的語法，樹中節點採用類似物件導向的設計，因此稱為 obj，這些結構的層次大致如下：</p> <div class="code"> <pre><code>Catalog Pages Page Resources Font Subtype Name BaseFont Encoding ToUnicode Contents [Stream]</code></pre></div> <p>上述結構中的 page 代表的的是 PDF 文件中的一個頁面，contents 代表頁面中的內容，其中的 stream 記載了每個頁面中的文字、影像等資訊，以及這些物件的座標轉換指令，這些指令包含座標定位、物件旋轉、放大縮小等等與排版有關的轉換。</p> <p>許多的 page 頁面會形成頁面集合 pages，而所有的頁面集合會形成目錄 catalog， Catalog 是整棵樹的根節點，要對 PDF 檔案解碼，就必須先找到這個節點。</p> <p>找到 catalog 之後，就可以利用 pages 資訊找到所有頁面，然後利用 page 中的 font 資訊對 contents 進行解碼，font 中的Encoding 資訊可用來將 stream 中的文字代號轉換為 PDF 的標準內碼 cid (Character identity)，然後再利用 ToUnicode 中的資訊將 cid 轉換為 Unicode 編碼，如此即可抽取出 PDF 檔案中的文字。</p> <p>雖然、上述程序說起來並不難，但是，PDF 的設計卻很複雜，例如：PDF 的繁體中文編碼，就有 Identity-H、Identity-V、B5pc-H、B5pc-V、ETen-B5-H、ETen-B5-V、ETenms-B5-H、ETenms-B5-V、ETHK-B5-H、ETHK-B5-V 等字集，而且還可以將 CMap 直接內嵌在 PDF 檔案中成為一個物件，而不需要遵照任何一種編碼法，這些都增加了解碼的困難度。</p> <p>更複雜的是、Stream 的內容通常是壓縮過的，其中最常用的是 Inflate 壓縮法，也就市 zip 檔案中所用的壓縮法，因此、在解開 Stream 之前，必須先檢視是否被壓縮過，若有、則必須先解壓縮才能進行解碼。</p> <p>另一個難以處理的問題是，PDF 中的物件並非以樹狀的層次結構直接儲存，而是以類似超連結的方式所形的樹狀結構，如何連結並沒有限制，因此、常常會在連了四到五層後才能找到所要的節點，這種設計加深了程式的複雜性。</p> <p>為了說明 PDF 的實際結構，以下我們用一個簡單的 PDF 檔案進行說明：</p> <div class="code"> <pre><code>%PDF?1.4 1 0 obj &lt;&lt; /Type /Catalog /Outlines 2 0 R /Pages 3 0 R &gt;&gt; endobj 2 0 obj &lt;&lt; /Type /Outlines /Count 0 &gt;&gt; endobj 3 0 obj &lt;&lt; /Type /Pages /Kids [4 0 R] /Count 1 &gt;&gt;4 0 obj &lt;&lt; /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources &lt;&lt; /ProcSet 6 0 R /Font &lt;&lt; /F1 7 0 R &gt;&gt; &gt;&gt; &gt;&gt; endobj 5 0 obj &lt;&lt; /Length 73 &gt;&gt; stream BT /F1 24 Tf 100 100 Td &lt;bd75a457add3a448a4c6b0d1a6d2a4e5c46dbadeb27aa874b2ce&gt; Tj ET endstream endobj 6 0 obj [/PDF /Text] endobj 7 0 obj &lt;&lt; /Type /Font /Subtype /Type0 /BaseFont /#bc#d0#b7#a2#c5#e9,Bold /Encoding /ETenms-B5-H &gt;&gt; endobj</code></pre></div> <p>其中的 1&#160;0 obj, 2&#160;0 obj &#8230; 等代表物件， endobj 標記代表物件的結束點，而 2&#160;0 R、3&#160;0 R&#8230; 則代表引用，也就是類似超連結的連結方式，因此、從上述範例中，我們可以整理出下列樹狀結構，這樣的結構有助於讀者理解上述 PDF 文件的內容：</p> <div class="code"> <pre><code>Catalog 1 0 Outlines 2 0 Pages 3 0 Page 4 0 Resources ProcSet 6 0 R Font /F1 7 0 R Encoding /ETenms-B5-H Contents 5 0 R Stream BT /F1 24 Tf 100 100 Td &lt;bd75a457add3a448a4c6b0d1a6d2a4e5c46dbadeb27aa874b2ce&gt; Tj ET</code></pre></div> <p>請注意上述結構中的 Stream 標記，BT 代表文字段的開始， /F1&#160;24 Tf 代表字型是 F1、大小是 24， 100&#160;100 Td 代表相對位置移動到 100&#160;100 的地方，而 &lt;bd75a457add3a448a4c6b0d1a6d2a4e5c46dbadeb27aa874b2ce&gt; Tj 則是『線上個人化參考文獻管理系統』經過 ETenms-B5-H 這個 CMap 表格編碼後的結果，範例中的 Font 沒有 ToUnicode 欄位，代表要轉為 Unicode 時可使用預設的轉換法。</p> <p>PDF 的格式實在太複雜了，我們希望在轉換成 XML 後能很容易的處理，因此、我們在設計 OpenPDF 的 XML 格式時就以易處理性為第一考慮，以下是上述範例轉換後的結果。</p> <div class="code"> <pre><code>&lt;?xml encoding=&quot;UTF-8&quot;?&gt; &lt;page&gt; font : 標楷體, Bold 100,100 線上個人化參考文獻管理系統 200, 30 image : logo.gif &lt;/page&gt;</code></pre></div> <p>這樣的表達方式極為簡單，我們稱之為 Easy Document 格式 (簡稱 EzDoc)，EzDoc 相較於 PDF，有下列優點：</p> <ol> <li>檔案是純文字的，可以用一般文字編輯器開啟，不需要專用的閱讀軟體也可以讀，有利於程式人員開發新軟體。</li> <li>影像部分以獨立的檔案儲存，可以用任何影像軟體，不需依賴專用的閱讀軟體。</li> </ol> <p>另外、相對於 Open Document 與 Micorsoft 的 OpenXML，EzDoc 也有下列優勢：</p> <ol> <li>EzDoc 不強求每個標記都要使用 XML 語法，這種設計表面上看來不符合 XML 的原則，但實用上卻非常簡潔，容易處理。</li> <li>EzDoc 將座標以最簡短的方式嵌入 XML 中，即使不壓縮，也不會佔據太大的空間，指令的設計也儘可能簡短，可節省空間。</li> </ol> <p>另外、透過現成的軟體，我們可以輕易的將 EzDoc 的 XML 檔案與相關影像壓縮到同一個檔案中，形成 EzDoc 的壓縮版。例如：若上述 XML 文件的名稱為 test.xml，則壓縮完後所形成的檔案，副檔名將命名為 test.ez，這實際上就是將 test.xml 與 logo.gif 兩個檔案以 zip 方式壓縮後的結果。</p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:introduction</guid>
				<title>PDF 檔案格式簡介</title>
				<link>http://ccckmit.wikidot.com/pdf:introduction</link>
				<description>

&lt;p&gt;PDF 是 Adobe 公司所制定的一種格式，其前身是該公司的 PostScript (PS) 格式，PS 格式乃是由 Adobe 公司的創辦人 John Warnock 所設計的，並於 1985 年正式發行，接著被 Apple 採用於 Cannon 印表機做為傳輸格式，此後 PS 就成了雷射印表機的內建格式，並因此而成為線上出版業的標準格式。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 19 Oct 2010 09:28:09 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>PDF 是 Adobe 公司所制定的一種格式，其前身是該公司的 PostScript (PS) 格式，PS 格式乃是由 Adobe 公司的創辦人 John Warnock 所設計的，並於 1985 年正式發行，接著被 Apple 採用於 Cannon 印表機做為傳輸格式，此後 PS 就成了雷射印表機的內建格式，並因此而成為線上出版業的標準格式。</p> <p>在 PS 被發明之前，點矩陣印表機是主要的電腦列印設備，雖然有些印表機可以列印圖形，但是其編碼格式並不統一，自從 PS 發明以來，迅速佔據了雷射印表機的市場並成為標準列印格式，該格式使得各種文字與圖形可以快速的傳給印表機並且被列印出來。</p> <p>1990 年 Adobe 將 PS 簡化後發展出 PDF 格式，當時 Adobe 公司的 Acrobat PDF Reader 是要付費購買的軟體，後來為了與其他同類產品競爭，因而開放 PDF Reader 免費下載使用，從此 PDF 的使用群迅速擴大，而成為網路上最常用的文件格式。</p> <p>然而、PDF 畢竟是 Adobe 公司的私有格式，而且採用二進位與純文字混合的編碼模式，因此並不像 XML 或 HTML 那樣容易處理，更複雜的是、PDF 並沒有採用 Unicode 等標準字元編碼方式，而是將字元透過 Adobe 公司內建的編碼表進行編碼，使得全文檢索程式無法直接對 PDF 文件進行檢索，因此、許多搜尋引擎都不支援 PDF 的搜尋功能，少數具有PDF搜尋功能的搜尋引擎（像是 Google），也都必須要自行開發程式以便將 PDF 文件轉換成文字檔以便搜尋，但是對大多數的程式設計人員來說，對 PDF 進行加值處理仍然困難重重。</p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:openpdf</guid>
				<title>OpenPDF：一個將PDF轉為XML的開放原始碼軟體</title>
				<link>http://ccckmit.wikidot.com/pdf:openpdf</link>
				<description>

&lt;p&gt;下載：&lt;a href=&quot;http://ccckmit.wdfiles.com/local--files/pdf:openpdf/OpenPDF.doc&quot;&gt;OpenPDF.doc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 05:52:00 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>下載：<a href="http://ccckmit.wdfiles.com/local--files/pdf:openpdf/OpenPDF.doc">OpenPDF.doc</a></p> <p>PDF是廣為人使用的文件格式，但卻是一個封閉的私有格式，很少有程式能將 PDF 文件完全正確的解碼，這阻礙了文件的公開化，許多搜尋引擎無法搜尋PDF 文件的內容，PDF 文件的加值運用 - 例如資訊抽取、自動摘要、全文檢索、引用分析等等 - 也因此而困難重重，有鑑於此、我們成立了 OpenPDF 這個開放原始碼計畫，目標在開發一個將 PDF 文件轉換成 XML 的軟體，以使程式設計人員能夠輕易的處理 PDF 文件，更進一步、我們希望透過 OpenPDF將所有 PDF 文件轉換成 XML 格式，並開發出此種 XML 格式的閱讀程式，使文件資訊徹底公開化。</p> <h1><span>簡介</span></h1> <p>PDF 是 Adobe 公司所制定的一種格式[cite:1]，其前身是該公司的 PostScript (PS)[cite:2] 格式，PS 格式乃是由 Adobe 公司的創辦人 John Warnock 所設計的，並於 1985 年正式發行，接著被 Apple 採用於 Cannon 印表機做為傳輸格式，此後 PS 就成了雷射印表機的內建格式，並因此而成為線上出版業的標準格式。</p> <p>在 PS 被發明之前，點矩陣印表機是主要的電腦列印設備，雖然有些印表機可以列印圖形，但是其編碼格式並不統一，自從 PS 發明以來，迅速佔據了雷射印表機的市場並成為標準列印格式，該格式使得各種文字與圖形可以快速的傳給印表機並且被列印出來。</p> <p>1990 年 Adobe 將 PS 簡化後發展出 PDF 格式，當時 Adobe 公司的 Acrobat PDF Reader 是要付費購買的軟體，後來為了與其他同類產品競爭，因而開放 PDF Reader 免費下載使用，從此 PDF 的使用群迅速擴大，而成為網路上最常用的文件格式。</p> <p>然而、PDF 畢竟是 Adobe 公司的私有格式，而且採用二進位與純文字混合的編碼模式，因此並不像 XML 或 HTML 那樣容易處理，更複雜的是、PDF 並沒有採用 Unicode 等標準字元編碼方式，而是將字元透過 Adobe 公司內建的編碼表進行編碼，使得全文檢索程式無法直接對 PDF 文件進行檢索，因此、許多搜尋引擎都不支援 PDF 的搜尋功能，少數具有PDF搜尋功能的搜尋引擎（像是 Google），也都必須要自行開發程式以便將 PDF 文件轉換成文字檔以便搜尋，但是對大多數的程式設計人員來說，對 PDF 進行加值處理仍然困難重重。</p> <p>有鑑於此、我們建立了 OpenPDF 專案計畫，其目的乃是將 PDF 轉換成 XML 格式，使得任何程式設計人員都可以輕易的使用 PDF 文件，並對這些文件進行『檢索、摘要、翻譯、註解或轉換』等加值處理，另外、為了方便起見，OpenPDF 也提供將 PDF 轉換為 HTML 與純文字檔的功能。</p> <h1><span>文獻回顧</span></h1> <p>盡管 PDF 是 Adobe 公司專有的文件格式，然而、由於 Adobe 公司希望能藉助其他程式社群的力量，以擴展市場，因此、將 PDF 的規格與相關資源公開，這使得 PDF 的流傳更為廣泛，也讓許多 PDF 工具紛紛被開發出來，數量達上千種之多，甚至有專門的網站負責蒐集 PDF 相關工具的資訊，Planet PDF 是其中蒐集最完整的網站之一。</p> <p>Planet PDF 對 PDF 工具的分類，共分為 14 類，如下表所示：</p> <ol> <li>Prepress, Print &amp; PDF/X</li> <li>Editing &amp; Management</li> <li>Creation &amp; Conversion</li> <li>Developer，</li> <li>Extraction</li> <li>Searching &amp; Indexing</li> <li>Viewers</li> <li>Forms &amp; FDF</li> <li>Color &amp; Imposition</li> <li>Security &amp; DRM</li> <li>Stamp &amp; Watermark</li> <li>Server-side</li> <li>Split, Merge &amp; Append</li> <li>Links &amp; Bookmarks</li> </ol> <p>在 Planet PDF 中，我們可以找到許多商用 PDF 軟體，其中有很多工具可以將 XML 文件透過 XSLT 轉換為 PDF 檔案 [註1]，也有一些工具可以將 PDF 轉換成純文字檔案 [註2]。</p> <p>雖然 Adobe 公司將規格公開了，但是卻極力的保護其在 PDF 軟體上的主導權，並確保能從 PDF 上賺回豐厚的利潤，因此、除了 Acrobat PDF Reader 之外，其餘的軟體 - 例如 Acrobat Writer、Acrobat Distiller 等，都是要付費使用的，Adobe 公司甚至更進一步對 PDF 的協力開發廠商收費，像是 PDF Library SDK[cite:4]、Acorbat SDK[cite:5] 等函式庫，也是要花費購買、並且經過 Adobe 公司審查，這顯然是 Adobe 公司為了防止其他廠商進入 Adobe 的核心 PDF 技術所採取的一種方式。</p> <p>在 PDF 解碼的過程當中，CMap 是一種重要的字元對應表，記載了各類字碼與 PDF 內碼的對應方式，例如：ETenms-B5-H 這個CMap 檔案就記載了倚天版的繁體中文碼對應到 PDF 內碼的方式，而這些檔案的一開始都記載了 All Right Reserved 的版權宣告，這使得 PDF 工具軟體的開發人員除了面對技術困難之外，還要擔心被 Adobe 公司告的問題。</p> <p>在筆者開始撰寫 OpenPDF 時，並沒有任何工具可以將 PDF 轉換成 XML 文件，這究竟是因為轉換的難度太高，或者是 Adobe 公司管控太嚴，我們無從得知，但是這類工具極為稀少卻是事實。</p> <p>在開放原始碼的社群當中，也有為數不少的 PDF 工具程式，這些程式通常可以在 SourceForge 網站中找到，其中較知名的有：iText、PDFBox、XPDF 等等。</p> <p>Acrobat 軟體本身有分免費與付費兩個版本，付費版的 Acrobat 可以加裝一個 XML Plug-In，即可具有將 PDF 文件存檔為 XML 的功能 (本為寫作時為 Beta 2 版本)，但是免費版的 Acrobat Reader 則沒有這個功能。</p> <p>雖然已有這麼多的 PDF 工具，但經過我們測試之後，卻發現下列情況，</p> <ol> <li>商業版的軟體除了 Adobe SDK 之外，PDF2text, Solid Converter PDF 都無法正確的將所有的 PDF 檔案轉換成純文字檔。</li> <li>開放原始碼的工具，都無法正確的處理中文、日文、韓文等亞洲語言，轉換後會得到一堆亂碼。</li> </ol> <p>因此、為了進行 PDF 文件的加值處理，我們不得不自行撰寫 PDF 文件的解碼程式，因而建立了 OpenPDF 的專案。</p> <p>前述的 PDF 工具，通常是為了要讓程式設計人員，可以輕鬆的建立 PDF 文件，而不是將資訊從 PDF 文件中抽取出來，<br /> 少數具有抽取功能的專案，就我們所知，都無法處理中文。</p> <h1><span>相關軟體比較</span></h1> <p>這些的 PDF 轉換工具當中，有些可以將 PDF 中的文字抽取出來，以下是我們所知的相關工具程式列表：</p> <table class="wiki-content-table"> <tr> <td>軟體名稱</td> <td>版本</td> <td>授權</td> <td>文字轉換程式</td> <td>用法範例</td> </tr> <tr> <td>Solid Converter PDF</td> <td>2.0</td> <td>商用付費</td> <td>SolidConverterPDF.exe, SolidConverterPDF /i test1.pdf /o test1.txt</td> </tr> <tr> <td>iText</td> <td>1.3.6</td> <td>MPL</td> <td>無</td> </tr> <tr> <td>PDF Box</td> <td>0.7.2</td> <td>BSD</td> <td>ExtractText.exe</td> </tr> <tr> <td>Multivalent</td> <td>20060102</td> <td>GPL</td> <td>tool.doc.ExtractText</td> </tr> <tr> <td>XPDF</td> <td>3.01</td> <td>GPL</td> <td>pdftotext.exe</td> </tr> <tr> <td>PJX</td> <td>1.3.5</td> <td>GPL</td> <td>com.etymon.pj.samples.UncompressPdf</td> </tr> <tr> <td>OpenPDF</td> <td>0.4</td> <td>BSD</td> <td>openpdf.convertToXml</td> </tr> </table> <p>經過我們的測試 (在 MS Windows XP上)，這些轉換工具的在處理各種語言的文件上，表現狀況如下：</p> <table class="wiki-content-table"> <tr> <td>軟體名稱</td> <td>英文轉純文字</td> <td>中日韓文轉純文字</td> <td>轉換為 XML</td> </tr> <tr> <td>Solid Converter PDF</td> <td>正常</td> <td>可以、但部分檔案轉換失敗、沒有任何輸出</td> <td>無</td> </tr> <tr> <td>iText</td> <td>無</td> <td>無</td> <td>無</td> </tr> <tr> <td>PDF Box</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>Multivalent</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>XPDF</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>PJX</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>OpenPDF</td> <td>正常</td> <td>正常</td> <td>正常</td> </tr> </table> <p>但是、雖然 OpenPDF 在中日韓文處理的處理上較具優勢，但在PDF建立與產生、圖形抽取等方面，則付之闕如，其比較表如下：</p> <table class="wiki-content-table"> <tr> <td>軟體名稱</td> <td>PDF虛擬印表機</td> <td>以程式建立 PDF 文件</td> <td>圖形抽取</td> </tr> <tr> <td>Solid Converter PDF</td> <td>有</td> <td>可以、但部分檔案轉換失敗、沒有任何輸出</td> <td>無</td> </tr> <tr> <td>iText</td> <td>無</td> <td>有</td> <td>無</td> </tr> <tr> <td>PDF Box</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>Multivalent</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>XPDF</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>PJX</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>OpenPDF</td> <td>正常</td> <td>正常</td> <td>正常</td> </tr> </table> <h1><span>OpenPDF 的現況</span></h1> <p>*Missing features and possible extensions<br /> *The popularity of the project (e.g., the number of downloads from OSSF, the user group size, the number of follow-up projects, etc.)<br /> *Evidence of software adoption (e.g., products providing significant services based on the software)</p> <p>OpenPDF 專案乃是 Chinese-Paper 專案的子專案，Chinese-Paper 專案企圖建立一個極大量中文論文資料庫，這個資料庫<br /> 包含網路上可取得的所有中文論文，並經過程式自動整理，建立論文之間的引用關係，以提供中文論文的讀者與作者<br /> 一個自由發表與閱讀的環境。</p> <p>Chinese-Paper 專案乃是受到 Citeseer 網站的啟發，Citeseer 是一個專門蒐集資訊科學相關論文的資料庫網站，<br /> 提供論文的檢索與下載功能，並且建立了論文間的引用關係，並統計出引用率，然而、Citeseer 並不蒐錄中文論文；<br /> Chinese-Paper專案的目的就是要模仿 Citeseer ，但著重在中文論文的蒐集與引用分析上，使中文論文的發表與使用<br /> 能更為方便。</p> <p>為了要建立 Chinese-Paper 資料庫，我們撰寫了一個 Crawler 程式(Easy-Crawler)，用來自動抓取網路上的 PDF 檔案，<br /> 當 PDF 檔案抓回來後，經過 OpenPDF 解碼為 XML，然後抽取出其中的重要資訊，包含標題、作者、參考文獻等資訊，<br /> 接著利用參考文獻建立引用關係，以建立一個類似 Citeseer 網站的論文資料庫，</p> <p>Chinese-Paper 專案於 2005 年 7 月開始，9 月初步完成 Crawler 與 Google API 的程式，抓下了一萬篇的 PDF 論文，<br /> 接著在進行 PDF 論文解碼時，卻發現目前的開放原始碼軟體都無法正確的將文件解碼成中文，後來購買了商用的<br /> SolidConverterPDF 使用，可以解出部分的中文檔案，但卻也有許多檔案解碼失敗，甚至導致當機的狀況，因此、<br /> 我們開始著手建立 OpenPDF 計畫，從 2005 年底開始，經歷了數個月的研究測試後，開發出將 PDF 轉換為 XML 的程式。</p> <p>2005 年 10 月開始，OpenPDF 的程式連同幾份文件，被放在作者的私人網站上，2006/1/26日，一位華藝數位藝術公司的<br /> 楊小姐於網路上搜尋到這些文件，來信索取原始碼，作者於是意識到應該將程式於開放原始碼社群公開了，2006/2/27日<br /> 於 SourceForge 與 OpenFoundary 上申請建立專案，3/3 開始將程式公開，由於公開的時間過短，使用群尚不明顯。</p> <p>然而、由於作者對 PDF 的理解尚不完全，因此、OpenPDF 目前尚無法將影像與圖形的部份抽出，這代表 OpenPDF 尚未<br /> 成熟，有相當大的改進空間，然而、對於以文字為主的應用，例如全文檢索、資訊抽取、論文引用分析等應用而言，<br /> OpenPDF 已經可以穩定的被使用。</p> <h1><span>OpenPDF 的未來</span></h1> <p>我們不只希望能夠將 PDF 文件轉換成為 XML 文件，更進一步的希望能開發出</p> <p>我們希望能有更多人加入 OpenPDF 與 Chinese-Paper 的計劃當中，以建立一個開放自由的論文環境，使得中文論文資源<br /> 可以有效的管理與累積，以建立高品質的研究環境。</p> <p>另外、受到 Wikipedia 的啟發，更長遠來看，我們希望建立 Open-Publish 計畫，以建立更自由開放的出版環境，<br /> 使得人人都可以自由的在網路上出版論文、書籍、影片等等，透過 Open-Publish 平台，作者可以自行選擇授權機制，<br /> 輕易的在網路上寫作並出版，而讀者也可以透過該授權，輕鬆的閱讀這些作品，這些授權機制，包含<br /> Create Commons License(CCL)、GNU Free Document License (GFDL)、以及以頁數計費的商業授權等等，<br /> 透過作者自行選擇的授權機制，所有文件都可以公開的在網路上合法的閱讀、修改、甚至是共同創作。</p> <h1><span>參考文獻</span></h1> <ol> <li>PDF in Wikipedia - [[<a href="http://en.wikipedia.org/wiki/Portable_Document_Format">http://en.wikipedia.org/wiki/Portable_Document_Format</a>]]</li> <li>PostScript in Wikipedia - [[<a href="http://en.wikipedia.org/wiki/PostScript">http://en.wikipedia.org/wiki/PostScript</a>]]</li> <li>Planet PDF 討論區 - [[<a href="http://www.planetpdf.com/">http://www.planetpdf.com/</a>]]</li> <li>iText, a Free Java PDF Library - [[<a href="http://www.lowagie.com/iText/">http://www.lowagie.com/iText/</a>]] <ul> <li>iText Tutorial : [[<a href="http://itextdocs.lowagie.com/tutorial/">http://itextdocs.lowagie.com/tutorial/</a>]]</li> </ul> </li> <li>Adobe Acrobat SDK : [[<a href="http://partners.adobe.com/public/developer/acrobat/sdk/index.html">http://partners.adobe.com/public/developer/acrobat/sdk/index.html</a>]]</li> <li>Adobe PDF Library : [[<a href="http://partners.adobe.com/public/developer/pdf/library/index.html">http://partners.adobe.com/public/developer/pdf/library/index.html</a>]]</li> <li>PDF Reference, fifth edition, Adobe Portable Document Format Version 1.6, Adobe Systems Incorporated.</li> <li>Open Document in Wikipedia - [[<a href="http://en.wikipedia.org/wiki/OpenDocument">http://en.wikipedia.org/wiki/OpenDocument</a>]]</li> <li>Microsoft Office Open XML - [[<a href="http://en.wikipedia.org/wiki/Microsoft_Office_Open_XML">http://en.wikipedia.org/wiki/Microsoft_Office_Open_XML</a>]]</li> <li><a href="http://www.freedownloadscenter.com/Utilities/File_Cataloging_Utilities/PDF_to_Text__pdf2text__SDK_COM.html">http://www.freedownloadscenter.com/Utilities/File_Cataloging_Utilities/PDF_to_Text__pdf2text__SDK_COM.html</a> <ul> <li>PDF to Text (pdf2text) SDK-COM 3.0</li> </ul> </li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:main</guid>
				<title>免費電子書 -- PDF 檔案格式研究</title>
				<link>http://ccckmit.wikidot.com/pdf:main</link>
				<description>

&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/pdf:introduction&quot;&gt;PDF 檔案格式簡介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/pdf:structure&quot;&gt;PDF 檔案的結構&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/pdf:streamcoding&quot;&gt;PDF 檔案內文字串 (Stream) 的編碼方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/pdf:toxml&quot;&gt;如何將 PDF 轉換為 XML？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/pdf:tools&quot;&gt;PDF 的相關工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/pdf:ref&quot;&gt;PDF 檔案格式的相關參考文獻&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 05:46:15 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <ol> <li><a href="http://ccckmit.wikidot.com/pdf:introduction">PDF 檔案格式簡介</a></li> <li><a href="http://ccckmit.wikidot.com/pdf:structure">PDF 檔案的結構</a></li> <li><a href="http://ccckmit.wikidot.com/pdf:streamcoding">PDF 檔案內文字串 (Stream) 的編碼方式</a></li> <li><a href="http://ccckmit.wikidot.com/pdf:toxml">如何將 PDF 轉換為 XML？</a></li> <li><a href="http://ccckmit.wikidot.com/pdf:tools">PDF 的相關工具</a></li> <li><a href="http://ccckmit.wikidot.com/pdf:ref">PDF 檔案格式的相關參考文獻</a></li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:ref</guid>
				<title>PDF 檔案格式研究 -- 參考文獻</title>
				<link>http://ccckmit.wikidot.com/pdf:ref</link>
				<description>

&lt;ol&gt;
&lt;li&gt;PDF in Wikipedia - &lt;a href=&quot;http://en.wikipedia.org/wiki/Portable_Document_Format&quot;&gt;http://en.wikipedia.org/wiki/Portable_Document_Format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PostScript in Wikipedia - &lt;a href=&quot;http://en.wikipedia.org/wiki/PostScript&quot;&gt;http://en.wikipedia.org/wiki/PostScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Planet PDF 討論區 - &lt;a href=&quot;http://www.planetpdf.com/&quot;&gt;http://www.planetpdf.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;iText, a Free Java PDF Library - &lt;a href=&quot;http://www.lowagie.com/iText/&quot;&gt;http://www.lowagie.com/iText/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Multivalent, - &lt;a href=&quot;http://www.lowagie.com/iText/&quot;&gt;http://www.lowagie.com/iText/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PDFBox, - &lt;a href=&quot;http://www.lowagie.com/iText/&quot;&gt;http://www.lowagie.com/iText/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PJX, - &lt;a href=&quot;http://www.lowagie.com/iText/&quot;&gt;http://www.lowagie.com/iText/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;XPDF, - &lt;a href=&quot;http://www.lowagie.com/iText/&quot;&gt;http://www.lowagie.com/iText/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adobe Acrobat SDK : &lt;a href=&quot;http://partners.adobe.com/public/developer/acrobat/sdk/index.html&quot;&gt;http://partners.adobe.com/public/developer/acrobat/sdk/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adobe PDF Library : &lt;a href=&quot;http://partners.adobe.com/public/developer/pdf/library/index.html&quot;&gt;http://partners.adobe.com/public/developer/pdf/library/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PDF Reference, fifth edition, Adobe Portable Document Format Version 1.6, Adobe Systems Incorporated.&lt;/li&gt;
&lt;li&gt;Open Document in Wikipedia - &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenDocument&quot;&gt;http://en.wikipedia.org/wiki/OpenDocument&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open Document Format for Office Applications (OpenDocument) v1.0 OASIS Standard, 1 May 2005 - &lt;a href=&quot;http://www.oasis-open.org/committees/download.php/12572/OpenDocument-v1.0-os.pdf&quot;&gt;http://www.oasis-open.org/committees/download.php/12572/OpenDocument-v1.0-os.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft Office 2003 XML Reference Schemas &lt;a href=&quot;http://www.microsoft.com/office/xml/default.mspx&quot;&gt;http://www.microsoft.com/office/xml/default.mspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft Office Open XML - &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_Office_Open_XML&quot;&gt;http://en.wikipedia.org/wiki/Microsoft_Office_Open_XML&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 06:34:12 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <ol> <li>PDF in Wikipedia - <a href="http://en.wikipedia.org/wiki/Portable_Document_Format">http://en.wikipedia.org/wiki/Portable_Document_Format</a></li> <li>PostScript in Wikipedia - <a href="http://en.wikipedia.org/wiki/PostScript">http://en.wikipedia.org/wiki/PostScript</a></li> <li>Planet PDF 討論區 - <a href="http://www.planetpdf.com/">http://www.planetpdf.com/</a></li> <li>iText, a Free Java PDF Library - <a href="http://www.lowagie.com/iText/">http://www.lowagie.com/iText/</a></li> <li>Multivalent, - <a href="http://www.lowagie.com/iText/">http://www.lowagie.com/iText/</a></li> <li>PDFBox, - <a href="http://www.lowagie.com/iText/">http://www.lowagie.com/iText/</a></li> <li>PJX, - <a href="http://www.lowagie.com/iText/">http://www.lowagie.com/iText/</a></li> <li>XPDF, - <a href="http://www.lowagie.com/iText/">http://www.lowagie.com/iText/</a></li> <li>Adobe Acrobat SDK : <a href="http://partners.adobe.com/public/developer/acrobat/sdk/index.html">http://partners.adobe.com/public/developer/acrobat/sdk/index.html</a></li> <li>Adobe PDF Library : <a href="http://partners.adobe.com/public/developer/pdf/library/index.html">http://partners.adobe.com/public/developer/pdf/library/index.html</a></li> <li>PDF Reference, fifth edition, Adobe Portable Document Format Version 1.6, Adobe Systems Incorporated.</li> <li>Open Document in Wikipedia - <a href="http://en.wikipedia.org/wiki/OpenDocument">http://en.wikipedia.org/wiki/OpenDocument</a></li> <li>Open Document Format for Office Applications (OpenDocument) v1.0 OASIS Standard, 1 May 2005 - <a href="http://www.oasis-open.org/committees/download.php/12572/OpenDocument-v1.0-os.pdf">http://www.oasis-open.org/committees/download.php/12572/OpenDocument-v1.0-os.pdf</a></li> <li>Microsoft Office 2003 XML Reference Schemas <a href="http://www.microsoft.com/office/xml/default.mspx">http://www.microsoft.com/office/xml/default.mspx</a></li> <li>Microsoft Office Open XML - <a href="http://en.wikipedia.org/wiki/Microsoft_Office_Open_XML">http://en.wikipedia.org/wiki/Microsoft_Office_Open_XML</a></li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:tools</guid>
				<title>PDF 的相關工具</title>
				<link>http://ccckmit.wikidot.com/pdf:tools</link>
				<description>

&lt;p&gt;網路上有各式各樣的 PDF 免費工具可以使用，例如 xpdf, PDFBox, Multivalent 等等，但是、通常這些工具對於中文文字的使用都有些問題，有些必須要加裝語言包並進行設定調整(但我不會)，因此、為了製作 PDF 搜尋引擎與分析工具，我們撰寫了一組程式，其壓縮檔在 PdfTree.zip 中，可以用來將 PDF 檔案中的文字抽出並轉為純文字格式或 XML 格式，這個程式可以處理Identity-H、ETenms-B5-H、嵌入式的字集等都沒有問題，但還沒加入簡体中文、日文與韓文等字集。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 06:22:56 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>網路上有各式各樣的 PDF 免費工具可以使用，例如 xpdf, PDFBox, Multivalent 等等，但是、通常這些工具對於中文文字的使用都有些問題，有些必須要加裝語言包並進行設定調整(但我不會)，因此、為了製作 PDF 搜尋引擎與分析工具，我們撰寫了一組程式，其壓縮檔在 PdfTree.zip 中，可以用來將 PDF 檔案中的文字抽出並轉為純文字格式或 XML 格式，這個程式可以處理Identity-H、ETenms-B5-H、嵌入式的字集等都沒有問題，但還沒加入簡体中文、日文與韓文等字集。</p> <p>對於 PDF 的一般用戶而言，最常使用的是將 Word 等文件格式轉換為 PDF 格式，要做這件事相當簡單，您可以安裝 PrimoPDF 這個免費的軟體，安裝好後會在你的電腦中看到一台名稱為 PrimoPDF 的印表機，不管任何文件、只要您在列印時選擇印出到這台印表機上，PrimoPDF 就會將文件印成一個 PDF 檔案，如此、任何文件都可以輕易的轉換成 PDF 文件了。(Adobe 公司也有出一個類似的軟體，稱為 Adobe Distiller，但是要花錢購買)</p> <p>除了上述的解密工具之外，網路上有各式各樣的 PDF 免費工具可以使用，例如 xpdf, PDFBox, Multivalent 等等，但是、通常這些工具對於中文文字的使用都有些問題，有些必須要加裝語言包並進行設定調整(但我不會)，因此、為了製作 PDF 搜尋引擎與分析工具，我們撰寫了一組程式，其壓縮檔在 PdfTree.zip 中，可以用來將 PDF 檔案中的文字抽出並轉為純文字格式或 XML 格式，這個程式可以處理Identity-H、ETenms-B5-H、嵌入式的字集等都沒有問題，但還沒加入簡体中文、日文與韓文等字集。</p> <p>對於 PDF 的一般用戶而言，最常使用的是將 Word 等文件格式轉換為 PDF 格式，要做這件事相當簡單，您可以安裝 PrimoPDF 這個免費的軟體，安裝好後會在你的電腦中看到一台名稱為 PrimoPDF 的印表機，不管任何文件、只要您在列印時選擇印出到這台印表機上，PrimoPDF 就會將文件印成一個 PDF 檔案，如此、任何文件都可以輕易的轉換成 PDF 文件了。(Adobe 公司也有出一個類似的軟體，稱為 Adobe Distiller，但是要花錢購買)</p> <h1><span>相關軟體比較</span></h1> <p>這些的 PDF 轉換工具當中，有些可以將 PDF 中的文字抽取出來，以下是我們所知的相關工具程式列表：</p> <table class="wiki-content-table"> <tr> <td>軟體名稱</td> <td>版本</td> <td>授權</td> <td>文字轉換程式</td> <td>用法範例</td> </tr> <tr> <td>Solid Converter PDF, 2.0</td> <td>商用付費</td> <td>SolidConverterPDF.exe</td> </tr> <tr> <td>iText</td> <td>1.3.6</td> <td>MPL</td> <td>無</td> </tr> <tr> <td>PDF Box</td> <td>0.7.2</td> <td>BSD</td> <td>ExtractText.exe</td> </tr> <tr> <td>Multivalent</td> <td>20060102</td> <td>GPL</td> <td>tool.doc.ExtractText</td> </tr> <tr> <td>XPDF</td> <td>3.01</td> <td>GPL</td> <td>pdftotext.exe</td> </tr> <tr> <td>PJX</td> <td>1.3.5</td> <td>GPL</td> <td>com.etymon.pj.samples.UncompressPdf</td> </tr> <tr> <td>OpenPDF</td> <td>0.4</td> <td>BSD</td> <td>openpdf.convertToXml</td> </tr> </table> 經過我們的測試 (在 MS Windows XP上)，這些轉換工具的在處理各種語言的文件上，表現狀況如下：<br /> <table class="wiki-content-table"> <tr> <td>軟體名稱</td> <td>英文轉純文字</td> <td>中日韓文轉純文字</td> <td>轉換為 XML</td> </tr> <tr> <td>Solid Converter PDF, 正常</td> <td>可以、但部分檔案轉換失敗、沒有任何輸出</td> <td>無</td> </tr> <tr> <td>iText</td> <td>無</td> <td>無</td> <td>無</td> </tr> <tr> <td>PDF Box</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>Multivalent</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>XPDF</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>PJX</td> <td>正常</td> <td>中文全部變亂碼</td> <td>無</td> </tr> <tr> <td>OpenPDF</td> <td>正常</td> <td>正常</td> <td>正常</td> </tr> </table> <h1><span>參考文獻</span></h1> <ol> <li><a href="http://sourceforge.net/search/?type_of_search=soft&amp;words=pdf">http://sourceforge.net/search/?type_of_search=soft&amp;words=pdf</a></li> <li><a href="http://www.foxitsoftware.com/pdf/sdk/dll/">http://www.foxitsoftware.com/pdf/sdk/dll/</a></li> <li><a href="http://www.omniformat.com/download.html">http://www.omniformat.com/download.html</a></li> <li><a href="http://www.hot.net.tw/book/002/ACV010400.htm">http://www.hot.net.tw/book/002/ACV010400.htm</a> Lesson 3. Office/PDF文件解密術</li> <li>另外一個軟體，在這個網站可以下載試用版，有command line ，如果要將他結合在自己的程式，也可以，要花五百多美金<a href="http://www.verypdf.com/pwdremover/index.htm#dl">http://www.verypdf.com/pwdremover/index.htm#dl</a></li> <li>pdf轉存文字, word 中文沒問題</li> </ol> <p><a href="http://www.softhome.com.tw/html/soft_product.php?re_valu=5165">http://www.softhome.com.tw/html/soft_product.php?re_valu=5165</a></p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:toxml</guid>
				<title>如何將 PDF 轉換為 XML？</title>
				<link>http://ccckmit.wikidot.com/pdf:toxml</link>
				<description>

&lt;p&gt;將 PDF 轉換為 XML 格式，使其文件的處理更容易，也更符合潮流。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 06:02:12 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>將 PDF 轉換為 XML 格式，使其文件的處理更容易，也更符合潮流。</p> <h1><span>PDF 的檔案格式</span></h1> <div class="code"> <pre><code>%PDF?1.4 1 0 obj &lt;&lt; /Type /Catalog /Outlines 2 0 R /Pages 3 0 R &gt;&gt; endobj 2 0 obj &lt;&lt; /Type /Outlines /Count 0 &gt;&gt; endobj 3 0 obj &lt;&lt; /Type /Pages /Kids [4 0 R] /Count 1 &gt;&gt; endobj 4 0 obj &lt;&lt; /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources &lt;&lt; /ProcSet 6 0 R /Font &lt;&lt; /F1 7 0 R &gt;&gt; &gt;&gt; &gt;&gt; endobj 5 0 obj &lt;&lt; /Length 73 &gt;&gt; stream BT /F1 24 Tf 100 100 Td (Hello World) Tj ET endstream endobj 6 0 obj [/PDF /Text] endobj 7 0 obj &lt;&lt; /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /MacRomanEncoding &gt;&gt; endobj</code></pre></div> <p>其中的 1&#160;0 obj , 2&#160;0 obj, 3&#160;0 obj,&#8230; 等語法是物件的定義，PDF格式是以文字所組成的一個物件樹，而 2&#160;0 R, 3&#160;0 R 等語法則是物件與物件之間的連結狀況，符號 R 代表的是 Reference (引用)，這些 R 連結構成了樹中的分枝結構，如此、只要從 1&#160;0 obj 開始追蹤，就可以建出整棵樹狀結構。</p> <p>stream 是 PDF 中另一個重要的基本元件，因為所有的文字、影像等物件都是被編碼後放到 stream 物件之中，例如上例中的<br /> &lt;code&gt;<br /> BT<br /> /F1&#160;24 Tf<br /> 100&#160;100 Td<br /> (Hello World) Tj<br /> ET<br /> &lt;/code&gt;</p> <h1><span>轉換為 XML 之後的格式</span></h1> <p>在破解與解壓縮後，我們可以輕易的將 PDF 文件轉換為 XML 文件，以下範例顯示了上述文件轉換為 XML 後的版本。</p> <div class="code"> <pre><code>&lt;obj id=&quot;1 0&quot;&gt; &lt;Type&gt;/Catalog&lt;/Type&gt; &lt;Outlines&gt;2 0 R&lt;/Outlines&gt; &lt;Pages&gt;3 0 R&lt;/Pages&gt; &lt;obj&gt; &lt;obj id=&quot;2 0&quot;&gt; &lt;Type&gt;/Outlines&lt;/Type&gt; &lt;Count&gt;0&lt;/Count&gt; &lt;/obj&gt; &lt;obj id=&quot;3 0&quot;&gt; &lt;Type&gt;/Pages&lt;/Type&gt; &lt;Kids&gt;[4 0 R]&lt;/Kids&gt; &lt;Count&gt;1&lt;/Count&gt; &lt;/obj&gt; &lt;obj id=&quot;4 0&quot;&gt; &lt;Type&gt;/Page&lt;/Type&gt; &lt;Parent&gt;3 0 R&lt;/Parent&gt; &lt;MediaBox&gt;[0 0 612 792]&lt;/MediaBox&gt; &lt;Contents&gt;5 0 R&lt;/Contents&gt; &lt;Resources&gt; &lt;ProcSet&gt;6 0 R&lt;/ProcSet&gt; &lt;Font&gt; &lt;/F1&gt;7 0 R&lt;/F1&gt; &lt;/Font&gt; &lt;/Resources&gt; &lt;/obj&gt; &lt;obj id=&quot;5 0&quot;&gt; &lt;Length&gt;73&lt;/Length&gt; &lt;stream&gt; BT /F1 24 Tf 100 100 Td (Hello World) Tj ET &lt;/stream&gt; &lt;/obj&gt; &lt;obj id=&quot;6 0&quot;&gt;[/PDF /Text]&lt;/obj&gt; &lt;obj id=&quot;7 0&quot;&gt; &lt;Type&gt;/Font&lt;/Type&gt; &lt;Subtype&gt;/Type1&lt;/Type&gt; &lt;Name&gt;/F1&lt;/Name&gt; &lt;BaseFont&gt;/Helvetica&lt;/BaseFont&gt; &lt;Encoding&gt;/MacRomanEncoding&lt;/Encoding&gt; &lt;/obj&gt;</code></pre></div> <h1><span>結語</span></h1> <p>因為 XML 是一種純文字格式，具有明確的開頭與結束符號，讓我們能輕易的用Regular Expression 等工具進行處理，可以使 PDF 的處理簡化很多，並且、在轉換成 XML 的過程當中，我們已經將PDF 中的壓縮格式解開了，並且將編碼轉換為標準的 Unicode 編碼，使得程式設計人員可以直接取得想要的段落，而不需要管 PDF 中壓縮與編碼等惱人的問題。</p> <p>雖然解開成 XML 會使 PDF 檔案變大，但經我們實驗，被解開成 XML 的檔案再以 zip 檔的形式壓縮後，其大小反而比原先的 PDF 小，也比將 PDF 壓縮成 zip 的檔案更小，因此、對於在意硬碟空間的人而言，可以將 XML 壓縮後的檔案儲存。</p> <p>本文簡單介紹了 PDF 的格式與語法，並且以 Java 實作 PDF 轉 XML 的工具程式，希望能對您有所幫助。</p> <h1><span>參考文獻</span></h1> <ol> <li>Portable Document Format Version 1.6,fifth edition,AdobeR Adobe Systems Incorporated - 網址：<a href="http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf">http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf</a></li> <li>Adobe Developer Resource - 網址：[[<a href="http://partners.adobe.com/public/developer/acrobat/index_advanced.html">http://partners.adobe.com/public/developer/acrobat/index_advanced.html</a>]] <ol> <li>PDF core font information, CMaps for PDF 1.4 CJK fonts, Chinese Traditional (ZIP: 391k) - 網址：<a href="http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip">http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip</a></li> <li>Portable Document Format, in Wikipedia - 網址：<a href="http://en.wikipedia.org/wiki/pdf?qin=pdf&amp;tg=%E7%99%BE%E7%A7%91&amp;q=&amp;s=&amp;hl=&amp;lr=">http://en.wikipedia.org/wiki/pdf?qin=pdf&amp;tg=%E7%99%BE%E7%A7%91&amp;q=&amp;s=&amp;hl=&amp;lr=</a></li> </ol> </li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/pdf:streamcoding</guid>
				<title>PDF 檔案內文字串 (Stream) 的編碼方式</title>
				<link>http://ccckmit.wikidot.com/pdf:streamcoding</link>
				<description>

&lt;p&gt;本文介紹了如何將 PDF 中的 stream 欄位轉換為純文字的方法，尤其著重在中文文字的編碼轉換方式上。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1786295590&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Fri, 25 Jun 2010 06:09:25 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>本文介紹了如何將 PDF 中的 stream 欄位轉換為純文字的方法，尤其著重在中文文字的編碼轉換方式上。</p> <h1><span>簡介</span></h1> <p>PDF 是一種樹狀結構的文件，stream 是 PDF 中的一個重要的基本元件，因為所有的文字、影像等物件都是被編碼後放到 stream 物件之中，以下是一個範例片段</p> <div class="code"> <pre><code>BT /F1 24 Tf 100 100 Td (Hello World) Tj ET</code></pre></div> <br /> 就是將 Hello World 等字串放到 stream 當中的一個範例。 <h1><span>中文的編碼方式</span></h1> <p>由於 PDF 是一個跨語言、跨平台的文件格式，因此、所支援的編碼方式非常多樣，包含 Windows 標準 WinAnsiEncoding 字集，繁體中文的 BIG5 以及其擴充版本的倚天字集、簡體中文的 GB2312 字集、日文的 EUC 字集與 Shift-JIS 字集等等，其中、共有 14 種字集是預設在 Acrobat PDF Reader 中就有的，但並不包含中文、日文、韓文等亞洲字集，因此、需要使用到這些多國語言的環境時時，通常需要加入語言的特別安裝，這些安裝中有一個很重要的目錄稱為 CMap ，這是用來作語言編碼對照的檔案，例如：CMap/ETenms-B5-H 是繁體中文的倚天擴充字集對應到 Unicode 的編碼檔，以下是該檔案的一個小片段，</p> <div class="code"> <pre><code>2 begincodespacerange &lt;00&gt; &lt;80&gt; &lt;A140&gt; &lt;FEFE&gt; endcodespacerange 1 beginnotdefrange &lt;00&gt; &lt;1f&gt; 13648 endnotdefrange 100 begincidrange &lt;20&gt; &lt;7e&gt; 1 &lt;a140&gt; &lt;a158&gt; 99 &lt;a159&gt; &lt;a15c&gt; 13743 &lt;a15d&gt; &lt;a17e&gt; 128 &lt;a1a1&gt; &lt;a1f5&gt; 162 &lt;a1f6&gt; &lt;a1f6&gt; 248 &lt;a1f7&gt; &lt;a1f7&gt; 247 &lt;a1f8&gt; &lt;a1fe&gt; 249 ...</code></pre></div> <p>其中的 begincodespacerange 段落說明編碼的範圍第一段是由 00 到 80，第二段是由 A140 到 FEFE ，熟悉 big5 編碼的人應該就曉得這正是 big5 碼的編碼範圍，而第二段的 beginnotdefrange 代表 00 到 1F 是未使用的編碼區段。</p> <p>第三段的 begincidrange 是真正的編碼對應表，其對應方式是一段一段的對應，例如：&lt;a140&gt; &lt;a158&gt; 99 代表</p> <div class="code"> <pre><code>a140 這個碼被對應到 99 a141 這個碼被對應到 100 a142 這個碼被對應到 101 ...</code></pre></div> <p>如此、各種編碼方式之間將可以正確正確的對應到標準的 PDF 預設字集 CID 上。</p> <p>PDF 的預設字集 CID 並不是採用最廣為使用的 Unicode 字集，而是由 Adobe 公司所自行編碼的字集，稱為 Character Idientity 字集，簡稱為 CID 字集，所有的其他字集都會透過 CMap 檔案被對映到這個 CID 字集上，以便在顯示的時取得正確的字形，對於繁體中文而言，PDF 主要使用的除了標準的 CID 字集之外，最常被使用的就是 ETenms-B5-H 這個 CMap 所代表的字集，這是 BIG5 字集的倚天擴充版，關於這個字集的相關資訊可以在 Adobe 的協力開發網站上下載，網址是：</p> <blockquote> <p><a href="http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip">http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip</a></p> </blockquote> <h1><span>破解文字編碼</span></h1> <p>在 PDF 中的中文編碼，並非都固定採用統一個方式，對於繁體中文而言，有時會用 ETenms-B5-H 來編，有時會用 CID 直接編碼，<br /> 有時又會用嵌入的方式直接將對映表 CMap 插入在 PDF 檔中成為一個物件，然後用該嵌入式對映表來編碼，因此、要取出 PDF 檔案<br /> 中的文字，是相當困難的一件工作，必需對 PDF 的格式有徹底的了解才行。</p> <p>以下我們再舉一個範例以說明中文編碼與解碼的問題。</p> <div class="code"> <pre><code>4 0 obj &lt;&lt; /Type /Page /Parent 3 0 R /MediaBox [0 0 612 792] /Contents 5 0 R /Resources &lt;&lt; /ProcSet 6 0 R /Font &lt;&lt; /F1 7 0 R &gt;&gt; &gt;&gt; &gt;&gt; endobj 5 0 obj &lt;&lt; /Length 73 &gt;&gt; stream BT /F1 24 Tf 100 100 Td &lt;bd75a457add3a448a4c6b0d1a6d2a4e5c46dbadeb27aa874b2ce&gt; Tj ET endstream endobj 6 0 obj [/PDF /Text] endobj 7 0 obj &lt;&lt; /Type /Font /Subtype /Type0 /BaseFont /#bc#d0#b7#a2#c5#e9,Bold /Encoding /ETenms-B5-H &gt;&gt; endobj</code></pre></div> <p>上述範例中的 &amp;lt;BD75A457ADD3A448A4C6B0D1A6D2A4E5C46DBADEB27AA874B2CE&amp;gt; 其實是『線上個人化參考文獻管理系統』這段文字<br /> 以 BIG5 編碼法編成十六進位後的結果。</p> <p>但是我怎麼知到該段落所使用的編碼法是 BIG5 呢，當我們想寫一個程式去處理這些文字編碼時，就必需要先知到該 PDF 檔案是使用何種編碼法，但是、哪理有紀載這樣的資訊呢？</p> <p>答案是在 Tf 這個代表字形的標記中，請仔細看上面的範例，其中的 /F1&#160;24 Tf 所代表的就是後面文字段落所採用的字形資訊，代表 &amp;lt;BD75A457ADD3A448A4C6B0D1A6D2A4E5C46DBADEB27AA874B2CE&amp;gt; 這段資訊顯示時應該使用 F1 的字形，而且字形顯示時<br /> 的大小設定為 15.75。</p> <p>要知道 /F1 字形所使用的編碼法，必需逆向追蹤該段落的父節點物件，由於 PDF 中並沒有記載逆向追蹤的資訊，因此、我們必需從上而下正向追蹤過來，才有辦法破解這個秘密。</p> <p>首先、由於 PDF 是一個印表語言，因此最重要的物件是頁面，也就是範例中的 4&#160;0 obj，屬性 /Type /Page ?明了這是一個頁面，另一個屬性 /Font 7&#160;0 R ，記載了該頁所使用的字形是 /F1，字形資訊儲存在 7&#160;0 這個物件當中，追蹤 7&#160;0 obj 就可以看到下列段落</p> <div class="code"> <pre><code>7 0 obj &lt;&lt; /Type /Font /Subtype /Type0 /BaseFont /#bc#d0#b7#a2#c5#e9,Bold /Encoding /ETenms-B5-H &gt;&gt;</code></pre></div> <p>其中的 /Encoding 屬性說明了該頁面所使用的是 /ETenms-B5-H 的編碼法。</p> <p>在取得編碼法之後，我們就可以利用 /Contents 這個屬性，得知該頁面的文字內容位於 5&#160;0 R 之中，追蹤 5&#160;0 obj 後就發現下列段落，因此、我們就知道應該用 ETenms-B5-H 這個 BIG5 的對映表來解碼。</p> <div class="code"> <pre><code>5 0 obj &lt;&lt; /Length 73 &gt;&gt; stream BT /F1 24 Tf 100 100 Td &lt;bd75a457add3a448a4c6b0d1a6d2a4e5c46dbadeb27aa874b2ce&gt; Tj ET endstream</code></pre></div> <p>若您要真正寫程式處理 PDF 檔案中的文字時，必須先解壓縮，然後再對 &amp;lt;&#8230;&amp;gt; 中的十六進位數字進行解碼，以對應到目標的 CID 編碼，然後在進行處理，但 CID 編碼法畢竟是 Adobe 公司私有的格式，並不容易作處理，因此、我們通長會將這個編碼再度轉換為 Unicode的標準編碼，然後再交給支援 Unicode 的函式庫去處理，像 Java 裏面的函式庫就可以輕易的處理 Unicode 編碼。</p> <p>要將繁體中文 CID 轉為 unicode ，其對映表檔案是 Adobe-CNS1-UCS2 ，有關轉換為 unicode 的資訊也可在 Adobe 協力開發網<a href="http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip">http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip</a> 這個網址中找到。</p> <p>另外、有時轉換為 unicode 的表格會被內嵌在 PDF 檔案中，然後在 /Font 物件中的 /ToUnicode 欄位內指定其物件編號，以下範例說明了這種情況，其中的 12&#160;0 obj 是該嵌入式的 Cmap，可以用來將編碼轉換為 Unicode。</p> <div class="code"> <pre><code>7 0 obj &lt;&lt; /Type /Font /Subtype /Type0 /BaseFont /#bc#d0#b7#a2#c5#e9,Bold /Encoding /ETenms-B5-H /ToUnicode 12 0 R &gt;&gt; ... 12 0 R 12 0 obj&lt;&lt; /Length 3407&gt;&gt; stream ... 100 beginbfchar &lt;01&gt; &lt;56DE&gt; &lt;02&gt; &lt;60F3&gt; &lt;03&gt; &lt;5169&gt; ... endbfchar ... endstream endobj</code></pre></div> <p>最後、有些 PDF 文件會將中文字放在 (&#8230;) 中以原始位元碼表示，而不是用 16 進位放在 &amp;lt;&#8230;&amp;gt; 中，此時，就需要將其內容直接取出，然後用 Encoding 與 ToUnicode 所指定的方式解碼，而不需要透過 16 進位了。 (但是要注意其中的跳出字元\n \t \b &#8230;.\ddd 等用法，這些字必需先被轉換成位元組的形式，才能處理)。</p> <h1><span>結語</span></h1> <p>PostScript 是為了印表機而發展出來的語言，PDF也繼承了這樣的特性，因此、具有很好的列印品質，但要做加工則相當不易，本文探討了 PDF 的格式，並說明處理中文 PDF 時所經常遇到的一些問題與解決辦法，希望能對您有所幫助。</p> <h1><span>參考文獻</span></h1> <ol> <li>Portable Document Format Version 1.6,fifth edition,AdobeR Adobe Systems Incorporated - 網址：<a href="http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf">http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf</a></li> <li>Adobe Developer Resource - 網址：[[<a href="http://partners.adobe.com/public/developer/acrobat/index_advanced.html">http://partners.adobe.com/public/developer/acrobat/index_advanced.html</a>]] <ul> <li>PDF core font information, CMaps for PDF 1.4 CJK fonts, Chinese Traditional (ZIP: 391k) - 網址：<a href="http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip">http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip</a></li> </ul> </li> <li>Portable Document Format, in Wikipedia - 網址：<a href="http://en.wikipedia.org/wiki/pdf?qin=pdf&amp;tg=%E7%99%BE%E7%A7%91&amp;q=&amp;s=&amp;hl=&amp;lr=">http://en.wikipedia.org/wiki/pdf?qin=pdf&amp;tg=%E7%99%BE%E7%A7%91&amp;q=&amp;s=&amp;hl=&amp;lr=</a></li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1786295590" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>