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