RepairQDFFile

除錯、文件修復

描述

修復人工編輯改動串流長度或物件位元組位置後的 QDF PDF

修復程序掃描物件邊界、不信任過期的交叉參照偏移,重新計算串流長度、更新間接長度物件,並重建空閒清單、交叉參照表、trailer、startxref 與 /Size

當物件帶有明確無歧義的 QDF 串流標記時,包含 endstream 和 endobj 行的串流資料會被保留。無效的 QDF 輸入以及同一物件的重複標記會在開啟目標檔案之前遭到拒絕,即使在就地修復期間也能保留既有的輸出檔案

語法

Delphi

Function TPDFlib.RepairQDFFile(Const InputFileName, OutputFileName: WideString): Integer;

DLL

int DLRepairQDFFile(int InstanceID, const wchar_t* InputFileName, const wchar_t* OutputFileName);

ActiveX

Function PDFlib::RepairQDFFile(InputFileName As String, OutputFileName As String) As Long

參數

InputFileNameThe edited QDF PDF
OutputFileName修復後 PDF 的路徑,可與輸入路徑相同

傳回值

1編輯過的 QDF 已修復
0輸入不是可修復的 QDF,或無法寫出目的地

錯誤

LastErrorCode 401 表示輸入讀取失敗,107 表示 QDF 結構無效、具歧義或其他修復失敗,305 則表示輸出寫入失敗

備註

完整來源會先在記憶體中修復,再寫入目的目錄下以獨佔方式建立的暫存檔。在同磁碟區替換發布結果之前,會先 flush 並關閉該檔案。寫入、flush 或替換失敗時,既有目的檔案的位元組會保持原樣,並傳回錯誤 305;輸入讀取失敗則傳回 401

目的目錄必須允許建立暫存檔並執行替換。以唯讀方式或未允許刪除共用的方式開啟的 Windows 目標檔案無法被替換。在任何修復資料寫入之前,既有目標的 DACL 權限會先複製到暫存檔;權限無法存取、目標缺少明確的 DACL,或目標經 EFS 加密時,都會產生錯誤 305。替換成功會建立新的檔案身分,且不保留替代資料流或一般檔案屬性。在正常的成功或失敗結束後,暫存檔都會被移除;程序突然終止時可能留下暫存檔。此 API 不保證在斷電或其他寫入者同時變更的情況下仍能存活