c# - 使用 Aspose.Pdf 使用 FileStream 创建新文档

标签 c# aspose.pdf

我试图使用 FileStream 创建一个新的 Aspose.Pdf.Document 到新文件,但它总是抛出“不正确的文件头”异常。我需要使用 FileStream,以便在合并其他 Pdf 文档时可以增量保存文档,而无需将所有流保留在范围内。

根据文档,以下是使用 FileStream 创建文档的代码(我将 FileMode.Open 更改为 FileMode.OpenOrCreate 因为我没有现有的 Pdf 文件并且想从空白文档开始)。

await using var fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
var document = new Document(fileStream);

除非 FileStream 指向现有的有效 Pdf 文件,否则此代码将引发“不正确的文件头”异常。

下面的代码可以工作,但是创建和处理一个 Document 以便我们可以通过 FileStream 使用该 Document 有点愚蠢。

var fileName = Path.GetTempFileName();
var doc = new Document();
doc.Save(fileName);
doc.Dispose();

await using var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite);
var document = new Document(fileStream);

我必须遗漏一些非常明显的东西,因为这是一个非常简单的用例,并且在在线搜索时我没有看到任何相关内容。

最佳答案

您无法使用空 Stream 或无效的 PDF 文件初始化 Document 对象。文件或流应该是有效的 PDF 文档。为了使用增量保存方法,您可以使用新文件初始化 FileStream 并继续将 Document 保存到其中。例如,请检查以下示例代码片段:

using var fileStream = new FileStream(dataDir + "output.pdf", FileMode.OpenOrCreate, FileAccess.ReadWrite);
{
 var document = new Document();
 document.Pages.Add();
 document.Save(fileStream);
 document.Pages.Add();
 document.Save(fileStream);
}

请注意,在 PDF 生成的整个过程中,FileStream 需要保持打开状态。除此之外,您还可以使用 Document.Save();方法(不带任何构造函数)实现增量保存。

我们相信您还发布了 similar inquiry在 Aspose.PDF 官方支持论坛中,我们也在那里回复了您。如果您需要更多信息,请在那里跟进并继续讨论。

我是 Asad Ali,我是 Aspose 的开发人员传播者。

关于c# - 使用 Aspose.Pdf 使用 FileStream 创建新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70849211/

相关文章:

c# - .CSV 到 SQL CE 表?

java - Aspose Java PDF 添加签名字段

java - 在 Java 中使用 AsposePDF 进行文本换行

grails - Aspose:设置页面标题时看不到&符之后的文本

.net-core - Aspose PDF error : ‘Gdip’ threw an exception with Dotnet Core 3. x app on Mac OSX

c# - 如何从签名的 C# exe 中读取公钥

c# - 奇怪的系统.__佳能异常(exception)

c# - 遍历结构成员

c# - 我想了解 @Html.DisplayFor(modelItem => item.FirstName) 中的 lambda 表达式