用c++创建处理RTL语言和复杂脚本的pdf
Creating PDFs in C++ that handle RTL languages and complex scripts
有没有人知道一个好的API,可以从c++中使用RTL语言(如阿拉伯语和希伯来语)以及复杂的脚本(如泰语和德文语)创建pdf ?我们目前使用的是Tracker的PDF API,它非常出色,但它除了LTR脚本之外什么都不能处理,而且RTL支持似乎并不是他们的优先考虑事项,因为这项支持已经承诺了将近2年,但似乎还没有实现。
如果商业的windows专用库是一个有效的选择,您可以尝试使用Amyuni PDF Creator ActiveX。该库提供了用于创建或编辑PDF文件的自定义API。你应该能够设置文本对象中的任何类型的文本,如果你首先将它包装为unicode在一个变体结构。
如果您的应用程序已经支持使用Windows GDI打印,您可以重用此代码并尝试使用Amyuni PDF转换器。这是一个经过微软认证的虚拟打印机驱动程序,可以生成PDF文件作为输出,并且可以从打印应用程序中完全控制。
对于Amyuni PDF转换器,有两种方法可以从c++中使用它,您可以使用库提供的c++头文件,或者您可以将其用作提供相同功能的COM类。更多细节可以在文档中找到。
该库提供了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 Technologies工作。
免责声明2:示例代码上的阿拉伯语文本来自谷歌翻译,因此如果结果是无意义的,我提前道歉。
相关文章:
- 函数复杂度分析
- 如何通过cpp程序运行shell脚本
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 在程序中编写脚本来编写和编译代码
- 如何在c++中使用system()来运行包含空格的python脚本
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 使用 Python Extension API 包装复杂C++类
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- VIM:执行复杂文件类型的脚本和显示结果
- 用c++创建处理RTL语言和复杂脚本的pdf
- 保存复杂的脚本对象的状态
- DirectWrite:拉丁语和复杂脚本使用不同的字体