1

我想转换来自 kofax 版本的图像文件。我把这个作为信息。

将 Kofax Release 文档转换为二进制文件

并创建了这段代码

    public KfxReturnValue ReleaseDoc()
    {
        try
        {
            documentData.ImageFiles.Copy(Path.GetTempPath(), -1);
            string tmpFile = Path.Combine(Path.GetTempPath(), documentData.UniqueDocumentID.ToString("X8")) + Path.GetExtension(documentData.ImageFiles[0].FileName);
            string fileName = Path.GetFileName(tmpFile);
            byte[] binaryFile = null;

            if (File.Exists(documentData.KofaxPDFFileName)) // PDF
            {
                binaryFile = File.ReadAllBytes(documentData.KofaxPDFFileName);
            }
            else if (File.Exists(tmpFile)) // TIFF
            {
                binaryFile = File.ReadAllBytes(tmpFile);
                File.Delete(tmpFile);
            }
            else
            {
                // throw an error
                return KfxReturnValue.KFX_REL_ERROR;
            }

            // use fileName and binaryFile

            return KfxReturnValue.KFX_REL_SUCCESS;
        }
        catch (Exception e)
        {
            // log the error
            return KfxReturnValue.KFX_REL_ERROR;
        }
    }

当我执行这一行

string tmpFile = Path.Combine(Path.GetTempPath(), documentData.UniqueDocumentID.ToString("X8")) + Path.GetExtension(documentData.ImageFiles[0].FileName);

它总是跳入 catch 语句并抛出一个在集合异常中找不到的项目。

出了什么问题,我该如何解决?

4

1 回答 1

1

我试图通过使用来解决问题

string fileName;
foreach (ImageFile img in documentData.ImageFiles)
{
    fileName = img.FileName;
    break;
}

代替

documentData.ImageFiles[0]

我知道这个解决方案真的很难看,我会尝试找到一个更好的解决方案。我刚发现

string tempImgFileName = documentData.ImageFiles.ReleasedDirectory;

也有效。最后我使用这段代码

    public KfxReturnValue ReleaseDoc()
    {
        try
        {
            string tempPath = Path.GetTempPath();
            documentData.ImageFiles.Copy(tempPath, -1);

            string tempImgFileName = documentData.ImageFiles.ReleasedDirectory;
            string fileExtension = Path.GetExtension(tempImgFileName);
            string documentId = documentData.UniqueDocumentID.ToString("X8");
            string filePath = Path.Combine(tempPath, documentId);
            string tmpTargetFile = filePath + fileExtension;
            string fileToRead = string.Empty;

            if (File.Exists(documentData.KofaxPDFFileName)) // try to create a PDF binary
            {
                fileToRead = documentData.KofaxPDFFileName;
            }
            else if (File.Exists(tmpTargetFile)) // try to create a TIFF binary if PDF is not possible
            {
                fileToRead = tmpTargetFile;
            }
            else
            {
                // handle error
                return KfxReturnValue.KFX_REL_ERROR;
            }

            string fileName = Path.GetFileName(tmpTargetFile);
            byte[] binaryFile = File.ReadAllBytes(fileToRead);
            File.Delete(tmpTargetFile);

            // use fileName and binaryFile;

            return KfxReturnValue.KFX_REL_SUCCESS;
        }
        catch (Exception e)
        {
            // handle error
            return KfxReturnValue.KFX_REL_ERROR;
        }
    }
于 2019-01-18T12:48:29.047 回答