L_ReadFileAttachments

包括“l_bitmap.h”

L_LTFIL_APIL_INTL_ReadFileAttachments (pszFile ppAttachments、pLoadOptions pInfo)

阅读附件的属性嵌入到指定的文件中。

参数

L_TCHAR* pszFile

字符串包含所有者的名称文件可能包含嵌入的附件。

L_FILEATTACHMENTS* * ppAttachments

指向变量的指针将填充任何附件发现的属性。

LOADFILEOPTION* pLoadOptions

指针可选的扩展加载选项。通过使用默认加载选项。指L_LoadFile为更多的信息。

FILEINFO* pInfo

指针指向一个FILEINFO结构。这种结构可以包含文件信息用于加载一个图像,或者它可能是更新信息文件被加载。

这个值可以

L_LoadFile为更多的信息。

返回

价值 意义
成功 函数是成功的。
ERROR_NO_ATTACHMENTS 支持附件的文件格式,比如PDF,但是没有发现附件。
ERROR_FEATURE_NOT_SUPPORTED 不支持的文件格式附件(如PNG或BMP),或LEADTOOLS不支持这种类型的阅读附件的格式。
错误PDFINVALID_PASSWORD 业主文件是加密的。通过使用正确的密码L_SetPDFOptions并再次尝试。
< 1 一个错误发生。指返回代码

评论

应用程序可以读取附件包含在一个文件的属性通过执行以下步骤:

  1. 声明一个指针的类型L_FILEATTACHMENTS并设置其值
  2. 调用L_ReadFileAttachments在业主文件包含附件,传递的地址L_FILEATTACHMENTS指针。
  3. 处理附件。处理附件的一个例子将被调用L_ExtractAttachment提取附件的文件数据。
  4. 当不再需要的数据,调用L_FreeAttachments在免费使用的内存的指针L_FILEATTACHMENTS

L_ReadFileAttachments返回以下值:

该方法返回的附件项的数量是一样的FILEINFO.nAttachmentCount返回的对象的价值L_FileInfo

每一个L_FILEATTACHMENT包含附件如它的属性pszFileName,uFileLength业主提供的文档和其他信息。

使用L_ExtractAttachment将附件文件的二进制内容提取到一个输出磁盘文件或流进行进一步处理(例如,通过调用L_FileInfoL_LoadBitmap)。

LEADTOOLS支持阅读附件嵌入在以下文件格式:

PDF

PDF文件支持嵌入式任意数量的附件和文件格式(如PDF、TIFF、XML等)。PDF文件也可以被创建为一个投资组合包含多个文件组合成一个集成单元。在这些类型的文件,该文件包含一个通用的帮助页面等文本”最好的经验,打开这个PDF组合在一个兼容的查看器”,以及任意数量的附件和模式来控制如何查看文档。的价值FILEINFO.uFlags将包含FILEINFO_PORTFOLIO如果文件是一个PDF格式的组合,并由应用程序指定文件的任何进一步的处理。

必需的dll和库

平台

Win32 x64, Linux。

另请参阅

功能

例子

