《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > PostScript文件與PDF文件間數據轉換
PostScript文件與PDF文件間數據轉換
來源:微型機與應用2013年第11期
孫 殷1,王 鵬2
(1.浙江商業職業技術學院,浙江 杭州 310053;2.浙江工業大學,浙江 杭州 310014)
摘要: 針對可變數字印刷中常用的頁面描述語言及其文件格式,通過研究PostScript文件結構和PDF文件結構,介紹了如何實現PostScript文件與PDF文件間的數據轉換,給出兩種文件間轉換算法流程圖,并利用PostScript解釋器Ghostscript提供的API接口,實現了PostScript文件和PDF文件間的轉換。轉換結果表明,該轉換算法轉換效果比較好,實現了所見即所得。
關鍵詞: PostScript pdf 數據轉換
Abstract:
Key words :

摘  要: 針對可變數字印刷中常用的頁面描述語言及其文件格式,通過研究PostScript文件結構和PDF文件結構,介紹了如何實現PostScript文件與PDF文件間的數據轉換,給出兩種文件間轉換算法流程圖,并利用PostScript解釋器Ghostscript提供的API接口,實現了PostScript文件和PDF文件間的轉換。轉換結果表明,該轉換算法轉換效果比較好,實現了所見即所得。
關鍵詞: PostScript;PDF;數據轉換

 在可變數據印刷系統中,每個電子頁面的內容(如文字、圖形、圖像)經過頁面描述語言合成后產生相應的可變數據印刷頁面,最終形成特定的數據文件。PostScript文件(簡稱PS)和PDF文件是目前存儲可變數據印刷頁面常用的文件格式,因此,研究這兩種文件格式之間的數據轉換對可變數據印刷的發展具有一定的意義。而當前PS文件與PDF文件之間的轉換主要有兩種方式[1]:(1)通過專業的軟件(如Acrobat Distiller)轉換;(2)通過虛擬打印機來實現。
 但是這兩種方式都不利于自主研究數據印刷系統的開發。本文根據PS文件格式和PDF文件格式的特點,利用PS解釋器Ghostscript提供的API接口,通過VC6.0實現了PS文件和PDF文件的相互轉換,并給出相應的代碼。
1 PostScript和PDF文件結構
1.1 PostScript文件

 PostScript是由Adobe公司開發的頁面描述語言,其最大特點是可以將印刷品中包含的文字、圖形、圖像、字體和顏色等各種元素用一種計算機數據來表現和描述,然后經過RIP(光柵圖像處理器)快速地解釋為可控制打印設備輸出用的點陣信息。用PostScript語言所描述的頁面文件稱為PS文件,其后綴名為.ps或.eps。
 PostScript程序可訪問的所有數據都是以對象(Object)形式存在的[2],對象由操作符產生、管理和撤銷。常用的對象有整數和實數、布爾型、數組、壓縮數組、串、名字、字典等[3-4]。程序中的數據存儲在堆棧中并通過堆棧被操作符管理執行。
 PostScript語言解釋器對語句的執行是逐句解釋執行,控制比較靈活,一切操作均通過堆棧進行。例如用粗線畫一個圓:
%%Title:用粗線畫一個圓
/inch{72 mul} def
4.25 inch 5.5 inch
2.5 inch
0 360 arc                                
1.75 inch setlinewidth
stroke
showpage
 以‘%’開頭的第一段語句表示注釋,第二段語句定義了名字對象‘inch’,接著定義圓的中心位置(4.25,5.5),半徑2.5;然后畫角度為360°的圓;最后定義粗線的寬度1.75,畫出粗線的路徑進行顯示。
1.2 PDF文件
 便攜式文件格式PDF(Portable Document Format)是Adobe公司繼PostScript后于1993年推出的一種電子文件格式[5]。它具有能夠完整地保存任何原文檔中的文字、格式、顏色、圖形、可加密等優秀特性,廣泛應用于數據印刷系統中。
 PDF文件主要由四部分組成:文件頭(Header)、文件體(Body)、交叉引用表(Cross-referrence table)和文件尾(Trailer)。PDF作為一種結構化的文件格式,它是由一些具有特定數字標號的“對象”的模塊所組成。其文檔結構是一種樹形結構,通過文件尾(Trailer)可以找到文件體的根對象Catalog[6],根對象包含PDF文檔的大綱(Outline)、頁面組對象(Pages Tree)等。文檔結構具體層次關系如圖1所示。

 其中頁面對象(Page)作為PDF中最重要的對象,包含了該頁面的文字、圖片、頁面大小等信息。頁面中包含的信息是包含在一個稱為流(stream)[7-8]的對象里,這個流的長度(字節數)必須直接給出或指向另外一個對象。
