2013-05-01 58 views
1

有人知道有一個很好的API,可用於C++,用於創建具有RTL語言(例如阿拉伯語和希伯來語)以及泰語和梵文等複雜腳本的PDF?目前我們正在使用Tracker的PDF API,它非常出色,但除了LTR腳本之外,它並沒有處理任何其他內容,似乎RTL支持對他們來說並不是一個優先事項,因爲這種支持已經承諾了將近2年,似乎並不是即將出臺。在C++中創建處理RTL語言和複雜腳本的PDF

回答

1

如果一個商用的Windows專用庫是一個有效的選項,你可以試用Amyuni PDF Creator ActiveX。該庫提供了用於創建或編輯PDF文件的自定義API。如果您首先將其作爲unicode包裝在variant structure中,則應該可以在text object中設置任何類型的文本。

如果您的應用程序已經支持使用Windows GDI進行打印,則可以重新使用此代碼並嘗試使用Amyuni PDF Converter。這是一個Microsoft認證的虛擬打印機驅動程序,它生成PDF文件作爲輸出,並且可以從打印完全控制應用。

對於Amyuni PDF Converter,有兩種使用C++的方法,您可以使用隨庫提供的C++頭文件,也可以將它用作提供相同功能的COM類。詳細信息請參見documentation

該庫提供了C#,VB.Net和C++的示例代碼。下面是其中一個樣品的彙總版本:

#include "stdafx.h" 
#include "CDIntf450.h" 
#pragma comment (lib, "CDIntf450.lib") 

#define AMYUNI_PRINTER   "My PDF Converter" 
#define AMYUNI_LICENSE   "Amyuni Developer Evaluation" 
#define AMYUNI_ACTIVATION_CODE "0ABCCD...567B3" 

//Get a handle to Amyuni PDF Converter 
HANDLE hPrinter = DriverInit(AMYUNI_PRINTER); 
if(hDC == NULL){ /* error handling */ } 

//Set the Amyuni PDF Converter as the default printer 
CDISetDefaultPrinter (hPrinter); 

//Configure the path for the output file 
SetFileNameOptions (hPrinter, NoPrompt | UseFileName); 
SetDefaultFileName (hPrinter, _T("c:\\temp\\PrintSomeThing.pdf")); 

// Activate your license key 
EnablePrinter (hPrinter, AMYUNI_LICENSE, AMYUNI_ACTIVATION_CODE); 

HDC hDC = CreateDC("WINSPOOL" , AMYUNI_PRINTER, NULL, NULL); 
if(hDC == NULL){ /* error handling */ } 

DOCINFO di; 
::ZeroMemory (&di, sizeof(DOCINFO)); 
di.cbSize = sizeof(DOCINFO); 
di.lpszDocName = _T("myDocTitle"); 
StartDoc(hDC, &di); 
StartPage(hDC); 

//Print something 
TextOutW(hDC, 200, 200, L"هذا هو اختبار"), lstrlenW (L"هذا هو اختبار"))); 
TextOut(hDC, 0, 400, _T("My PDF App"), lstrlen (_T("My PDF App"))); 
EndPage(hDC); 
EndDoc(hDC); 

//Clean Up 
DeleteDC(hDC); 
RestoreDefaultPrinter(hPrinter); 
SetFileNameOptions (hPrinter, 0); 
DriverEnd(hPrinter); 

免責聲明1:我目前是Amyuni技術工作。
聲明2:示例代碼中的阿拉伯文文本片段是從谷歌翻譯獲得的,所以如果事實證明這是無稽之談,我會提前道歉。

+0

謝謝 - 商業圖書館是好的。你能否指點我一些C++示例,展示如何使用PDF Converter與GDI調用一起從頭開始創建PDF文件? – arksoft 2013-05-02 12:06:46

+0

@arksoft我已經更新了我的答案和更多細節。 – yms 2013-05-02 14:01:07