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

本文关键字:PDF 找不到 读取 | 更新日期: 2023-09-27 18:13:36

我正在从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)
        {
        }

异常:PDF头签名未找到。

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

在通过注释进行故障排除后,很明显原因是这一行:

blob.DownloadToStream(memStream);

将流定位在下载内容的右边

然后,在构造pdf reader对象时,它期望从当前位置找到pdf文件。

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

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

添加这一行:

memStream.Position = 0;

在下载之后,但在阅读器被构造为重新定位之前。

下面是这个区域的代码:

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