2 文件格式轉換算法的實現
 根據前兩節的PostScript文件結構可知,要實現PS文件到PDF文件的轉換,首先需要對PS文件中的不同信息(文字、圖形和圖像等)進行解析,然后轉換為對應的PDF對象。兩者間轉換的總流程主要為:
 (1)導入要轉換的PostScript文件,初始化PS解釋器;
?。?)開始掃描PS文件,記錄當前代碼段所在頁。判斷頁信息是否已經到末尾,是則退出,否則繼續向下掃描;
?。?)讀取PS頁面描述信息,對其中的文本信息、圖形信息和圖像信息分別進行提取并處理;
?。?)將第三步中處理的文本、圖形和圖像信息進行重構,然后分別轉換為相對應的PDF對象;
?。?)判斷PS文件是否掃描結束,是則回到第(2)步,否則回到第(3)步;
?。?)轉換算法結束。
 圖2為PS文件轉換為PDF文件的總流程圖。

 由于PostScript文件對文本、圖形和圖像的描述機制各不相同,因此,其相應的信息提取算法也不盡相同。在PostScript文件中,圖像是取樣值的矩形數值,每個取樣值表示某種彩色。按行或者列掃描圖像矩形所得的一串取樣數據定義了一個圖像。除了矩形數組之外,PS程序中還包括一些圖像參數:源圖像的格式、圖像取樣數據的數據源、圖像空間坐標等。因此,對PS文件中圖像的提取主要是將圖像的參數和圖像取樣數據進行提取,其對應的提取算法流程圖如圖3所示。

 在標準的PostScript文件中,文本大都是以字庫[9]的形式進行保存,因此在PostScript中的字符可以由PS解釋器根據字庫提取出對應的字符。對PS文件中文本信息的提取流程如圖4所示,主要過程如下:
 (1)掃描文檔,記錄當前頁面信息。判斷是否已掃描到文件尾,是則跳轉到第(5)步,否則跳到第(2)步;
 (2)繼續掃描,判斷是否掃描到文本提示符,是則跳到第(3)步,否則跳回第(1)步;
?。?)根據文本提示符獲取相應的字庫詞典,查找字庫獲取PS所描述的字符;
 (4)保存第(3)步提取的文本信息;
?。?)結束文本掃描。

 掃描文件時通過尋找關鍵操作符函數FindStringInBuffer(),可以得到需要的操作符位置。源程序如下:
size_t FindStringInBuffer(char*buffer,char*search,size_t buffersize)
{
     char*buffer0=buffer;
     size_t len=strlen(search);
     bool fnd=false;
     while (!fnd)
     {
       fnd=true;
       for(size_t i=0;i<len;i++)
       {
         if(buffer[i]!=search[i])
         {
           fnd=false;
           break;
         }
     }
     if (fnd) return buffer-buffer0;
     buffer=buffer+1;
  if (buffer-buffer0+len>=buffersize)
  return-1;
  }
  return-1;
}
 由于PS解釋器的實現比較復雜,本文通過利用PS解釋器Ghostscript提供的API接口函數對PS文件進行解釋轉換。首先通過接口函數gsapi_new_instance()新建一個要轉換的實例。轉換過程主要在接口函數gsapi_init_with_args()中進行,即初始化PS解釋器并將輸入PS對象轉換為對應的PDF對象。主要轉換程序如下:
if(code=gsapi_new_instance(&minst, NULL))  
{
     printf("Can′t create Ghostscript instance\n");
     return 1;
}
code=gsapi_init_with_args(minst,gsargc,(char**)gsargv);
code1=gsapi_exit(minst);
if((code==0)||(code==e_Quit))
code=code1;
gsapi_delete_instance(minst);
if((code==0)||(code==e_Quit))
  return 0;
