PdfSharp.SharpZipLib.SharpZipBaseException - Header 校验和非法
PdfSharp.SharpZipLib.SharpZipBaseException - Header checksum illegal
我真的卡住了,试图获取没有密码保护的 PDF 的第一页(即 Adobe Reader 可以在没有提示的情况下打开它),我收到一个错误当我调用 PdfReader.Open()
时返回
using (var pdfStream = new MemoryStream(_underlyingBytes))
{
using (var allPages = PdfReader.Open(pdfStream, string.Empty, PdfDocumentOpenMode.ReadOnly))
{
if (allPages.PageCount < 1) throw new ArgumentException("PDF has no pages");
using (var firstPage = new PdfDocument())
{
firstPage.AddPage(allPages.Pages[0]);
using (var stream = new MemoryStream())
{
firstPage.Save(stream);
_underlyingBytes = stream.ToArray();
return this;
}
}
}
}
编辑
Here's the PDF I'm trying to open
如果有人想知道 _underlyingBytes 的填充位置:
using (var stream = new MemoryStream())
{
blob.DownloadToStream(stream);
stream.Position = 0;
_underlyingBytes = stream.ToArray();
}
好吧,我没能使用 PDFSharp 来完成这项工作,但我终于设法使用了 ITextSharp。他们公开了一个静态 属性 "unethicalreading" 允许您打开受密码保护的 PDF - 如果 adobe reader 可以在没有密码的情况下打开 PDF,仍然不是 100% 的原因。 ..
无论如何,现在的代码是:
using (var pdfStream = new MemoryStream(_underlyingBytes))
{
PdfReader.unethicalreading = true;
using (var reader = new PdfReader(pdfStream))
{
if (reader.NumberOfPages < 1) throw new ArgumentException("PDF has no pages");
using (var document = new Document(reader.GetPageSizeWithRotation(1)))
{
using (var outputStream = new MemoryStream())
{
using (var pdfCopyProvider = new PdfCopy(document, outputStream))
{
document.Open();
var importedPage = pdfCopyProvider.GetImportedPage(reader, 1);
pdfCopyProvider.AddPage(importedPage);
document.Close();
reader.Close();
_underlyingBytes = outputStream.ToArray();
return this;
}
}
}
}
}
这很好用,如果打算将第一页写入磁盘,则 MemoryStream 可以很容易地替换为 FileStream。
希望这对以后的人有所帮助。
我真的卡住了,试图获取没有密码保护的 PDF 的第一页(即 Adobe Reader 可以在没有提示的情况下打开它),我收到一个错误当我调用 PdfReader.Open()
时返回using (var pdfStream = new MemoryStream(_underlyingBytes))
{
using (var allPages = PdfReader.Open(pdfStream, string.Empty, PdfDocumentOpenMode.ReadOnly))
{
if (allPages.PageCount < 1) throw new ArgumentException("PDF has no pages");
using (var firstPage = new PdfDocument())
{
firstPage.AddPage(allPages.Pages[0]);
using (var stream = new MemoryStream())
{
firstPage.Save(stream);
_underlyingBytes = stream.ToArray();
return this;
}
}
}
}
编辑
Here's the PDF I'm trying to open
如果有人想知道 _underlyingBytes 的填充位置:
using (var stream = new MemoryStream())
{
blob.DownloadToStream(stream);
stream.Position = 0;
_underlyingBytes = stream.ToArray();
}
好吧,我没能使用 PDFSharp 来完成这项工作,但我终于设法使用了 ITextSharp。他们公开了一个静态 属性 "unethicalreading" 允许您打开受密码保护的 PDF - 如果 adobe reader 可以在没有密码的情况下打开 PDF,仍然不是 100% 的原因。 ..
无论如何,现在的代码是:
using (var pdfStream = new MemoryStream(_underlyingBytes))
{
PdfReader.unethicalreading = true;
using (var reader = new PdfReader(pdfStream))
{
if (reader.NumberOfPages < 1) throw new ArgumentException("PDF has no pages");
using (var document = new Document(reader.GetPageSizeWithRotation(1)))
{
using (var outputStream = new MemoryStream())
{
using (var pdfCopyProvider = new PdfCopy(document, outputStream))
{
document.Open();
var importedPage = pdfCopyProvider.GetImportedPage(reader, 1);
pdfCopyProvider.AddPage(importedPage);
document.Close();
reader.Close();
_underlyingBytes = outputStream.ToArray();
return this;
}
}
}
}
}
这很好用,如果打算将第一页写入磁盘,则 MemoryStream 可以很容易地替换为 FileStream。
希望这对以后的人有所帮助。