1

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

1)制作页面横向:查看其他示例,他们将属性添加到文档对象。但我正在做这个instream。那么我将如何添加此属性?

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();
        }
    }

}
4

1 回答 1

1

我真的不知道你如何处理它 C# 但逻辑流程将是这样的:
使用PdfDictionary将阅读器中的内容旋转到 90 度。假设你的 pdf 包含多个页面, PdfReader reader = new PdfReader(path);
for (int pgCnt=1; pgCnt <= reader.getNumberOfPages(); pgCnt++) {
//实现旋转和添加页码的逻辑
}

获取当前旋转(假设您使用的是纵向模式并尝试在横向模式下转换)使用
int rttnPg = reader.getPageRotation(pgCnt);
还获取该页面的
PdfDictionary pgDctnry=reader.getPageN(i); (我将该变量命名为 pgDctnry)
现在将其旋转 90 度使用
pgDctnry.put(PdfName.ROTATE, new PdfNumber(rttnPg+90));
现在使用 PdfStamper 进行
绑定
rctPgSz = rdrPgr.getPageSizeWithRotation(pgCnt);
pgCntntBt.beginText();
bfUsed=//用于显示文本的基本字体。同时设置字体大小
pgCntntBt.setFontAndSize(bfUsed,8.2f); txtPg=String.format(pgTxt+" %d/%d",pgCnt,totPgCnt);
pgCntntBt.showTextAligned(2,txtPg,//放置宽度,//放置高度,//旋转);
pgCntntBt.endText();

其实我不明白你的意思:“我需要将项目放入网格中,以便每页有 x 行。页脚处有页码”。现在关闭压模以将其刷新到输出流中。

于 2013-01-31T08:30:58.450 回答