版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2018.09.08 |
前言
Quartz 2D
框架相信大家都知道,也都一直在使用。Quartz 2D
的API是純C語言的,它是一個(gè)二維繪圖引擎,同時(shí)支持iOS和Mac系統(tǒng)。Quartz 2D
的API來自于Core Graphics
框架,數(shù)據(jù)類型和函數(shù)基本都以CG作為前綴,接下來幾篇我們就一起來看一下這個(gè)框架。感興趣可以看上面幾篇文章。
1. Quartz 2D編程指南 (一) —— 簡(jiǎn)介(一)
2. Quartz 2D編程指南 (二) —— Quartz 2D概覽(二)
3. Quartz 2D編程指南 (三) —— 圖形上下文(三)
4. Quartz 2D編程指南 (四) —— Paths路徑(一)
5. Quartz 2D編程指南 (五) —— Paths路徑(二)
6. Quartz 2D編程指南 (六) —— 顏色和顏色空間(一)
7. Quartz 2D編程指南 (七) —— 變換(一)
8. Quartz 2D編程指南 (八) —— Patterns圖案樣式(一)
9. Quartz 2D編程指南 (九) —— 陰影(一)
10. Quartz 2D編程指南 (十) —— 漸變(一)
11. Quartz 2D編程指南 (十一) —— 透明層(一)
12. Quartz 2D編程指南 (十二) —— Quartz 2D中的數(shù)據(jù)管理(一)
13. Quartz 2D編程指南 (十三) —— 位圖圖像和圖像蒙版(一)
14. Quartz 2D編程指南 (十四) —— 位圖圖像和圖像蒙版(二)
15. Quartz 2D編程指南 (十五) —— Core Graphics圖層繪制(一)
16. Quartz 2D編程指南 (十六) —— PDF文檔創(chuàng)建,查看和轉(zhuǎn)換(一)
17. Quartz 2D編程指南 (十七) —— PDF文件解析(一)
PostScript Conversion - PostScript轉(zhuǎn)換
注意:
Quartz 2D PostScript
轉(zhuǎn)換功能在iOS中不可用。所以不感興趣的可以略過此篇文章。
預(yù)覽應(yīng)用程序自動(dòng)將PostScript
文件轉(zhuǎn)換為PDF
。 Quartz 2D API
提供了可用于在應(yīng)用程序中執(zhí)行PostScript轉(zhuǎn)換的函數(shù)。 Quartz 2D PostScript
轉(zhuǎn)換功能在iOS中不可用。
按照以下步驟將PostScript
文檔轉(zhuǎn)換為PDF文檔:
- 1) Write callbacks - 寫回調(diào)。 Quartz通過回調(diào)傳達(dá)每頁進(jìn)程的狀態(tài)。
- 2) Fill a callbacks structure - 填充回調(diào)結(jié)構(gòu)。
- 3) Create a PostScript converter object - 創(chuàng)建PostScript轉(zhuǎn)換器對(duì)象。
- 4) Creating a PostScript Converter Object - 為要轉(zhuǎn)換的PostScript文件創(chuàng)建數(shù)據(jù)提供程序?qū)ο?/strong>。
- 5) Creating Data Provider and Data Consumer Objects - 為轉(zhuǎn)換產(chǎn)生的PDF創(chuàng)建數(shù)據(jù)使用者對(duì)象。
- 6) Performing the Conversion - 執(zhí)行轉(zhuǎn)換。
以下各節(jié)將討論這些步驟中的每一步。
Writing Callbacks - 寫回調(diào)
回調(diào)為Quartz
提供了一種向應(yīng)用程序通知轉(zhuǎn)換狀態(tài)的方法。 如果您的應(yīng)用程序具有用戶界面,則可以使用狀態(tài)信息向用戶提供反饋,如圖15-1所示。
您可以提供回調(diào)以通知您的應(yīng)用程序Quartz 2D
是:
- 開始轉(zhuǎn)換
(CGPSConverterBeginDocumentCallback)
。 Quartz 2D將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針。 - 結(jié)束轉(zhuǎn)換
(CGPSConverterEndDocumentCallback)
。 Quartz 2D將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針,以及指示成功(true)
或失敗(false)
的布爾值。 - 啟動(dòng)頁面
(CGPSConverterBeginPageCallback)
。 Quartz 2D將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針,頁碼和當(dāng)前未使用的CFDictionary
對(duì)象。 - 結(jié)束頁面
(CGPSConverterEndPageCallback)
。 Quartz 2D將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針,以及指示成功(true)
或失敗(false)
的布爾值 - 進(jìn)行轉(zhuǎn)換
(CGPSConverterProgressCallback)
。在整個(gè)轉(zhuǎn)換過程中會(huì)定期調(diào)用此回調(diào)。 Quartz 2D將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針。 - 發(fā)送有關(guān)進(jìn)程的消息
(CGPSConverterMessageCallback)
。在轉(zhuǎn)換過程中可以發(fā)送多種消息。最有可能的是字體替換消息,以及PostScript
代碼本身生成的任何消息。寫入stdout
的任何PostScript消息都通過此回調(diào)進(jìn)行路由 - 通常這些是調(diào)試或狀態(tài)消息。此外,如果文檔格式錯(cuò)誤,可能會(huì)出現(xiàn)錯(cuò)誤消息。Quartz 2D
將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針和包含有關(guān)轉(zhuǎn)換的消息的CFString
對(duì)象。 - 銷毀
PostScript
轉(zhuǎn)換器對(duì)象(CGPSConverterReleaseInfoCallback)
。如果您已提供數(shù)據(jù)并執(zhí)行任何其他后處理任務(wù),則可以使用此回調(diào)來銷毀通用指針。 Quartz 2D將您的回調(diào)傳遞給您提供的數(shù)據(jù)的通用指針。
有關(guān)每個(gè)回調(diào)的原型,請(qǐng)參閱CGPSConverter Reference
。
Filling In a Callbacks Structure - 填充回調(diào)結(jié)構(gòu)
您需要將您創(chuàng)建的版本號(hào)和回調(diào)分配給CGPSConverterCallbacks
數(shù)據(jù)結(jié)構(gòu)的相應(yīng)字段(如Listing 15-1
所示)。 版本為0
,為您不提供回調(diào)的字段分配NULL
。
// Listing 15-1 The PostScript converter callbacks data structure
struct CGPSConverterCallbacks {
unsigned int version;
CGPSConverterBeginDocumentCallback beginDocument;
CGPSConverterEndDocumentCallback endDocument;
CGPSConverterBeginPageCallback beginPage;
CGPSConverterEndPageCallback endPage;
CGPSConverterProgressCallback noteProgress;
CGPSConverterMessageCallback noteMessage;
CGPSConverterReleaseInfoCallback releaseInfo;
};
Creating a PostScript Converter Object - 創(chuàng)建PostScript轉(zhuǎn)換器對(duì)象
您調(diào)用函數(shù)CGPSConverterCreate
來創(chuàng)建PostScript
轉(zhuǎn)換器對(duì)象。 該函數(shù)有三個(gè)參數(shù):
- 指向要傳遞給回調(diào)的通用數(shù)據(jù)的指針。 如果您不需要提供任何數(shù)據(jù),則可以提供
NULL
。 - 指向已填寫的
CGPSConverterCallbacks
數(shù)據(jù)結(jié)構(gòu)的指針。 -
NULL
。 該字段留作將來使用。
重要說明:雖然CGPSConverterConvert函數(shù)是線程安全的(它使用鎖來防止同一進(jìn)程中一次進(jìn)行多次轉(zhuǎn)換),但它對(duì)資源管理器來說不是線程安全的。 如果您的應(yīng)用程序在單獨(dú)的線程上使用資源管理器,您應(yīng)該使用鎖來防止在使用資源管理器期間執(zhí)行
CGPSConverterConvert
,或者您應(yīng)該在單獨(dú)的進(jìn)程中使用PostScript
轉(zhuǎn)換器執(zhí)行轉(zhuǎn)換。
Creating Data Provider and Data Consumer Objects - 創(chuàng)建數(shù)據(jù)提供者和數(shù)據(jù)使用者對(duì)象
您可以通過調(diào)用函數(shù)CGDataProviderCreateWithURL
來創(chuàng)建數(shù)據(jù)提供程序?qū)ο螅瑥亩峁?code>CFURL對(duì)象,該對(duì)象指定要轉(zhuǎn)換的PostScript
文件的地址。
類似地,通過調(diào)用函數(shù)CGDataConsumerCreateWithURL
創(chuàng)建數(shù)據(jù)使用者對(duì)象,提供CFURL
對(duì)象,該對(duì)象指定轉(zhuǎn)換產(chǎn)生的PDF文檔的地址。
Performing the Conversion - 進(jìn)行轉(zhuǎn)換
您調(diào)用函數(shù)CGPSConverterConvert
來執(zhí)行從PostScript
到PDF的實(shí)際轉(zhuǎn)換。 該函數(shù)作為參數(shù):
-
PostScript
轉(zhuǎn)換器對(duì)象。 - 提供
PostScript
數(shù)據(jù)的數(shù)據(jù)提供程序?qū)ο蟆?/li> - 轉(zhuǎn)換數(shù)據(jù)的數(shù)據(jù)使用者對(duì)象。
-
NULL
。 此參數(shù)保留供將來使用。
如果轉(zhuǎn)換成功,則該函數(shù)返回true
。
您可以調(diào)用函數(shù)CGPSConverterIsConverting
來檢查轉(zhuǎn)換是否仍在進(jìn)行中。
后記
本篇主要講述了PostScript轉(zhuǎn)換,感興趣的給個(gè)贊或者關(guān)注~~~