各位前輩好
目前要寫出一個PDF產出時,在頁尾可以顯示「第O頁,共O頁」,
現在有個問題,我目前的程式會變成如果假設我有第1~第10頁,只會顯示第1頁、第2頁…至第9頁,最後一頁才會變成「第10頁,共10頁」
程式如下,請問我哪裡寫錯了??或者沒寫好??如果資訊上有不足,再麻煩跟我說,我再補充,謝謝
public override void OnEndPage(PdfWriter writer, Document document)
{
base.OnEndPage(writer, document);
string chFontPath = XXXXX;
bf = XXXXXX;
cb = writer.DirectContent;
template = cb.CreateTemplate(50, 50);
int pageN = writer.PageNumber;
String text = "第" + pageN + "頁";
float len = bf.GetWidthPoint(text, 8);
Rectangle pageSize = document.PageSize;
cb.SetRGBColorFill(100, 100, 100);
cb.BeginText();
cb.SetFontAndSize(bf, 8);
cb.SetTextMatrix(pageSize.GetLeft(280), pageSize.GetBottom(30)); //第x頁位置
cb.ShowText(text);
cb.EndText();
cb.AddTemplate(template, pageSize.GetLeft(280) + len, pageSize.GetBottom(30)); //共x頁位置
//OnCloseDocument(writer, document); //test
}
public override void OnCloseDocument(PdfWriter writer, Document document)
{
string chFontPath = XXXXX;
bf = XXXXXXX;
template.BeginText();
template.SetFontAndSize(bf, 8);
template.SetTextMatrix(0, 0);
template.ShowText(",共 " + writer.PageNumber + " 頁");
template.EndText();
base.OnCloseDocument(writer, document);
}
OnEndPage 和 OnCloseDocument 是否宜合併成一個函數?
程式一開頭,先計算好總頁數,然後當作參數傳進去。
SetFooter(PdfWriter writer, Document document,All_pages){
int pageN = writer.PageNumber;
String text = "第" + pageN + "頁,共 " + All_pages + " 頁"";
}
OnEndPage 是每一頁的結尾
OnCloseDocument 是整份文件的結束
String text = "第" + pageN + "頁"; 寫在 OnEndPage
自然在「每一頁的結尾」都會出現「第 x 頁」
template.ShowText(",共 " + writer.PageNumber + " 頁"); 寫在 OnCloseDocument
才會在「最後一頁」多了個「,共 10 頁」
這都是小問題
最大的問題是 PdfWriter 只有 PageNumber(頁碼) 這個值
不像 PdfReader 有 NumberOfPages(總頁數) 可以用
原因是:在寫 pdf 的過程時,不會知道最後會寫幾頁
總之
要做出 Page 1 of 10 的效果
不是目前這樣就可以做到的
謝謝你....這樣看來....我不就要PdfWriter後再做PdfReader?
可以自建一個新的class, 繼承PdfWriter後, 再在你自己的class加入你要的屬性。
謝謝你....這樣看來....我不就要PdfWriter後再做PdfReader?
有兩種做法,其中一種是
「先寫一次檔案以取得總頁數,第二次再寫真正要的檔案」
以下是網友提供兩種做法