重命名 PDF 文件
Rename PDF file
我想创建一个自定义模块,通过生成的文件名字符串重命名生成的 PDF 文件,其中包含来自索引字段、批处理字段等的一些字段值
所以当谈到批处理时,我可以这样做(setupTransformator
包含来自自定义存储字符串的解析值)
public void ProcessBatch(IBatch batch)
{
IACDataElement batchElement = GetBatchElementFromBatch(batch);
IACDataElementCollection currentDocuments = GetDocumentsFromBatchElement(batchElement);
IACDataElement customStorageStrings = GetCustomStorageStringsFromBatch(batch);
IACDataElementCollection batchFields = GetElementsByName(batchElement, ResourcesKofax.BATCH_FIELDS, ResourcesKofax.BATCH_FIELD);
setupTransformator = new SetupTransformator(customStorageStrings);
for (int i = 0; i < currentDocuments.Count; i++)
{
int currentDocumentIndex = i + 1;
IACDataElement currentDocument = currentDocuments[currentDocumentIndex];
IACDataElementCollection indexFields = GetElementsByName(currentDocument, ResourcesKofax.INDEX_FIELDS, ResourcesKofax.INDEX_FIELD);
string targetFilename = setupTransformator.GetFilename(batchElement, currentDocument, batchFields, indexFields);
string documentFilePath = currentDocument[ResourcesKofax.PDF_GENERATION_FILE_NAME];
// rename the PDF file
}
batch.BatchClose(KfxDbState.KfxDbBatchReady, KfxDbQueue.KfxDbQueueNext, 0, string.Empty);
}
private IACDataElement GetBatchElementFromBatch(IBatch batch)
{
IACDataElement rootElement = batch.ExtractRuntimeACDataElement(0);
return rootElement.FindChildElementByName(ResourcesKofax.BATCH);
}
private IACDataElementCollection GetDocumentsFromBatchElement(IACDataElement batchElement)
{
return GetElementsByName(batchElement, ResourcesKofax.DOCUMENTS, ResourcesKofax.DOCUMENT);
}
private IACDataElement GetCustomStorageStringsFromBatch(IBatch batch)
{
IACDataElement setupElement = batch.ExtractSetupACDataElement(0);
IACDataElementCollection batchClasses = GetElementsByName(setupElement, ResourcesKofax.BATCH_CLASSES, ResourcesKofax.BATCH_CLASS);
IACDataElement batchClass = batchClasses[1];
return batchClass.FindChildElementByName(ResourcesKofax.BATCH_CLASS_CUSTOM_STORAGE_STRINGS);
}
private IACDataElementCollection GetElementsByName(IACDataElement dataElement, string rootName, string targetName)
{
return dataElement.FindChildElementByName(rootName).FindChildElementsByName(targetName);
}
我必须使用 File.Move
方法还是可以使用 Kofax 库中的方法?
文件名只能由导出连接器处理。只要批次在系统中,您就不应该更改它们的名称,因为这可能会导致数据丢失和损坏。
这尤其适用于为 PDF 名称使用字段值时 - 因为只要批次在系统中,值就会发生变化,您将如何适应这种情况?没有什么可以阻止您的用户在您的自定义模块中处理批次并将批次设置回验证并更改一个或多个字段。
谈到导出连接器及其 API:
默认情况下,Kofax 提供两种导出 PDF 的方法 - 都在 ReleaseData
对象上(这取自 API 文档):
CopyKofaxPDFFile
: 将属于文档的PDF文件复制到导出设置时定义的导出PDF路径中。
CopyKofaxPDFFileToPath
:将文档所属的PDF文件复制到指定路径(该路径为该方法的字符串输入参数)。
这两种方法都使用了您 可以 在安装过程中定义的东西 - 例如,CopyKofaxPDFFile
使用 KofaxPDFPath
属性 .我不确定是否为文件名保留了 属性。
我通常坚持在运行时公开的 KofaxPDFProperty
并执行 File.Copy
操作。我不建议移动文件或删除它,因为这是 KC 在批量导出成功后自动处理的事情(理论上,可能有另一个导出,或者导出可能只是失败)。
使用 ReleaseData
对象访问字段值,并使用字符串插值来定义 PDF 的最终名称。
我想创建一个自定义模块,通过生成的文件名字符串重命名生成的 PDF 文件,其中包含来自索引字段、批处理字段等的一些字段值
所以当谈到批处理时,我可以这样做(setupTransformator
包含来自自定义存储字符串的解析值)
public void ProcessBatch(IBatch batch)
{
IACDataElement batchElement = GetBatchElementFromBatch(batch);
IACDataElementCollection currentDocuments = GetDocumentsFromBatchElement(batchElement);
IACDataElement customStorageStrings = GetCustomStorageStringsFromBatch(batch);
IACDataElementCollection batchFields = GetElementsByName(batchElement, ResourcesKofax.BATCH_FIELDS, ResourcesKofax.BATCH_FIELD);
setupTransformator = new SetupTransformator(customStorageStrings);
for (int i = 0; i < currentDocuments.Count; i++)
{
int currentDocumentIndex = i + 1;
IACDataElement currentDocument = currentDocuments[currentDocumentIndex];
IACDataElementCollection indexFields = GetElementsByName(currentDocument, ResourcesKofax.INDEX_FIELDS, ResourcesKofax.INDEX_FIELD);
string targetFilename = setupTransformator.GetFilename(batchElement, currentDocument, batchFields, indexFields);
string documentFilePath = currentDocument[ResourcesKofax.PDF_GENERATION_FILE_NAME];
// rename the PDF file
}
batch.BatchClose(KfxDbState.KfxDbBatchReady, KfxDbQueue.KfxDbQueueNext, 0, string.Empty);
}
private IACDataElement GetBatchElementFromBatch(IBatch batch)
{
IACDataElement rootElement = batch.ExtractRuntimeACDataElement(0);
return rootElement.FindChildElementByName(ResourcesKofax.BATCH);
}
private IACDataElementCollection GetDocumentsFromBatchElement(IACDataElement batchElement)
{
return GetElementsByName(batchElement, ResourcesKofax.DOCUMENTS, ResourcesKofax.DOCUMENT);
}
private IACDataElement GetCustomStorageStringsFromBatch(IBatch batch)
{
IACDataElement setupElement = batch.ExtractSetupACDataElement(0);
IACDataElementCollection batchClasses = GetElementsByName(setupElement, ResourcesKofax.BATCH_CLASSES, ResourcesKofax.BATCH_CLASS);
IACDataElement batchClass = batchClasses[1];
return batchClass.FindChildElementByName(ResourcesKofax.BATCH_CLASS_CUSTOM_STORAGE_STRINGS);
}
private IACDataElementCollection GetElementsByName(IACDataElement dataElement, string rootName, string targetName)
{
return dataElement.FindChildElementByName(rootName).FindChildElementsByName(targetName);
}
我必须使用 File.Move
方法还是可以使用 Kofax 库中的方法?
文件名只能由导出连接器处理。只要批次在系统中,您就不应该更改它们的名称,因为这可能会导致数据丢失和损坏。
这尤其适用于为 PDF 名称使用字段值时 - 因为只要批次在系统中,值就会发生变化,您将如何适应这种情况?没有什么可以阻止您的用户在您的自定义模块中处理批次并将批次设置回验证并更改一个或多个字段。
谈到导出连接器及其 API:
默认情况下,Kofax 提供两种导出 PDF 的方法 - 都在 ReleaseData
对象上(这取自 API 文档):
CopyKofaxPDFFile
: 将属于文档的PDF文件复制到导出设置时定义的导出PDF路径中。CopyKofaxPDFFileToPath
:将文档所属的PDF文件复制到指定路径(该路径为该方法的字符串输入参数)。
这两种方法都使用了您 可以 在安装过程中定义的东西 - 例如,CopyKofaxPDFFile
使用 KofaxPDFPath
属性 .我不确定是否为文件名保留了 属性。
我通常坚持在运行时公开的 KofaxPDFProperty
并执行 File.Copy
操作。我不建议移动文件或删除它,因为这是 KC 在批量导出成功后自动处理的事情(理论上,可能有另一个导出,或者导出可能只是失败)。
使用 ReleaseData
对象访问字段值,并使用字符串插值来定义 PDF 的最终名称。