ABCpdf - 为每个页面添加边距顶部并将页脚保持在一个块中
ABCpdf - Add margin-top to each page and keep the footer in a block
我已经开始将 abcpdf 用于 C# 应用程序。首先我得到 pdf,然后我得到一个屏幕截图以将其转换为 pdf(我这样做是因为我加载了一些图表)。我有 2 个问题:
1- 我可以在 html 的顶部添加边距,但问题是当我的 html 的大小比一页长时,所以..我有不止一页我不知道如何在每页的顶部和底部添加 x
页边距。
我发现有人在问类似的问题,但他没有得到答案。
2- 我的页脚也有问题,因为我必须始终在底部打印条款和条件,这取决于我 html 的大小,它打破了措辞障碍,但我没有想要那个。我必须始终将它打印在底部,并且只打印一个块而不是两个。
下面是我实现的代码。
public FileStreamResult HtmlToPdf(Uri pdfUrl, bool landscape, int screenResolutionWidth, bool enableCache)
{
var pdfStream = new MemoryStream();
using (var theDoc = new Doc())
{
if (landscape)
{
// apply a rotation transform
double w = theDoc.MediaBox.Width;
double h = theDoc.MediaBox.Height;
double l = theDoc.MediaBox.Left;
double b = theDoc.MediaBox.Bottom;
theDoc.Transform.Rotate(90, l, b);
theDoc.Transform.Translate(w, 0);
// rotate our rectangle
theDoc.Rect.Width = h;
theDoc.Rect.Height = w;
}
theDoc.HtmlOptions.Engine = EngineType.Gecko;
theDoc.HtmlOptions.PageCacheClear();
theDoc.HtmlOptions.PageCachePurge();
theDoc.HtmlOptions.UseScript = true;
theDoc.HtmlOptions.Timeout = 90000;
theDoc.HtmlOptions.AddLinks = false;
var url = Uri.UnescapeDataString(pdfUrl.ToString());
var pageRef = theDoc.AddImageUrl(url, true, screenResolutionWidth, true);
while (theDoc.Chainable(pageRef))
{
theDoc.Page = theDoc.AddPage();
pageRef = theDoc.AddImageToChain(pageRef);
}
for (var i = 1; i <= theDoc.PageCount; i++)
{
theDoc.PageNumber = i;
theDoc.Flatten();
}
theDoc.Save(pdfStream);
theDoc.Clear();
}
var byteInfo = pdfStream.ToArray();
pdfStream.Write(byteInfo, 0, byteInfo.Length);
pdfStream.Position = 0;
return new FileStreamResult(pdfStream, "application/pdf");
感谢您的宝贵时间。
我找到了一种在顶部和底部获得边距的方法,但这并不是我想要的。无论如何,它正在运行,所以请看下面。
Css:
@media print {
div.header {
top: 0;
}
Html:
<div class="header"></div>
并在里面设置你想要的边距。
希望对您有所帮助。
我能够在您提到的 post 中解决我的问题。
1:您可以将文档中使用的space的大小定义为doc.Rect
。这对以下所有页面均有效。您还可以在处理过程中为矩形设置新的大小。
2:为了添加条款和条件,我会在您的循环中调用 doc.AddImageDoc(template, 1, doc.Rect);
,然后再展平页面。只需确保事先调整 doc.Rect
的大小和位置即可。
除了@Tinelers 评论之外,您还可以设置以下值以在所有页面上固定页眉和页脚边距
insetX, insetY
doc.Rect.Inset(15, 15);
根据您的需要添加插图中的值。
我已经开始将 abcpdf 用于 C# 应用程序。首先我得到 pdf,然后我得到一个屏幕截图以将其转换为 pdf(我这样做是因为我加载了一些图表)。我有 2 个问题:
1- 我可以在 html 的顶部添加边距,但问题是当我的 html 的大小比一页长时,所以..我有不止一页我不知道如何在每页的顶部和底部添加 x
页边距。
我发现有人在问类似的问题,但他没有得到答案。
2- 我的页脚也有问题,因为我必须始终在底部打印条款和条件,这取决于我 html 的大小,它打破了措辞障碍,但我没有想要那个。我必须始终将它打印在底部,并且只打印一个块而不是两个。
下面是我实现的代码。
public FileStreamResult HtmlToPdf(Uri pdfUrl, bool landscape, int screenResolutionWidth, bool enableCache)
{
var pdfStream = new MemoryStream();
using (var theDoc = new Doc())
{
if (landscape)
{
// apply a rotation transform
double w = theDoc.MediaBox.Width;
double h = theDoc.MediaBox.Height;
double l = theDoc.MediaBox.Left;
double b = theDoc.MediaBox.Bottom;
theDoc.Transform.Rotate(90, l, b);
theDoc.Transform.Translate(w, 0);
// rotate our rectangle
theDoc.Rect.Width = h;
theDoc.Rect.Height = w;
}
theDoc.HtmlOptions.Engine = EngineType.Gecko;
theDoc.HtmlOptions.PageCacheClear();
theDoc.HtmlOptions.PageCachePurge();
theDoc.HtmlOptions.UseScript = true;
theDoc.HtmlOptions.Timeout = 90000;
theDoc.HtmlOptions.AddLinks = false;
var url = Uri.UnescapeDataString(pdfUrl.ToString());
var pageRef = theDoc.AddImageUrl(url, true, screenResolutionWidth, true);
while (theDoc.Chainable(pageRef))
{
theDoc.Page = theDoc.AddPage();
pageRef = theDoc.AddImageToChain(pageRef);
}
for (var i = 1; i <= theDoc.PageCount; i++)
{
theDoc.PageNumber = i;
theDoc.Flatten();
}
theDoc.Save(pdfStream);
theDoc.Clear();
}
var byteInfo = pdfStream.ToArray();
pdfStream.Write(byteInfo, 0, byteInfo.Length);
pdfStream.Position = 0;
return new FileStreamResult(pdfStream, "application/pdf");
感谢您的宝贵时间。
我找到了一种在顶部和底部获得边距的方法,但这并不是我想要的。无论如何,它正在运行,所以请看下面。
Css:
@media print {
div.header {
top: 0;
}
Html:
<div class="header"></div>
并在里面设置你想要的边距。
希望对您有所帮助。
我能够在您提到的 post 中解决我的问题。
1:您可以将文档中使用的space的大小定义为doc.Rect
。这对以下所有页面均有效。您还可以在处理过程中为矩形设置新的大小。
2:为了添加条款和条件,我会在您的循环中调用 doc.AddImageDoc(template, 1, doc.Rect);
,然后再展平页面。只需确保事先调整 doc.Rect
的大小和位置即可。
除了@Tinelers 评论之外,您还可以设置以下值以在所有页面上固定页眉和页脚边距
insetX, insetY
doc.Rect.Inset(15, 15);
根据您的需要添加插图中的值。