Heim >Backend-Entwicklung >C++ >Wie kann man übermäßige Leerzeichen beim Zusammenführen von PDFs beseitigen?
Problem:
Beim Zusammenführen mehrerer PDFs wird jede Seite sogar als ganze Seite betrachtet wenn es nur wenig Inhalt hat, ergibt sich ein deutliches Weiß Raum.
Lösung:
private void Merge(MemoryStream outputStream, List<PdfReader> inputs) { try { this.OpenDocument(outputStream); foreach (PdfReader reader in inputs) { this.Merge(reader); } // foreach of the PDF files to merge } finally { this.CloseDocument(); } // try-catch-finally } // Merge
Dieser Code richtet den Zusammenführungsprozess ein, indem er die erforderlichen Strukturen öffnet und initialisiert.
public void Merge(PdfReader reader) { PdfReaderContentParser parser = new PdfReaderContentParser(reader); for (int pageIndex = 1; pageIndex <= reader.NumberOfPages; pageIndex++) { this.Merge(reader, parser, pageIndex); } // foreach of the pages of the current PDF } // Merge
Hier, Jede Seite des angegebenen PdfReader wird zum Zusammenführen analysiert.
public void Merge(PdfReader reader, PdfReaderContentParser parser, int pageIndex) { PdfImportedPage importedPage = Writer.GetImportedPage(reader, pageIndex); PdfContentByte directContent = Writer.DirectContent; PageVerticalAnalyzer finder = parser.ProcessContent(pageIndex, new PageVerticalAnalyzer()); if (finder.VerticalFlips.Count < 2) return; Rectangle pageSizeToImport = reader.GetPageSize(pageIndex); int startFlip = finder.VerticalFlips.Count - 1; bool first = true; while (startFlip > 0) { if (!first) this.NewPage(); float freeSpace = this.YPosition - PageSize.GetBottom(BottomMargin); int endFlip = startFlip + 1; while ((endFlip > 1) && (finder.VerticalFlips[startFlip] - finder.VerticalFlips[endFlip - 2] < freeSpace)) endFlip -= 2; if (endFlip < startFlip) { float height = finder.VerticalFlips[startFlip] - finder.VerticalFlips[endFlip]; directContent.SaveState(); directContent.Rectangle(0, this.YPosition - height, pageSizeToImport.Width, height); directContent.Clip(); directContent.NewPath(); this.Writer.DirectContent.AddTemplate(importedPage, 0, this.YPosition - (finder.VerticalFlips[startFlip] - pageSizeToImport.Bottom)); directContent.RestoreState(); this.YPosition -= height + this.Gap; startFlip = endFlip - 1; } else if (!first) { throw new ArgumentException(string.Format("Page {0} content too large", pageIndex)); } // if first = false; } // while } // Merge
Die Merge-Methode analysiert dann den vertikalen Inhalt jeder Seite mithilfe der PageVerticalAnalyzer-Klasse. Es identifiziert vertikale Abschnitte, die zusammengeführt werden können, wodurch Leerräume eliminiert werden, während der Inhalt erhalten bleibt.
Das obige ist der detaillierte Inhalt vonWie kann man übermäßige Leerzeichen beim Zusammenführen von PDFs beseitigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!