从流中读取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头签名未找到。
在通过注释进行故障排除后,很明显原因是这一行:
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);