c# - iText7 ColumnDocumentRenderer 列“自动”高度
问题描述
我在文档顶部放置一个带有一个图像和一些文本的段落,就像这样:
var stream = new MemoryStream();
var writer = new PdfWriter(stream, new WriterProperties().AddXmpMetadata());
var pdf = new PdfDocument(writer, new DocumentProperties());
var document = new Document(pdf);
PageSize ps = pdf.GetDefaultPageSize();
PdfDocumentInfo info = pdf.GetDocumentInfo();
info.SetTitle("Apartado " + _appLogic.GetTicketType(tipoDecimoID).Nombre);
//Logo
ImageData imageData = ImageDataFactory.Create(System.IO.Directory.GetCurrentDirectory() + "/wwwroot/logosanrafaelPDF.jpg");
Image pdfImage = new Image(imageData);
////Header
Paragraph header= new Paragraph();
cabecera.Add(pdfImage);
cabecera.Add(new Tab());
cabecera.AddTabStops(new TabStop(1000, TabAlignment.RIGHT));
cabecera.Add(new Text("APARTADO POR NUMERO").SetBold());
document.Add(header);
之后,我想从 for 循环中的列表中读取内容并将其写入文档中,并使用 ColumnDocumentRenderer 分成两列,但我希望它填充第一页中的所有剩余空间和下一页中的所有空间页。我正在尝试这个,但文字重叠
if(pageToWrite < document.GetRenderer().GetCurrentArea().GetPageNumber()) {
pageToWrite = document.GetRenderer().GetCurrentArea().GetPageNumber();
float x = document.GetRenderer().GetCurrentArea().GetBBox().GetX();
float y = document.GetRenderer().GetCurrentArea().GetBBox().GetY();
float areaHeight = document.GetRenderer().GetCurrentArea().GetBBox().GetHeight();
float areaWidth = document.GetRenderer().GetCurrentArea().GetBBox().GetWidth();
float height = ps.GetHeight();//document.GetRenderer().GetCurrentArea().GetBBox().GetHeight();
float width = ps.GetWidth();
document.GetRenderer().Flush();
//Define column areas
Rectangle[] newColumns = new Rectangle[] {
new Rectangle(offSet - 5, offSet, width/2, height),
new Rectangle(offSet + width/2, offSet, width/2, height)
};
ExtendedColumnDocumentRenderer renderer2 = new ExtendedColumnDocumentRenderer(document, new RootLayoutArea(pageToWrite, new Rectangle(x, y, width, height)), newColumns);
document.SetRenderer(renderer2);
}
ExtendedColumnDocumentRenderer 类如下所示:
private class ExtendedColumnDocumentRenderer : ColumnDocumentRenderer
{
public ExtendedColumnDocumentRenderer(Document document, RootLayoutArea currentArea, Rectangle[] columns) : base(document, columns)
{
this.currentArea = new RootLayoutArea(currentArea.GetPageNumber(), currentArea.GetBBox().Clone());
this.currentPageNumber = this.currentArea.GetPageNumber();
this.immediateFlush = false;
}
}
解决方案
推荐阅读
- python - 如何更改散点图中数据点的透明度
- ssl - 计算引擎:出现 SSL 错误:例程:CONNECT_CR_SRVR_HELLO:错误的版本号
- r - R不会在数据框中读取CSV的数值
- amazon-web-services - api 网关找不到 lambda 别名
- postgresql - PostgreSQL 更新触发器:关系“新”不存在
- git - 如何将 gpg 密钥传输到另一台计算机?
- formatting - 仅突出显示已“拖”过来的文本/代码?
- react-native - 无法创建自定义 StackNavigator - “无法注册导航器”?
- r - 试图获取从列值派生的 checkboxGroupInput 以过滤条形图,但不断收到各种错误?
- javascript - 如何添加文档并将其 ID 立即存储在 Firebase 的其他地方?使用本机反应