1

アラビア語やヘブライ語などの RTL 言語や、タイ語やデーバナーガリー語などの複雑なスクリプトを使用して PDF を作成するための、C++ から使用できる優れた API を知っている人はいますか? 現在、トラッカーの PDF API を使用していますが、これは優れていますが、LTR スクリプト以外は処理しません。また、RTL サポートは、ほぼ 2 年間約束されており、そうではないように思われるため、彼らにとって実際には優先事項ではないようです。間もなく。

4

1 に答える 1

1

商用の Windows 専用ライブラリが有効なオプションである場合は、Amyuni PDF Creator ActiveXを試すことができます。このライブラリは、PDF ファイルを作成または編集するためのカスタム API を提供します。最初にバリアント構造で unicode としてラップすると、テキスト オブジェクトに任意の種類のテキストを設定できるはずです。 お使いのアプリケーションが Windows GDI を使用した印刷を既にサポートしている場合は、このコードを再利用して代わりにAmyuni PDF Converterを試すことができます。これは Microsoft 認定の仮想プリンター ドライバーで、出力として PDF ファイルを生成し、印刷アプリケーションから完全に制御できます。 .



Amyuni PDF Converter の場合、C++ から使用する方法は 2 つあります。ライブラリで提供される C++ ヘッダー ファイルを使用する方法と、同じ機能を提供する COM クラスとして使用する方法です。詳細については、ドキュメントを参照してください。

ライブラリには、C#、VB.Net、および C++ のサンプル コードが付属しています。サンプルの 1 つの要約バージョンを次に示します。

#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 Technologies で働いています。
免責事項 2: サンプル コードのアラビア語のテキストは Google 翻訳から取得したものです。

于 2013-05-01T13:24:15.343 に答える