如何將 PDF 轉換為 XML?

PDF格式研究

簡介

檔案結構

Stream 編碼

轉為XML

相關工具

OpenPDF

訊息

相關網站

參考文獻

最新修改

簡體版

English

將 PDF 轉換為 XML 格式,使其文件的處理更容易,也更符合潮流。

PDF 的檔案格式

%PDF?1.4
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj
2 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
3 0 obj
<< /Type /Pages
/Kids [4 0 R]
/Count 1
>>
endobj
4 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [0 0 612 792]
/Contents 5 0 R
/Resources << /ProcSet 6 0 R
/Font << /F1 7 0 R >>
>>
>>
endobj
5 0 obj
<< /Length 73 >>
stream
BT
/F1 24 Tf
100 100 Td
(Hello World) Tj
ET
endstream
endobj
6 0 obj
[/PDF /Text]
endobj
7 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /MacRomanEncoding
>>
endobj

其中的 1 0 obj , 2 0 obj, 3 0 obj,… 等語法是物件的定義,PDF格式是以文字所組成的一個物件樹,而 2 0 R, 3 0 R 等語法則是物件與物件之間的連結狀況,符號 R 代表的是 Reference (引用),這些 R 連結構成了樹中的分枝結構,如此、只要從 1 0 obj 開始追蹤,就可以建出整棵樹狀結構。

stream 是 PDF 中另一個重要的基本元件,因為所有的文字、影像等物件都是被編碼後放到 stream 物件之中,例如上例中的
<code>
BT
/F1 24 Tf
100 100 Td
(Hello World) Tj
ET
</code>

轉換為 XML 之後的格式

在破解與解壓縮後,我們可以輕易的將 PDF 文件轉換為 XML 文件,以下範例顯示了上述文件轉換為 XML 後的版本。

<obj id="1 0">
  <Type>/Catalog</Type>
  <Outlines>2 0 R</Outlines>
  <Pages>3 0 R</Pages>
<obj>
<obj id="2 0">
  <Type>/Outlines</Type>
  <Count>0</Count>
</obj>
<obj id="3 0">
  <Type>/Pages</Type>
  <Kids>[4 0 R]</Kids>
  <Count>1</Count>
</obj>
<obj id="4 0">
  <Type>/Page</Type>
  <Parent>3 0 R</Parent>
  <MediaBox>[0 0 612 792]</MediaBox>
  <Contents>5 0 R</Contents>
  <Resources>
    <ProcSet>6 0 R</ProcSet>
    <Font>
      </F1>7 0 R</F1>
    </Font>
  </Resources>
</obj>
<obj id="5 0">
  <Length>73</Length>
  <stream>
    BT
    /F1 24 Tf
    100 100 Td
    (Hello World) Tj
    ET
  </stream>
</obj>
<obj id="6 0">[/PDF /Text]</obj>
<obj id="7 0">
  <Type>/Font</Type>
  <Subtype>/Type1</Type>
  <Name>/F1</Name>
  <BaseFont>/Helvetica</BaseFont>
  <Encoding>/MacRomanEncoding</Encoding>
</obj>

結語

因為 XML 是一種純文字格式,具有明確的開頭與結束符號,讓我們能輕易的用Regular Expression 等工具進行處理,可以使 PDF 的處理簡化很多,並且、在轉換成 XML 的過程當中,我們已經將PDF 中的壓縮格式解開了,並且將編碼轉換為標準的 Unicode 編碼,使得程式設計人員可以直接取得想要的段落,而不需要管 PDF 中壓縮與編碼等惱人的問題。

雖然解開成 XML 會使 PDF 檔案變大,但經我們實驗,被解開成 XML 的檔案再以 zip 檔的形式壓縮後,其大小反而比原先的 PDF 小,也比將 PDF 壓縮成 zip 的檔案更小,因此、對於在意硬碟空間的人而言,可以將 XML 壓縮後的檔案儲存。

本文簡單介紹了 PDF 的格式與語法,並且以 Java 實作 PDF 轉 XML 的工具程式,希望能對您有所幫助。

參考文獻

  1. Portable Document Format Version 1.6,fifth edition,AdobeR Adobe Systems Incorporated - 網址:http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf
  2. Adobe Developer Resource - 網址:[[http://partners.adobe.com/public/developer/acrobat/index_advanced.html]]
    1. PDF core font information, CMaps for PDF 1.4 CJK fonts, Chinese Traditional (ZIP: 391k) - 網址:http://partners.adobe.com/public/developer/en/pdf/chinese_t.zip
    2. Portable Document Format, in Wikipedia - 網址:http://en.wikipedia.org/wiki/pdf?qin=pdf&tg=%E7%99%BE%E7%A7%91&q=&s=&hl=&lr=

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License