2

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

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

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

4

1 回答 1

2

首先,您需要在顶部创建具有足够空间以允许添加标题的文档。以下设置适用于页眉约为页面 1/5 的普通 A4 文档。请记住,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;
}
于 2012-11-15T12:46:51.733 回答