gpt4 book ai didi

iTextSharp - 如果只有一页,则不显示页码

转载 作者:行者123 更新时间:2023-12-02 22:03:28 26 4
gpt4 key购买 nike

我有一个使用 iTextSharp 生成的 PDF,它在页脚中显示“Page 1/4”等内容。这一切工作正常,并使用 PdfTemplate 实现在 OnEndPage() 中设置方法与在 OnCloseDocument() 中添加的总页数方法。

如果文档中只有一页,我想做的是删除它。我在我的 OnCloseDocument() 中试过这个方法,但实际上并没有删除模板:

        public override void OnCloseDocument(PdfWriter writer, Document document)
{
base.OnCloseDocument(writer, document);

if (writer.PageNumber >= 3)
{
template.BeginText();
template.SetFontAndSize(f_cn, CocService.footerFont.Size);
template.SetTextMatrix(0, 0);
template.ShowText("" + (writer.PageNumber - 1));
template.EndText();
}
else
{
template.Reset();
}
}

仅供引用,这里是OnEndPage()的相关代码方法:

        public override void OnEndPage(PdfWriter writer, Document document)
{
base.OnEndPage(writer, document);

int pageN = writer.PageNumber;
String text = "Page " + pageN.ToString() + "/";

float len = f_cn.GetWidthPoint(text, CocService.footerFont.Size);
iTextSharp.text.Rectangle pageSize = document.PageSize;
cb.SetRGBColorFill(100, 100, 100);
cb.BeginText();
cb.SetFontAndSize(f_cn, CocService.footerFont.Size);
cb.SetTextMatrix(document.LeftMargin+520, pageSize.GetBottom(document.BottomMargin)+33);
cb.ShowText(text);
cb.EndText();
cb.AddTemplate(template, document.LeftMargin + 520 + len, pageSize.GetBottom(document.BottomMargin)+33);
}

最佳答案

我最终采用的解决方案是添加一个单独的 PdfTemplate对象到每一页,然后在 OnCloseDocument() 中设置所有页码(或完全忽略它们)方法。我认为这也很优雅。这是基本代码:

    // Inner class for dealing with the page numbering
class CocPdfEventHelper : PdfPageEventHelper
{
List<PdfTemplate> pageNumberTemplates = new List<PdfTemplate>();

public override void OnEndPage(PdfWriter writer, Document document)
{
base.OnEndPage(writer, document);

// Add a unique (empty) template for each page here
PdfTemplate t = writer.DirectContent.CreateTemplate(180, 50);
pageNumberTemplates.Add(t);
writer.DirectContent.AddTemplate(t, document.LeftMargin + 520, document.PageSize.GetBottom(document.BottomMargin) + 33);
}

public override void OnCloseDocument(PdfWriter writer, Document document)
{
base.OnCloseDocument(writer, document);

// Only bother if there is more than 1 page
if (writer.PageNumber >= 3)
{
int count = 1;
foreach (PdfTemplate template in pageNumberTemplates)
{
template.BeginText();
template.SetFontAndSize(f_cn, CocService.footerFont.Size);
template.SetRGBColorFill(100, 100, 100);
template.SetTextMatrix(0,0);
template.ShowText("Page " + count + " of " + (writer.PageNumber - 1));
template.EndText();
count++;
}
}
}
}

关于iTextSharp - 如果只有一页,则不显示页码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com