3 效果及結論
 本文的程序在VC6.0上編譯通過,并可以將輸入的PS文件(my.ps)轉換為PDF文件(my.pdf)。轉換前后的結果如下:
 由圖5和圖6可以看出,轉換前后的圖像幾乎完全一樣。由圖7中文本的轉換結果可以看出,轉換的字符內容一樣。通過修改輸入文件名和輸出文件名類型,例如輸入文件為.pdf格式文件,輸出文件為.ps文件,也可以實現PDF文件到PS文件的轉換。因此,在設計開發可變數據印刷系統時,可以將該程序作為數據轉換的一部分嵌入到印刷軟件系統中,具有一定的實用性。但是,由于PS解釋器并非獨立設計,受到其接口函數的限制,程序的延伸性不是很好。

參考文獻
[1] 張志偉,孔凡讓,吳欣.PostScript格式文獻中數學表達式的提取方法[J].計算機應用與軟件,2008,25(11):157-159.
[2] USA Adobe Systems Inc. PostScript language reference mannal. Addison Wesley Protessional, 1990.
[3] 何明,匡燕玲,李小龍,等.頁面描述語言PostScript及其轉換程序[J]. 北京工業大學學報,2004,20(4):102-104.
[4] 徐福培,潘志庚.頁面描述語言及其程序設計[M].南京:南京大學出版社,1994.
[5] USA Adobe Systems Inc. Document management-Portable document format-Part 1:PDF 1.7[J]. Adobe Systems Incorporated, 2008, PDF 32000-1.
[6] 李珍,田學東.PDF文件信息的抽取與分析[J].計算機應用,2003,23(12):145-148.
[7] 王婉,韓逸秋,徐福培.PDF文件格式及其向PS文件轉換的研究[J].計算機科學,2001,28(9):123-127.
[8] 吳一民,朱檬,羅綿川.基于.NET平臺PostScript文件解析標引系統設計與實現[J].微計算機應用,2009(10):5863.
[9] 段華偉,黃靈閣.計算機文字處理技術現狀[J].印刷質量與標準化,2004(5):39-41.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲精品国产精品国自产观看浪潮| 亚洲三级免费电影| 欧美大片在线观看一区| 激情综合色丁香一区二区| 亚洲欧美国产制服动漫| 亚洲免费在线电影| 欧美激情国产高清| 久久久午夜精品| 欧美不卡视频一区| 午夜在线视频一区二区区别| 亚洲视频视频在线| 亚洲天堂av图片| 一区二区精品在线| 欧美日韩亚洲精品内裤| 免费视频最近日韩| 国产精品理论片在线观看| 久久久999成人| 欧美极品欧美精品欧美视频| 亚洲三级网站| 欧美日韩大陆在线| 国产精品一卡二| 欧美精品一区二区在线观看| 欧美日韩国产精品一区二区亚洲| 欧美一区二区三区免费看| 国产日韩精品久久久| 制服丝袜亚洲播放| 亚洲天堂成人在线观看| 欧美在线观看一二区| 精品成人一区二区三区| 每日更新成人在线视频| 欧美一级专区免费大片| 中日韩高清电影网| 欧美午夜精品久久久久久人妖| 欧美午夜免费影院| 国产夜色精品一区二区av| 欧美成人亚洲成人日韩成人| 国产欧美亚洲视频| 99精品国产一区二区青青牛奶| 亚洲高清123| 亚洲国产成人精品视频| 亚洲欧美一级二级三级| 黄色成人精品网站| 在线精品在线| 亚洲欧美区自拍先锋| 亚洲制服欧美中文字幕中文字幕| 欧美高清在线一区二区| 国产精品视频久久久| 欧美激情a∨在线视频播放| 亚洲欧美一区二区在线观看| 亚洲国产精品一区二区久| 久久久久久亚洲精品杨幂换脸| 性欧美大战久久久久久久免费观看| 久久综合999| 国产精品久久婷婷六月丁香| 每日更新成人在线视频| 136国产福利精品导航| 老司机午夜精品视频在线观看| 六月丁香综合| 国产精品私房写真福利视频| 99在线观看免费视频精品观看| 亚洲欧美国产日韩天堂区| 欧美午夜视频在线观看| 午夜精品一区二区三区四区| 国产主播精品在线| 国产精品美女主播在线观看纯欲| 亚洲国产日韩欧美综合久久| 久久亚洲风情| 国产在线欧美| 国产日韩精品在线观看| 国产欧美日韩高清| 国产精品成人一区二区| 亚洲女性裸体视频| 极品少妇一区二区三区精品视频| 欧美性大战久久久久| 小嫩嫩精品导航| 91久久视频| 亚洲美女精品久久| 激情懂色av一区av二区av| 亚洲精品在线一区二区| 美女爽到呻吟久久久久| 香蕉久久夜色精品| 极品少妇一区二区三区精品视频| 免费看av成人| 亚洲激情六月丁香| 久久综合色天天久久综合图片| 91久久综合亚洲鲁鲁五月天| 欧美成人69av| 一区在线免费| 伊人蜜桃色噜噜激情综合| 国产精品一区免费在线观看| 久久精彩视频| 国产一区二区精品丝袜| 久久国产精品一区二区三区四区| 欧美激情在线免费观看| 国产精品视频你懂的| 欧美三级视频在线播放| 9国产精品视频| 国内精品久久久久影院色| 99精品国产高清一区二区| 一区二区三区精品国产| 欧美日韩的一区二区| 国产麻豆精品久久一二三| 国内精品久久久久久久影视麻豆| 在线成人激情黄色| 黄色一区三区| 91久久精品日日躁夜夜躁欧美| 激情国产一区二区| 久久久久久久久久久久久女国产乱| 99riav1国产精品视频| 一区二区三区无毛| 欧美激情一区二区三区全黄| 欧美三级精品| 午夜精品久久久久久久久久久| 一区二区三区欧美视频| 欧美视频观看一区| 另类国产ts人妖高潮视频| 日韩一级不卡| 免费观看日韩| 美女爽到呻吟久久久久| 尤物九九久久国产精品的分类| 伊人久久综合97精品| 国产精品久久久久一区二区| 韩国一区二区三区在线观看| 欧美一区网站| 国产精品地址| 欧美在线免费看| 亚洲欧洲精品一区| 欧美激情片在线观看| 国产精品国产馆在线真实露脸| 夜夜嗨一区二区三区| 欧美激情一区二区三区不卡| 亚洲欧洲精品一区二区三区波多野1战4| 国产精品成人午夜| 久久av一区二区三区亚洲| 欧美中文在线字幕| 老司机67194精品线观看| 香港久久久电影| 午夜亚洲视频| 欧美14一18处毛片| 美国十次成人| 欧美视频免费在线观看| 久久久免费观看视频| 欧美人与性动交α欧美精品济南到| 欧美日韩国产不卡| 尤物在线精品| 亚洲电影网站| 伊人夜夜躁av伊人久久| 99re这里只有精品6| 亚洲一区二区三区成人在线视频精品| 国产精品日本精品| 国产一区二区av| 欧美日韩亚洲一区二区三区四区| 国产在线精品成人一区二区三区| 欧美在线观看视频一区二区三区| 久久久久这里只有精品| 国产精品第2页| 欧美mv日韩mv国产网站app| 欧美国产综合一区二区| 在线播放中文字幕一区| 亚洲乱亚洲高清| 亚洲午夜精品在线| 在线观看日韩av| 亚洲女优在线| 国产综合色一区二区三区| 国产主播一区二区三区四区| 亚洲免费成人| 欧美一级一区| 欧美综合国产| 99精品欧美一区二区蜜桃免费| 国产日韩高清一区二区三区在线| 欧美一级免费视频| 免费成人av在线看| 日韩午夜精品视频| 国产一区 二区 三区一级| 永久免费视频成人| 国产精品视频自拍| 中日韩美女免费视频网址在线观看| 亚洲欧美激情一区二区| 欧美高清hd18日本| 麻豆精品视频在线观看| 欧美日韩综合不卡| 久久免费高清| 亚洲国产欧美日韩| 蜜桃久久精品一区二区| 亚洲欧美日韩国产综合| 国产目拍亚洲精品99久久精品| 1024精品一区二区三区| 国产精品白丝av嫩草影院| 欧美国产国产综合| 亚洲人成在线观看一区二区| 国产精品五区| 久久精品视频免费观看| 国产亚洲欧美另类一区二区三区| 国产视频在线观看一区二区| 国产欧美精品日韩| 午夜一区二区三视频在线观看| 一区二区三区www| 中文日韩电影网站| 国产精品va在线播放我和闺蜜| 亚洲高清视频在线| 欧美视频观看一区| 欧美日本免费| 亚洲风情在线资源站| 久久九九精品99国产精品| 欧美综合77777色婷婷| 欧美大片在线观看一区二区| 136国产福利精品导航| 羞羞视频在线观看欧美| 久久精品国产2020观看福利| 另类天堂视频在线观看| 一区二区三区欧美日韩| 亚洲午夜高清视频| 国产精品www994| 国产亚洲精品一区二555| 亚洲激情欧美| 久久精品中文字幕免费mv| 欧美视频在线观看免费| 一区二区免费在线视频| 伊人久久亚洲美女图片| 国产一区二区黄色| 欧美日韩午夜激情| 国产精品羞羞答答| 国产视频综合在线| 久久久久久网| 国产在线高清精品| 先锋影音国产一区| 老司机午夜精品视频在线观看| 亚洲女同在线| 国产亚洲精品久久飘花| 国产精品国产成人国产三级| 欧美尤物巨大精品爽| 久久九九有精品国产23| 国产日韩av一区二区| 久久久精品五月天| 亚洲欧美在线磁力| 日韩午夜激情| 欧美天堂亚洲电影院在线播放| 欧美午夜不卡影院在线观看完整版免费| 亚洲高清中文字幕| 老司机免费视频一区二区| 国产精品伦一区| 亚洲小视频在线观看| 国产精品每日更新| 一区免费在线| 欧美精品久久一区二区| 欧美一区国产二区| 亚洲风情亚aⅴ在线发布| 在线成人激情视频| 欧美精品三区| 欧美日韩1234| 午夜免费日韩视频| 欧美国产在线电影| 亚洲国产日韩欧美在线图片| 国产亚洲女人久久久久毛片| 国产精品久久久久秋霞鲁丝| 亚洲一区在线播放| 欧美色图五月天| 国产欧美在线观看一区| 欧美超级免费视 在线| 欧美精品午夜| 国产一区二区三区网站| 久久国产精品久久久久久久久久| 国内外成人免费激情在线视频网站| 亚洲特级毛片| 亚洲电影成人| 嫩草国产精品入口| 亚洲国产天堂久久国产91| 91久久综合亚洲鲁鲁五月天| 香蕉精品999视频一区二区| 欧美日韩国产首页在线观看| 亚洲福利专区| 国产精品视频不卡| 欧美成人午夜剧场免费观看| 国产精品亚洲人在线观看| 欧美日韩在线一区二区三区| 欧美激情女人20p| 欧美激情二区三区| 国产欧美综合一区二区三区| 一区二区三区精密机械公司| 欧美日韩高清免费| 欧美精品久久久久久| 午夜在线不卡| 亚洲一区在线观看视频| 国产一区二区高清| 久久蜜桃av一区精品变态类天堂| 久久综合伊人77777尤物| 欧美精品日本| 久久日韩粉嫩一区二区三区| 欧美精品一区二区久久婷婷| 亚洲欧美中文日韩在线| 91久久精品国产91性色tv| 亚洲网友自拍| 欧美在线综合视频| 欧美国产视频一区二区| 亚洲电影观看| 国产精品麻豆va在线播放| 亚洲精品日韩在线观看| 欧美寡妇偷汉性猛交| 国产在线拍揄自揄视频不卡99| 欧美色区777第一页| 中文日韩在线| 欧美激情aⅴ一区二区三区| 欧美成人国产va精品日本一级| 国产精品麻豆欧美日韩ww| 激情视频一区二区三区| 国产精品乱人伦一区二区| 久久精品亚洲精品| 欧美本精品男人aⅴ天堂| 欧美激情一区二区三区高清视频| 欧美高清不卡在线| 亚洲女性裸体视频| 亚洲视频专区在线| 欧美一区二区三区免费在线看| 亚洲一区二区黄| 欧美精品成人在线| 国产噜噜噜噜噜久久久久久久久| 91久久精品一区二区三区| 久久爱www久久做| 久久婷婷国产综合精品青草| 欧美日韩国产一区二区三区地区| 久久久久久噜噜噜久久久精品| 欧美在线免费一级片| 国产精品二区影院| 久久这里有精品视频| 欧美日韩在线不卡一区| 最新日韩中文字幕| 久久久亚洲影院你懂的| 欧美日韩在线不卡|