它看起来很简单,但我无法在API中找到类似getPageCount()的东西。我可以得到它返回当前页面,但不是总页数。也许我错过了它?PDFsharp:有没有办法在页面的标题中生成“Y的页面X”?
我想以某种方式能够在每页顶部打印“第1页,共9页”,其中'1'当然是当前页码。
它看起来很简单,但我无法在API中找到类似getPageCount()的东西。我可以得到它返回当前页面,但不是总页数。也许我错过了它?PDFsharp:有没有办法在页面的标题中生成“Y的页面X”?
我想以某种方式能够在每页顶部打印“第1页,共9页”,其中'1'当然是当前页码。
使用PDFsharp取决于您。
我推测你正在使用MigraDoc:使用MigraDoc你可以添加一个页眉。为当前页码添加paragraph.AddPageField()
,为总页数添加paragraph.AddNumPagesField()
。从样品
代码段:
// Create a paragraph with centered page number. See definition of style "Footer".
Paragraph paragraph = new Paragraph();
paragraph.AddTab();
paragraph.AddPageField();
// Add paragraph to footer for odd pages.
section.Footers.Primary.Add(paragraph);
// Add clone of paragraph to footer for odd pages. Cloning is necessary because an object must
// not belong to more than one other object. If you forget cloning an exception is thrown.
section.Footers.EvenPage.Add(paragraph.Clone());
代码段,用于设置制表位(假设DIN A 4与身体具有16厘米):
style = document.Styles[StyleNames.Footer];
style.ParagraphFormat.AddTabStop("8cm", TabAlignment.Center);
这两个摘录都来自链接的网站。示例代码也可以下载。
此页面显示的示例不适用。我的意思是页码不会改变。 –
@Marek Bar:AddNumPagesField添加文档中的页面数量(并且不会在页面之间更改),AddPageField添加当前页面编号并随页面而改变。 –
@PDFsharpTeam ...如果我想只显示页码,如果PDF超过一页长...我应该怎么做?现在,我的PDF显示“Pag:1”,即使我总共有一页。 – Romias
请确保在您的班级中包含using MigraDoc.DocumentObjectModel;
声明。
Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = new Paragraph();
paragraph.AddText("Page ");
paragraph.AddPageField();
paragraph.AddText(" of ");
paragraph.AddNumPagesField();
section.Headers.Primary.Add(paragraph);
这对我来说完美无瑕。 – ddz
我知道这个问题很老,并且有一个可接受的答案,但是当搜索PDFsharp解决方案时,第一个问题就出现了。
为了记录,在PDFsharp中实现这一点很容易。在PdfSharp.Pdf
命名空间下的PdfDocument
类包含一组页面(PdfDocument.Pages
)。您只需遍历集合并在每个页面的某处添加页面计数器,即可使用XGraphics
对象,您可以使用XGraphics.FromPdfPage(PdfPage)
实例化对象。
using PdfSharp.Pdf; // PdfDocument, PdfPage
using PdfSharp.Drawing; // XGraphics, XFont, XBrush, XRect
// XStringFormats
// Create a new PdfDocument.
PdfDocument document = new PdfDocument();
// Add five pages to the document.
for(int i = 0; i < 5; ++i)
document.AddPage();
// Make a font and a brush to draw the page counter.
XFont font = new XFont("Verdana", 8);
XBrush brush = XBrushes.Black;
// Add the page counter.
string noPages = document.Pages.Count.ToString();
for(int i = 0; i < document.Pages.Count; ++i)
{
PdfPage page = document.Pages[i];
// Make a layout rectangle.
XRect layoutRectangle = new XRect(0/*X*/, page.Height-font.Height/*Y*/, page.Width/*Width*/, font.Height/*Height*/);
using (XGraphics gfx = XGraphics.FromPdfPage(page))
{
gfx.DrawString(
"Page " + (i+1).ToString() + " of " + noPages,
font,
brush,
layoutRectangle,
XStringFormats.Center);
}
}
值得一提的是,如果一个XGraphics对象已经存在某个网页,创建一个新的之前,旧的需要进行配置。这会失败:
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx1 = XGraphics.FromPage(page);
XGraphics gfx2 = XGraphics.FromPage(page);
请问您能展示一些代码吗? – sarseyn