使用itext在流中添加页码并创建横向A4

时间:2012-05-02 16:00:01

标签: itextsharp itext

我有以下代码在流中生成pdf。这很好但我现在有以下要求。

1)制作页面格局:查看其他示例,他们将属性添加到文档对象。但我正在做这个内流。那我该如何添加这个属性呢?

2)添加页码。我需要将项目放入网格中,以便每页有x行数。在页脚的页脚处有一个页码。如何用Itext sharp实现这种功能。

public static void Create(ICollection<Part> parts, string path)
{
    PdfReader reader = new PdfReader(path);

    var pageWidth = 500;
    byte[] bytes;
    using (MemoryStream ms = new MemoryStream())
    {
        using (PdfStamper stamper = new PdfStamper(reader, ms))
        {
            PdfContentByte cb = stamper.GetOverContent(1);

                  //Flush the PdfStamper's buffer
            stamper.Close();
            //Get the raw bytes of the PDF
            bytes = ms.ToArray();
            var now = String.Format("{0:d-M-yyyy}", DateTime.Now);
            var pdfName = string.Format("{0}_factory_worksheet", now).Replace("%", "").Replace(" ", "_");

            var context = HttpContext.Current;
            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("content-disposition", "attachment;filename=" + pdfName);
            context.Response.Buffer = true;
            context.Response.Clear();
            context.Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
            context.Response.OutputStream.Flush();
            context.Response.End();
        }
    }

}

1 个答案:

答案 0 :(得分:1)

我真的不知道你如何处理它C#但逻辑流程将是这样的:
使用 PdfDictionary 将阅读器中的内容旋转到90度。假设您的pdf包含多个页面, PdfReader reader = new PdfReader(path);
for(int pgCnt = 1; pgCnt&lt; = reader.getNumberOfPages(); pgCnt ++){
           //实现轮换的逻辑&amp;添加页码
}
要获得当前旋转(假设您正在使用纵向模式并尝试在横向模式下转换它),请使用
int rttnPg = reader.getPageRotation(pgCnt);
该页面的PdfDictionary
pgDctnry = reader.getPageN(i); (我将该变量命名为pgDctnry)
现在旋转90度使用
pgDctnry.put(PdfName.ROTATE,new PdfNumber(rttnPg + 90));
现在使用PdfStamper绑定它,就像你现在正在做的那样。现在要添加页码了解当前页面的内容(这里我命名为pgCntntBt) pgCntntBt =压模.getOverContent(pgCnt);
rctPgSz = rdrPgr.getPageSizeWithRotation(pgCnt);
pgCntntBt.beginText();
bfUsed = // Base用于显示文本的字体。也设置字体大小
pgCntntBt.setFontAndSize(bfUsed,8.2f); txtPg = String.format(pgTxt +“%d /%d”,pgCnt,totPgCnt);
pgCntntBt.showTextAligned(2,txtPg,// Put Width,// Put Height,// Rotation);

pgCntntBt.endText();
实际上我不明白这是什么意思:“我需要将项目放入网格中,以便每页有x行。页面页脚有一个页码” 。现在关闭压模以在输出流中冲洗它。