我正在使用Xfinium.PDF为UWP创建一个PdfFlowDocument。我需要插入一个分页符,但仅当某个部分(包含段落和表格)不适合当前页面时。这是一种“保持在一起”的功能。
我怎样才能完成任务?
更新:我已经将我需要的内容量最小化到一个表中。虽然它是一个流表,但我知道我需要将它转换为固定大小的表来计算它的高度。如果我能够在渲染所有流内容后以某种方式找到页面上的当前位置,我将能够计算页面上剩余的空间。如果表有足够的空间,我会在页面上呈现它。如果没有,我会发出分页符并在下一页上进行渲染。
在渲染流内容后,是否有功能可以找到页面上的当前位置?
答案 0 :(得分:0)
您可以通过调用PdfFlowDocument.StartNewPage强制分页
流内容的大小信息在公共API中不可用,如果内容对象符合当前可用空间,则无法在代码中进行测试。
我们将在下一版本中支持此功能。
答案 1 :(得分:0)
创建一个包含单行和单元格的表。对于单元格,使用 PdfFlowTableCompositeCell 。它有一个属性 Content ,它是流内容对象的集合。在行集 EnableRowSplit = false 。
var table = new PdfFlowTableContent(1);
//column width in %
table.Columns[0].Width = 100;
var row = table.Rows.Add();
row.EnableRowSplit = false;
var cell = new PdfFlowTableCompositeCell();
//text
cell.Content.Add(new PdfFlowTextContent(new PdfFormattedContent(KswModuleTranslator.PdfFaultReportStationAssuranceText)));
//image
var image = new PdfPngImage(new MemoryStream(signatureData.Signature));
var imgDings = new PdfFlowImageContent(image);
cell.Content.Add(imgDings);
//text
cell.Content.Add(new PdfFlowTextContent(new PdfFormattedContent(signatureInfo.SigneeName)));
row.Cells.Add(cell);
document.AddContent(table);