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

时间:2016-10-18 10:50:36

标签: 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)
        {

        }

例外:找不到PDF标题签名。

1 个答案:

答案 0 :(得分:4)

原因是,通过评论进行故障排除后显而易见的是这一行:

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);