我正在从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标题签名。
答案 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);