簡體   English   中英

使用 Aspose.Pdf 使用 FileStream 創建新文檔

[英]Creating a new Document with a FileStream with Aspose.Pdf

我正在嘗試使用 FileStream 創建一個新的 Aspose.Pdf.Document 到一個新文件,但它總是拋出一個“不正確的文件頭”異常。 我需要使用 FileStream,以便在合並其他 Pdf 文檔時增量保存文檔,而無需將所有流保留在 scope 中。

根據文檔,以下是使用 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 文件初始化文檔 object。 文件或 Stream 應該是有效的 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(); 方法(沒有任何構造函數)來實現增量保存。

我們相信您在 Aspose.PDF 官方支持論壇上也發布了類似的詢問,我們也在那里回復了您。 如果您需要更多信息,您可以在那里跟進並進行討論。

這是 Asad Ali,我在 Aspose 擔任開發人員布道師。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM