- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是第一次使用 MigraDoc 库,需要帮助。我正在使用 MigraDoc
打印 pdf 表格。在我的表中,3 行组成一个组。所以每 3 行组必须在同一页上,但在我当前的代码中,这不会发生。
它将在同一页上打印第 1 行或第 2 行,如果页面结束,则第 3 行进入下一页。
public void CreateDocument()
{
this.document = new Document { Info = { Title = "Time Sheet Report By Job", } };
this.DefineStyles();
this.CreatePage();
this.FillContent();
}
public void FillContent()
{
int x = 1;
foreach (XElement r in this.xReport.Element(ElrepTable).Elements(ElrepRow))
{
Row row1 = this.table.AddRow();
int i = 0;
row1.Cells[0].Borders.Visible = false;
foreach (XElement c in r.Elements(ElrepCell))
{
row1.Cells[i++].AddParagraph(c.Value);
}
if (x++ % 3 != 0)
{
continue;
}
row1.Borders.Bottom.Width = 1;
row1.Cells[0].Borders.Bottom.Visible = true;
row1.Cells[0].Borders.Bottom.Width = 1;
}
int colCount = this.GetColCount();
int rowCount = this.GetRowCount();
this.table.SetEdge(1, 1, colCount - 1, rowCount - 1, Edge.Box, BorderStyle.Single, 0.05);
}
private void CreatePage()
{
Section section = this.document.AddSection();
section.PageSetup.LeftMargin = "1cm";
section.PageSetup.RightMargin = "1cm";
section.PageSetup.BottomMargin = "2cm";
section.PageSetup.TopMargin = "4.5cm";
// Put a logo in the header
string imgPath = this.SaveImg(Resource1.MMS_Logo, "logo");
Image image = section.Headers.Primary.AddImage(imgPath);
image.Height = "2cm";
image.LockAspectRatio = true;
image.RelativeVertical = RelativeVertical.Line;
image.RelativeHorizontal = RelativeHorizontal.Margin;
image.Top = ShapePosition.Top;
image.Left = ShapePosition.Center;
image.WrapFormat.Style = WrapStyle.Through;
imgPath = this.SaveImg(Resource1.shadow, "shadow");
Image image2 = section.Headers.Primary.AddImage(imgPath); // .Headers.Primary
image2.Height = "1.5cm";
image2.Width = "5cm";
image2.RelativeVertical = RelativeVertical.Line;
image2.RelativeHorizontal = RelativeHorizontal.Margin;
image2.Top = ShapePosition.Top;
image2.Left = ShapePosition.Right;
image2.WrapFormat.Style = WrapStyle.Through;
this.leftTextFrame = section.Headers.Primary.AddTextFrame();
this.leftTextFrame.Height = "10.0cm";
this.leftTextFrame.Width = "7.0cm";
this.leftTextFrame.RelativeHorizontal = RelativeHorizontal.Margin;
this.leftTextFrame.RelativeVertical = RelativeVertical.Page;
this.leftTextFrame.Left = ShapePosition.Left;
this.leftTextFrame.Top = "1.75cm";
this.centerTextFrame = section.Headers.Primary.AddTextFrame();
this.centerTextFrame.Height = "5.0cm";
this.centerTextFrame.Width = "6.0cm";
this.centerTextFrame.RelativeHorizontal = RelativeHorizontal.Margin;
this.centerTextFrame.RelativeVertical = RelativeVertical.Page;
this.centerTextFrame.Left = ShapePosition.Center;
this.centerTextFrame.Top = "3.5cm";
this.rightTextFrame = section.Headers.Primary.AddTextFrame();
this.rightTextFrame.Height = "3.0cm";
this.rightTextFrame.Width = "5.0cm";
this.rightTextFrame.RelativeHorizontal = RelativeHorizontal.Margin;
this.rightTextFrame.RelativeVertical = RelativeVertical.Page;
this.rightTextFrame.Left = ShapePosition.Right;
this.rightTextFrame.Top = "1.75cm";
Dictionary<string, string> jobdet = this.GetJobDetails();
// Put sender in address frame
Paragraph p1 = this.leftTextFrame.AddParagraph();
var f = new Font { Bold = true, Size = 8 };
p1.AddFormattedText(this.GetTitle(), f);
p1.AddLineBreak();
p1.AddLineBreak();
p1.AddFormattedText("Account Information", new Font { Bold = true, Italic = true, Size = 7 });
p1.AddLineBreak();
Paragraph p2 = this.leftTextFrame.AddParagraph();
p2.Format.LeftIndent = "2cm";
p2.AddFormattedText("Job #:", new Font { Bold = true, Size = 6 });
p2.AddTab();
p1.AddTab();
p2.AddFormattedText(this.GetJobNo(), new Font { Size = 6 });
p2.AddLineBreak();
p2.AddFormattedText("Job Name:", new Font { Bold = true, Size = 6 });
p2.AddTab();
p2.AddFormattedText(jobdet["Name"], new Font { Size = 6 });
p2.AddLineBreak();
p2.AddFormattedText("Address:", new Font { Bold = true, Size = 6 });
p2.AddTab();
p2.AddFormattedText(jobdet["Address"], new Font { Size = 6 });
p2.AddLineBreak();
Paragraph cp1 = this.centerTextFrame.AddParagraph();
cp1.AddFormattedText("Supervisor:", new Font { Bold = true, Size = 6 });
cp1.AddTab();
cp1.AddFormattedText(jobdet["Supervisor"], new Font { Size = 6 });
cp1.AddLineBreak();
cp1.AddLineBreak();
cp1.AddFormattedText("Location:", new Font { Bold = true, Size = 6 });
cp1.AddTab();
cp1.AddTab();
cp1.AddFormattedText(jobdet["Location"], new Font { Size = 6 });
Paragraph rp1 = this.rightTextFrame.AddParagraph();
rp1.Format.Alignment = ParagraphAlignment.Center;
rp1.AddFormattedText("Timesheet by Job", new Font { Bold = true, Size = 9 });
rp1.AddLineBreak();
rp1.AddFormattedText("Pay Period End " + this.GetEdate(), new Font { Bold = true, Size = 8 });
rp1.AddLineBreak();
rp1.AddLineBreak();
rp1.AddFormattedText(this.GetOnDate(), new Font { Size = 6 });
rp1.AddTab();
FormattedText ft = rp1.AddFormattedText("Page ", new Font { Bold = true, Size = 7 });
ft.AddPageField();
ft.Font.Size = 7;
ft.Font.Bold = true;
ft = rp1.AddFormattedText(" of ", new Font { Bold = true, Size = 7 });
ft.AddNumPagesField();
ft.Font.Size = 7;
ft.Font.Bold = true;
section.AddParagraph();
cp1.AddLineBreak();
cp1.AddLineBreak();
this.table = section.AddTable();
this.table.Style = "Table";
this.table.Borders.Color = Color.Parse("Black");
this.table.Rows.LeftIndent = 0;
int cols = this.GetColCount();
Column column = this.table.AddColumn("4cm");
column.Format.Alignment = ParagraphAlignment.Left;
column = this.table.AddColumn("0.6cm");
column.Format.Alignment = ParagraphAlignment.Left;
for (int i = 2; i < cols; i++)
{
column = this.table.AddColumn("0.85cm");
column.Format.Alignment = ParagraphAlignment.Left;
}
// Create the header of the table
Row row = this.table.AddRow();
row.HeadingFormat = true;
row.Format.Alignment = ParagraphAlignment.Center;
row.Format.Font.Bold = true;
row.Cells[0].Borders.Top.Visible = false;
row.Cells[0].Borders.Left.Visible = false;
row.Cells[0].Borders.Right.Visible = false;
row.Cells[1].Borders.Top.Visible = false;
row.Cells[1].Borders.Left.Visible = false;
string[] colNames = this.GetColNames();
for (int i = 0; i < cols; i++)
{
row.Cells[i].AddParagraph(colNames[i]);
row.Cells[i].Format.Font.Bold = false;
row.Cells[i].Format.Alignment = ParagraphAlignment.Left;
row.Cells[i].VerticalAlignment = VerticalAlignment.Center;
row.Cells[i].Borders.Width = 1.5;
}
}
我不知道 MigraDoc 是否有某些功能可以直接执行此类操作。否则我想知道页面是否会在 3 行之间中断,如果是,我将不得不自己进行分页。
任何伪代码片段都会很有帮助。
最佳答案
对于每组的第一行,设置 row1.KeepWith = 2
以将三行放在一个组中。
关于c# - 在 Migradoc 中添加最后 3 行之前检查是否接近页尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18642284/
有没有办法不在每个页面上重复 Migradoc header ? 在我的程序中,我将图像添加到文档的标题中,如下所示: Section section = document.AddSectio
如何减少 MigraDoc 文档的上边距? 我在文档的右上角添加了一个图像,但是文档顶部和图像之间的空间太大。 这是我设置图像的方法: Section section = document.AddSe
我可以使用 MigraDoc 轻松地将图像添加到 PDF 文件的某个部分。但是,图像被页面宽度切成两半。 有没有办法强制图片调整大小,使其完全适合一页?还是必须手动完成? 如果必须手动完成,有人知道
我正在使用 MigraDoc 创建一个报告,该报告可以有 4 个表,2 行和 2 个表。 我尝试了许多不同的方法来实现这一点。 1- 我尝试在 table 上创建一个 leftIndent。 tabl
我正在尝试将图像放置为每个页面的页脚,我可以使用以下方法将页脚移近页面底部: doc.DefaultPageSetup.FooterDistance = "0cm" 但是我似乎无法找到一种方法来允许与
我想要一种在 MigraDoc 中设置相对列宽的方法,我找到了 this post就此主题而言。问题是,它对我不起作用。我从那篇文章中复制了确切的代码: Section section = docum
如何在渲染之前获取页数?我需要在我的文档中将数字写成单词。 最佳答案 对于页码作为数字: 您不必获取编号,您可以在文档中添加占位符(称为字段),并且 MigraDoc 将在呈现文档时自动插入页码。 见
我正在使用 MigraDoc 创建 PDF。根据我的要求,我必须根据页面\部分的内容添加不同的标题。我可以通过添加新部分并为每个部分定义新标题来实现它。到这里为止,一切正常。 在页脚中,我使用“Add
我有一个文本数据表,我想将某些数据缩进几个空格,但是我尝试的所有操作似乎都会导致我的字符串被自动修剪,并且前面的空格被删除。现在的 PDF 看起来像这样: http://i.imgur.com/KBK
我的任务是重构一个旧的 MigraDoc 项目,该项目由不再在我公司工作的开发人员编写,并且在使用以下代码时遇到问题.. var Split = new String[1]; Split[0] = "
我想知道是否有办法避免某些段落之间换行。例如: Paragraph PjourneyTitle = sec.AddParagraph(journeyTitle, "Heading2"); Paragr
我想在我的所有页面上添加水印并将其居中。这对于至少仅通过一组纵向页面“吸引眼球”来说是非常简单的,但在本文档中同时包含纵向和横向页面。 我的研究表明可以用这些元素来完成: myImage.Relati
有没有办法向 migradoc 表格单元格添加真正的填充?他们目前拥有的选项(LeftPadding 和 RightPadding)实际上像边距一样工作,而不像填充。如果您使用它,它还会推送背景颜色,
我一直在使用 MigraDoc 生成 PDF,除了添加图像外,我的所有布局都运行良好。对于程序的一部分,我们正在生成这些 PDF,因为我们使用的程序只将它们的信息保存为 XML,并且可以从那里将 XM
我需要找到一种方法来用 .png 图片填充整个封面,并在页面底部放置一些文本,而图片不会出现在该位置。 现在我通过使用它来拉伸(stretch): document.DefaultPageSetup.
我想创建一个 PDF 文件,该文件应包含一个表格,并在该表格下包含三个图像;图像应该有水平布局(它们应该在同一行)。如何对齐 MigraDoc 中的三个图像?如果我以这种方式添加图像 docum
我想要实现的是在页面上两次显示相同的内容,用虚线分隔,并使用填充,这样一份副本位于上半部分,第二份副本位于下半部分。类似于 firstSection.SpaceAfter = (height of p
我想在 MigraDoc 中使用不同的字体,但我很难坚持下去。目前,我正在使用以下代码: 我将其作为类范围的变量: String tPdfFont = "MonospaceTyperwrite
如何在 Migradoc 中添加一条简单的水平线,以便将线上方的内容与线下方的内容分开? Paragraph 1 Paragraph 2 Paragraph 3 ETC 最佳答案 您可以为段落或表格添
数据库中有一个 HEX 颜色代码字符串 ("#ADD8E6"),我想用它来更改 MigraDoc< 的背景颜色 单元格。我找到了 Color.Parse() 函数,但它并没有改变我的单元格的颜色。我必
我是一名优秀的程序员,十分优秀!