2013-05-01 2 views
1

아랍어 및 히브리어와 같은 RTL 언어뿐만 아니라 태국어 및 Devanagari와 같은 복잡한 스크립트로 PDF를 작성하는 데 C++에서 유용한 좋은 API를 알고 있습니까? 우리는 현재 Tracker 's PDF API를 사용하고 있습니다. 그러나 그것은 LTR 스크립트 이외의 것을 처리하지 못합니다. RTL 지원은 거의 2 년 동안이 약속이 약속 되었기 때문에 RTL 지원이 그다지 우선 순위가 아닌 것처럼 보입니다. 출현.RTL 언어 및 복잡한 스크립트를 처리하는 C++로 PDF 작성하기

답변

1

상용 Windows 전용 라이브러리가 유효한 옵션 인 경우 Amyuni PDF Creator ActiveX으로 시도 할 수 있습니다. 라이브러리는 PDF 파일을 작성하거나 편집하기위한 사용자 정의 API를 제공합니다. variant structure의 유니 코드로 먼저 포장하는 경우 text object에 모든 종류의 텍스트를 설정할 수 있어야합니다.

응용 프로그램이 이미 Windows GDI를 사용하여 인쇄를 지원하는 경우이 코드를 다시 사용하고 Amyuni PDF Converter으로 시도 할 수 있습니다. 이것은 PDF 파일을 출력으로 생성하고 인쇄에서 완전히 제어 할 수있는 Microsoft 인증 가상 프린터 드라이버입니다. 신청.

Amyuni PDF Converter의 경우 Amyuni PDF Converter의 경우 라이브러리와 함께 제공되는 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 : 샘플 코드의 아랍어 텍스트는 Google 번역에서 가져온 것이므로 잘못 해석하는 경우 사전에 사과드립니다.

+0

감사합니다 - 상용 라이브러리는 정상입니다. GDI 호출과 함께 PDF 변환기를 사용하여 처음부터 PDF 파일을 만드는 방법을 보여주는 C++ 예제를 가르쳐 주시겠습니까? – arksoft

+0

@arksoft 자세한 내용으로 답변을 업데이트했습니다. – yms