首页 > 解决方案 > 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;
        }
    }

标签: c#.net-coreitext7

解决方案


推荐阅读