ABCPDF计算标题大小和位置。

时间:2012-10-30 23:38:39

标签: c# asp.net abcpdf

问题是头文件,我必须将其包含在abcpdf生成的pdf文件的每一页上。

头文件包含多个图像文件和多行文本,具体情况因具体情况而异。

问题是我不知道如何计算标题的大小。我需要有它的大小来分配矩形位置,将每个页面上的其余html文件与标题一起放入。我正在使用C#。

1 个答案:

答案 0 :(得分:2)

首先,您需要在顶部创建具有足够空间的文档,以允许添加标题。以下设置适用于普通A4文档,标题约为页面的1/5。请记住PDF上的坐标是从右下角而不是左上角..

//Setting to create the document using ABCPdf 8
var theDoc = new Doc();
theDoc.MediaBox.String = "A4";

theDoc.HtmlOptions.PageCacheEnabled = false;
theDoc.HtmlOptions.ImageQuality = 101;
theDoc.Rect.Width = 719;
theDoc.Rect.Height = 590;
theDoc.Rect.Position(2, 70);
theDoc.HtmlOptions.Engine = EngineType.Gecko;

下面的代码在文档的每个页面上放置一个标题,标题图像然后是图像下面的彩色框,其中包含一些自定义文本。

此情况下的标题图像为1710 x 381,以保持图像的分辨率尽可能高,以防止打印时看起来模糊。

private static Doc AddHeader(Doc theDoc)
{
    int theCount = theDoc.PageCount;
    int i = 0;

    //Image header 
    for (i = 1; i <= theCount; i++)
    {
         theDoc.Rect.Width = 590;
         theDoc.Rect.Height = 140;
         theDoc.Rect.Position(0, 706);

         theDoc.PageNumber = i;
         string imagefilePath = HttpContext.Current.Server.MapPath("/images/pdf/pdf-header.png");

         Bitmap myBmp = (Bitmap)Bitmap.FromFile(imagefilePath);
         theDoc.AddImage(myBmp);
     }

     //Blue header box
     for (i = 2; i <= theCount; i++)
     {
         theDoc.Rect.String = "20 15 590 50";
         theDoc.Rect.Position(13, 672);
         System.Drawing.Color c = System.Drawing.ColorTranslator.FromHtml("#468DCB");
         theDoc.Color.Color = c;
         theDoc.PageNumber = i;
         theDoc.FillRect();
     }

     //Blue header text
     for (i = 2; i <= theCount; i++)
     {
         theDoc.Rect.String = "20 15 586 50";
         theDoc.Rect.Position(25, 660);
         System.Drawing.Color cText = System.Drawing.ColorTranslator.FromHtml("#ffffff");
         theDoc.Color.Color = cText;
         string theFont = "Century Gothic";
         theDoc.Font = theDoc.AddFont(theFont);
         theDoc.FontSize = 14;
         theDoc.PageNumber = i;
         theDoc.AddText("Your Text Here");
     }
     return theDoc;
}