如果您不想預先計算的一切大小要事先確定您將擁有多少頁面,一種選擇是以兩遍進行渲染,就像您在問題中提到的一樣。將第一階段渲染到temp.pdf併爲頁碼計數器留出空間。
如果通過源工作內容是存儲器或性能負擔,第二遍可以去final.pdf,使用temp.pdf作爲輸入。循環瀏覽temp.pdf的所有頁面,使用CGPDFDocumentGetNumberOfPages
獲取您的頁面數量。從臨時繪製每頁。pdf via CGContextDrawPDFPage
,然後繪製頁面計數器。
完成後,刪除temp.pdf作爲清理,並且您已完成設置。
更新:沿着這個未經測試的代碼行的東西,一些以前的工作總結:
...
CGPDFDocumentRef tempDocRef = CGPDFDocumentCreateWithURL((CFURLRef)tempPdfUrl);
size_t pageCount = CGPDFDocumentGetNumberOfPages(docRef);
CGContextRef finalPdfContext = CGPDFContextCreateWithURL((CFURLRef)finalPdfUrl, &defaultPageRect, nil);
for (int pageNum = 1; pageNum <= pageCount; pageNum++) {
CGPDFPageRef tempPageRef = CGPDFDocumentGetPage(tempDocRef, pageNum+1);
CGPDFContextBeginPage(finalPdfContext, nil);
CGContextDrawPDFPage(finalPdfContext, tempPageRef);
// do your page number rendering here, using pageNum and pageCount
...
CGPDFContextEndPage(finalPdfContext);
CGPDFPageRelease(tempPageRef);
}
CGPDFDocumentRelease(tempDocRef);
CGContextRelease(finalPdfContext);
...
我目前面臨着類似的問題。如果你找到了解決辦法,或任何有任何建議的人,請發帖! – Chris