从流中读取 pdf 时未找到 PDF 标头签名,

Mit*_*ati 0 c# itext azure-storage-blobs

我正在从 blob 容器下载文件并保存到流中并尝试阅读 pdf。

            //creating a Cloud Storage instance
        CloudStorageAccount StorageAccount = CloudStorageAccount.Parse(connectionstring);
        //Creating a Client to operate on blob
        CloudBlobClient blobClient = StorageAccount.CreateCloudBlobClient();
        // fetching the container based on name
        CloudBlobContainer container = blobClient.GetContainerReference(containerName);
        //Get a reference to a blob within the container.
        CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
        var memStream = new MemoryStream();
        blob.DownloadToStream(memStream);
        try
        {
            PdfReader reader = new PdfReader(memStream);
        }
        catch(Exception ex)
        {

        }
Run Code Online (Sandbox Code Playgroud)

例外:未找到 PDF 标头签名。

ang*_*son 7

通过评论进行故障排除后很明显的原因是这一行:

blob.DownloadToStream(memStream);
Run Code Online (Sandbox Code Playgroud)

位于流权后,下载的内容。

然后,在构建 pdf 阅读器对象时,它希望从当前位置找到 Pdf 文件。

这是处理流时的一个常见问题,即首先写入某些内容然后尝试读取该内容,必须记住在必要时重新定位流。

在这种情况下,假设流中只有 pdf,解决方案是在尝试读取 pdf 文件之前将流重新定位回开头:

添加这一行:

memStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)

在下载之后但在读取器构建以重新定位之前。

以下是该区域中的代码:

blob.DownloadToStream(memStream);
memStream.Position = 0; // <----------------------------------- add this line
try
{
    PdfReader reader = new PdfReader(memStream);
Run Code Online (Sandbox Code Playgroud)