gpt4 book ai didi

itextsharp - Y 期的 X 页

转载 作者:行者123 更新时间:2023-12-03 23:28:46 25 4
gpt4 key购买 nike

我尝试了 3 种不同的显示页码的方式,OnCloseDocument内容未显示在页面中,它们都不起作用。

我的意图正在显示 页码像这样

10 个中的 1 个
2 0f 10
………………
………………
10 中的 10
每页


我知道如何显示

1
2
3
4
....
10


但是 不知道如何显示总页数

我正在使用 OnCloseDocument 显示页数计数,但 里面的内容是
不显示。

public class MyPdfPageEventHelpPageNo : iTextSharp.text.pdf.PdfPageEventHelper
{
protected PdfTemplate total;
protected BaseFont helv;
private bool settingFont = false;

public override void OnOpenDocument(PdfWriter writer, Document document)
{
template= writer.DirectContent.CreateTemplate(100, 100);

bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
}
public override void OnCloseDocument(PdfWriter writer, Document document)
{
//See below
}

第一种方式:
    public override void OnCloseDocument(PdfWriter writer, Document document)     
{
//I create a table with one column like below.
PdfPTable pageNumber2 = new PdfPTable(1);
pageNumber2.TotalWidth = 50;
pageNumber2.HorizontalAlignment = Element.ALIGN_RIGHT;

pageNumber2.AddCell(BuildTable2RightCells("Page " + writer.PageNumber));
pageNumber.AddCell(BuildTable2LeftCells(writer.PageCount));
pageNumber2.WriteSelectedRows(0, -1, 500,
(document.PageSize.GetBottom(140)), cb);
}

第二种方式:
    public override void OnCloseDocument(PdfWriter writer, Document document)     
{
ColumnText.ShowTextAligned(template,Element.ALIGN_CENTER,new
Phrase(writer.PageNumber.ToString()), 500, 140, 0);
}

第三种方式:
    public override void OnCloseDocument(PdfWriter writer, Document document)     
{
template.BeginText();
template.SetFontAndSize(bf, 8);
template.SetTextMatrix(500, 140);
template.ShowText(Convert.ToString((writer.PageNumber - 1)));
template.EndText();
}

我做错了什么吗?

最佳答案

您的第二种方式可能是最简单的方式。下面是一个非常非常精简但有效的版本:

public class MyPdfPageEventHelpPageNo : iTextSharp.text.pdf.PdfPageEventHelper {
public override void OnEndPage(PdfWriter writer, Document document) {
ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_CENTER, new Phrase(writer.PageNumber.ToString()), 500, 140, 0);
}
}

并使用它:
//Create a file on our desktop
string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "OnCloseTest.pdf");
//Standard PDF creation, adjust as needed
using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (Document doc = new Document(PageSize.LETTER)) {
using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {

//Find our custom event handler
writer.PageEvent = new MyPdfPageEventHelpPageNo();

doc.Open();

//Add text the first page
doc.Add(new Paragraph("Test"));

//Add a new page with more text
doc.NewPage();
doc.Add(new Paragraph("Another Test"));

doc.Close();
}
}
}

编辑

抱歉,我以为您在事件的基本设置方面遇到了问题,这是我的错误。

我只见过两种方法来做你想做的事情,要么做两遍,要么使用 PdfTemplate syntax which renders an image as far as I know .

我建议只运行两次通过,第一次只是为了创建您的 PDF,第二次是添加您的页码。你可以运行你的第一遍到 MemoryStream所以如果你愿意,你不必两次击中磁盘。
PdfReader reader = new PdfReader(outputFile);
using (FileStream fs = new FileStream(secondFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (PdfStamper stamper = new PdfStamper(reader, fs)) {
int PageCount = reader.NumberOfPages;
for (int i = 1; i <= PageCount; i++) {
ColumnText.ShowTextAligned(stamper.GetOverContent(i), Element.ALIGN_CENTER, new Phrase(String.Format("Page {0} of {1}", i, PageCount)), 500, 140, 0);
}
}
}

关于itextsharp - Y 期的 X 页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845367/

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