跳转到主要内容
将文档导出为 PDF 或 XPS 格式时,您可能会遇到以下特定错误:
  • FREN_E_INVALID_CREATION_DATE_FORMAT;
  • FREN_E_INVALID_MODIFICATION_DATE_FORMAT.
如果文档元数据中指定的创建日期或修改日期不符合 PDF 2.0 标准,就会出现这些错误。正确的日期格式为 D:YYYYMMDDHHmmSSOHH’mm,其中 YYYY — 年,MM — 月,DD — 日,HHmmSS — 时间,OHH’mm — 与协调世界时的偏移量绝对值。 要处理此类错误,您可以更改日期导出设置,或将日期修正为符合该格式。 要更改日期导出设置:
  1. 获取输出格式的导出参数对象中的 DocumentContentInfoWritingParams 子对象:
  2. DocumentContentInfoWritingParams 对象的 WriteCreationDateWriteModificationDate 属性用于指定应保存到输出文档中的日期。在这种情况下,您可以使用 WD_No 值禁用日期保存,并使用 WD_Current 值采用当前日期。
  3. 例如,使用 FRDocument 对象的 Export 方法重新导出文档,并将您刚刚设置好的参数对象作为最后一个输入参数传入。
要修正日期:
  1. 使用 FRDocument 对象的 DocumentContentInfo 属性访问 DocumentСontentInfo 对象。
  2. 修改 DocumentСontentInfo 对象的 CreationDateModificationDate 属性中的日期。
  3. 使用 FRDocument 对象的 Export 方法重新导出文档。

示例

本主题中提供的代码示例仅适用于 Windows。
// 设置创建日期和修改日期的导出参数对象
FREngine::IPDFExportParamsPtr pdfExportParams = Engine->CreatePDFExportParams();
pdfExportParams->PDFFeatures->MetaDataWritingParams->put_WriteCreationDate ( FREngine::WD_DocumentContentInfo );
pdfExportParams->PDFFeatures->MetaDataWritingParams->put_WriteModificationDate ( FREngine::WD_DocumentContentInfo );
 
// 更正创建/修改日期,然后再次导出文档
const int numberOfExportAttempts = 3;
for (int i = 0; i < numberOfExportAttempts; i++)
{
  try
  {
     frDocument->Export( pdfExportPath, FREngine::FEF_PDF, pdfExportParams );
  }
  catch (_com_error & e)
  {
     if (e.Error() == (int) FREngine::FREN_E_INVALID_CREATION_DATE_FORMAT) {
         frDocument->DocumentContentInfo->put_CreationDate( L"D:20181011234506Z" );
     }
     else if (e.Error() == (int) FREngine::FREN_E_INVALID_MODIFICATION_DATE_FORMAT) {
         pdfExportParams->PDFFeatures->MetaDataWritingParams->put_WriteModificationDate ( FREngine::WD_Current );
     }
     else
     {
           // 恢复原始的未处理异常并继续向上抛出
           throw;
     }
  }
}
// 设置创建日期和修改日期的导出参数
FREngine.PDFExportParams pdfExportParams = engineLoader.Engine.CreatePDFExportParams();
pdfExportParams.PDFFeatures.MetaDataWritingParams.WriteCreationDate = FREngine.WriteDateEnum.WD_DocumentContentInfo;
pdfExportParams.PDFFeatures.MetaDataWritingParams.WriteModificationDate = FREngine.WriteDateEnum.WD_DocumentContentInfo;
 
// 处理两类导出错误,因此导出尝试次数最多为 3 次
const int numberOfExportAttempts = 3;
for (int i = 0; i < numberOfExportAttempts; ++i)
{
    try
    {
       document.Export( "D:\\Demo.pdf", FREngine.FileExportFormatEnum.FEF_PDF, pdfExportParams );
       break;
    }
    catch (COMException error)
    {
       if (error.ErrorCode == (int)FREngine.ErrorCodes.FREN_E_INVALID_CREATION_DATE_FORMAT)
       {
           // 更正创建日期
           document.DocumentContentInfo.CreationDate = "D:20181011234506Z";
       }
       else if (error.ErrorCode == (int)FREngine.ErrorCodes.FREN_E_INVALID_MODIFICATION_DATE_FORMAT)
       {
           // 更改修改日期的导出参数
           pdfExportParams.PDFFeatures.MetaDataWritingParams.WriteModificationDate = FREngine.WriteDateEnum.WD_Current;
       }
       else
       {
           // 恢复原始的未处理异常并继续向上抛出
           throw;
       }
    }
}

另请参见

DocumentСontentInfo 标准返回代码 导出参数调优 错误处理