2014-02-18 42 views
0

我認爲Document.Add()立即將內容刷新到PDF文件(文件流),但看起來情況並非如此。什麼時候通過itextsharp將內容刷新到PDF文件?

+0

如果您只是將一個段落添加到文檔中,則將其添加到某個頁面。只有當頁面完成並且文檔開始下一頁時,纔有理由希望頁面(至少部分)寫入磁盤。但在關閉文檔之前,您無法確定。 – mkl

+0

我很好奇你爲什麼想要知道這個以及你如何處理這些信息。這不是一個祕密,我只是好奇。 –

+0

@Chris,我正在寫一個100K以上的記錄到pdf,這需要時間,所以我認爲只有在1K的批處理文件中刷新內容才能優化PDF文件的創建時間。 – Sameer

回答

0

PDF是頁面描述語言。每一頁都是一組獨立的對象。內容存儲在一個或多個流中。 PDF中不存在段落或表格等。這只是在頁面上繪製的一系列線條,形狀和字形。

使用Add()方法將內容添加到文檔時,此內容將轉換爲附加到頁面內容流的PDF語法。只要頁面已滿,該內容流和相應的頁面字典就會寫入輸出流並刷新。

不早於!

幾個對象,例如字體,交叉引用表,表單XObjects等都保存在內存中,因爲它們可以在文檔創建過程中更改。

在某些情況下,您可以儘早釋放這些對象。例如:有一個「發佈模板」方法來立即將Form XObject寫入輸出流。 Image XObjects總是立即寫入。

你的問題不是一個真正的問題。這是一個錯誤的假設。請澄清,如果你有一個真正的問題。

+0

我有興趣知道什麼時候將pdf對象的內容刷新到文件中,並且可以在itextsharp中控制它(例如,只有在n個頁面之後將內容刷新到文件,而不是在每個頁面已滿後刷新內容。Doesn'這是有道理的嗎?我是新來的pdf語言 – Sameer

+0

一旦它完成,等待刷新頁面內容流沒有意義,所以它不可能被置於「擱置」狀態。例如:當我們嵌入字體的一個子集時,我們會將該字體保留在內存中,因爲「將來」頁面可能需要爲該子集添加一個字形,該字形在上一頁未使用過。你的問題是有道理的,但措辭很尷尬(因爲它提出了一個未被證明的指控)。 –

相關問題