这个例子将执行以下操作:

  • 所有附件上显示信息嵌入到文件中
  • 附件文件提取到一个输出目录
  • 显示每个附件的文件格式和页数
    / /这个例子将执行以下操作:/ /显示所有的附件信息嵌入到文件中/ / - - - - - -附件文件提取到一个输出目录/ /——显示每个附件的文件格式和页数L_INT ReadFileAttachmentsExample (L_TCHAR *文件名,L_TCHAR * outputDir){L_INT attachmentCount;/ /获取信息在文件所有者/ /这一步是可选的,如果我们不感兴趣决定业主文件格式/ /还是一个PDF组合。FILEINFO FILEINFO;&fileInfo L_INT ret = L_FileInfo(文件名,运算符(FILEINFO) FILEINFO_TOTALPAGES, NULL);如果(ret ! =成功)返回受潮湿腐烂;printf (“信息\ n”);printf (“格式:% d \ n”,fileInfo.Format);/ /如果PDF,检查如果是组合如果(fileInfo。格式= = FILE_RAS_PDF)printf (“IsPortfolio: % d \ n”(fileInfo。旗帜和FILEINFO_PORTFOLIO) = = FILEINFO_PORTFOLIO);attachmentCount = fileInfo.nAttachmentCount;printf (“附件:% d \ n”,fileInfo.nAttachmentCount);/ /读附件嵌入到该文件的属性L_FILEATTACHMENTS *附件=零;ret = L_ReadFileAttachments(文件名,附件,空,空);如果(ret = = ERROR_FEATURE_NOT_SUPPORTED){/ /这意味着文件的格式不支持附件printf (“警告:附件是不支持的文件格式\ n”);返回成功;}其他的如果(ret = = ERROR_NO_ATTACHMENTS){/ /这意味着文件的格式支持附件,但我们没有发现任何文件printf (“警告:文件没有附件\ n”);返回成功;}其他的如果(ret ! =成功){/ /其他错误是出乎意料的时候printf (“错误:% d \ n”ret);返回受潮湿腐烂;}/ /检查断言(附件- > uItemCount = = attachmentCount);/ /如果不存在创建输出目录CreateDirectory (outputDir, NULL);LOADFILEOPTION LOADFILEOPTION;L_GetDefaultLoadFileOption (&loadFileOption运算符(LOADFILEOPTION));/ /提取附件(L_UINT attachmentIndex = 0;attachmentIndex <附件- > uItemCount & & ret = =成功;attachmentIndex + +){/ /获取当前的附件常量L_FILEATTACHMENT *附件= (常量L_FILEATTACHMENT *) ((常量L_UCHAR *) - > pItems +附件(附件- > uItemStructSize * attachmentIndex));/ /得到输出文件的名字L_TCHAR outputFileName [MAX_PATH] = {0};wcscat (outputFileName outputDir);size_t len = wcslen (outputFileName);如果(outputFileName [len - 1] ! = ' \ \ ')wcscat (outputFileName L_TEXT (" \ \ "));wcscat (outputFileName附件- > pszFileName);wprintf (L_TEXT (“提取附件输出文件:% s \ n”),outputFileName);/ /提取附件数量设置loadFileOption。附件- > uAttachmentNumber nAttachment = (L_INT);/ /提取它ret = L_ExtractAttachment(文件名,NULL, 0 &loadFileOption NULL, 0, outputFileName, NULL, NULL);如果(ret = =成功){/ /显示信息在这个附件。请注意,这可能会失败如果附件/ /不是一个有效的图像文件格式。memset (&fileInfo 0运算符(FILEINFO));ret = L_FileInfo (outputFileName &fileInfo,运算符(FILEINFO) FILEINFO_TOTALPAGES, NULL);如果(ret = =成功){printf (“附件格式是% d和% d页面\ n”fileInfo。格式,fileInfo.TotalPages);}其他的{printf (“不能获得附件格式,错误% d \ n”ret);ret =成功;/ /吞下这个错误}}}/ /附件L_FreeAttachments(附件);返回受潮湿腐烂;}/ /这个示例显示了如何加载一个加密附件包含在一个加密的文件所有者/ / PDF文件组合(业主)使用密码“通过”/ /附件(嵌入的文件)使用不同的密码:“pass1作为”/ /操作需要两个密码,那么您将需要使用两个步骤:/ / 1)提取附件使用所有者密码(通过)/ / 2)从附件加载图像缓冲区使用附件密码(pass1作为)L_INT ReadEncryptedFileAttachmentsExample (L_TCHAR *文件名,pBITMAPHANDLE pBitmap){LOADFILEOPTION LOADFILEOPTION;L_GetDefaultLoadFileOption (&loadFileOption运算符(LOADFILEOPTION));loadFileOption。nAttachment = 1;FILEPDFOPTIONS pdfOptions = {运算符(FILEPDFOPTIONS)};L_GetPDFOptions (&pdfOptions运算符(FILEPDFOPTIONS));strcpy_s ((字符*)pdfOptions。szPassword _countof (pdfOptions.szPassword),“pass1作为”);/ /首先试试附件的密码(pass1作为)L_SetPDFOptions (&pdfOptions);/ /尝试加载图像存储在附件1中使用的密码文件所有者——应该失败pBitmap L_INT nRet = L_LoadFile(文件名,运算符(BITMAPHANDLE), 0 ORDER_BGRORGRAY LOADFILE_ALLOCATE | LOADFILE_STORE,空,空,&loadFileOption, NULL);断言(nRet = = ERROR_PDF_INVALID_PASSWORD);如果(nRet = = ERROR_PDF_INVALID_PASSWORD){strcpy_s ((字符*)pdfOptions。szPassword _countof (pdfOptions.szPassword),“通过”);/ /使用所有者的密码文件L_SetPDFOptions (&pdfOptions);L_UCHAR * pbuf =零;L_SIZE_T uBufferSize = 0;/ /提取附件1 (= loadFileOption.PageNumber)内存缓冲区。/ / L_ExtractAttachment将分配缓冲区和存储pbuf的指针。/ /将存储在uBufferSize缓冲区的大小/ /我们将免费需要缓冲使用L_FreeBuffer当我们不需要它了。nRet = L_ExtractAttachment (&loadFileOption文件名,空,空,空,0,NULL, &pBuffer, &uBufferSize);如果(nRet ! =成功)返回nRet;/ /尝试加载附件没有提交正确的密码。此操作应该会失败nRet = L_LoadMemory (pbuf pBitmap,运算符(BITMAPHANDLE), 0 ORDER_BGRORGRAY LOADFILE_ALLOCATE | LOADFILE_STORE,空,空,uBufferSize,空,空);断言(nRet = = ERROR_PDF_INVALID_PASSWORD);如果(nRet = = ERROR_PDF_INVALID_PASSWORD){/ /使用附件的密码文件。strcpy_s ((字符*)pdfOptions。szPassword _countof (pdfOptions.szPassword),“pass1作为”);L_SetPDFOptions (&pdfOptions);/ /没有必要通过LOADFILEOPTION结构了,因为正在从附件加载主图像。nRet = L_LoadMemory (pbuf pBitmap,运算符(BITMAPHANDLE), 0 ORDER_BGRORGRAY LOADFILE_ALLOCATE | LOADFILE_STORE,空,空,uBufferSize,空,空);}L_FreeBuffer (pbuf);}返回nRet;}
LEADTOOLS光栅成像C API的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。