Wie kann ich einen Absatz auf 2 Absätze aufteilen, da er nur teilweise in die Leinwand passt. Nach dem Teilen möchte ich den ersten Teil in die Leinwand und den zweiten Teil in eine neue Leinwand einfügen.Itext 7 Split Absatz
Antwort
Ihre Vorgehensweise ist im Allgemeinen korrekt und das Layout in iText7 ist flexibel genug, um Ihnen die erforderliche Aufgabe auf einfache Weise zu ermöglichen. Das einzige, was ich sehe, ist nicht sehr klar ist, dass Paragraph
ist eigentlich ein Element, das sich nicht teilen kann und keine Klassen im Layout-Framework erleichtern Element Splitting. Sie könnten es manuell tun, aber das ist nicht nötig. Stattdessen sollten Sie direkt mit IRenderer
und ParagraphRenderer
arbeiten.
IRenderer
kann sich als Ergebnis von layout
Betrieb aufteilen und stellt den notwendigen Teil der Daten nur im Vergleich zu der Paragraph
, die vollständige Daten enthält.
canvas.getRenderer().addChild(rendererToAdd.setParent(canvas.getRenderer()));
Und Sie können die Teil-Renderer zugreifen (der Teil, der den übergebenen Bereich und Überlaufteil passen) aus LayoutResult#getSplitRenderer()
und LayoutResult#getOverflowRenderer()
:
Sie können eine IRenderer
, um den CanvasRenderer
hinzuzufügen.
Im Allgemeinen kann der Code angepasst werden wie folgt:
public ParagraphRenderer addParagraphToPage(PdfDocument pdfDocument, int pageNum, Rectangle rectangle, ParagraphRenderer renderer) {
PdfPage page = pdfDocument.getPage(pageNum);
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), pdfDocument);
Canvas canvas = new Canvas(pdfCanvas, pdfDocument, rectangle);
renderer.setParent(canvas.getRenderer());
LayoutResult result = renderer.layout(new LayoutContext(new LayoutArea(pageNum, rectangle)));
IRenderer rendererToAdd = result.getStatus() == LayoutResult.FULL ? renderer : result.getSplitRenderer();
canvas.getRenderer().addChild(rendererToAdd.setParent(canvas.getRenderer()));
return result.getStatus() != LayoutResult.FULL ? (ParagraphRenderer) result.getOverflowRenderer() : null;
}
Und dann für das Hinzufügen von Absatz zu sequenziellen Seiten, bis alle Inhalte, die Sie im Grunde nur zwei Zeilen Code benötigen gelegt wird:
ParagraphRenderer renderer = (ParagraphRenderer) p.createRendererSubTree();
while ((renderer = addParagraphToPage(pdfDocument, pageNum++, rectangle, renderer)) != null);
Die Lösung funktioniert wirklich gut. Danke vielmals ;-) –
- 1. iText Abstand dazwischen Absatz
- 2. IText 7 Link Border Anzeigen
- 3. Split Text von Absatz
- 4. PHP + Split-Absatz in Array
- 5. iText 7 java.lang.NoSuchMethodError
- 6. Itext 7 Schriftfarbe einstellen
- 7. iText 7 Java HtmlConverter.convertToPdf
- 8. Was ersetzt Chunk in iText 7?
- 9. Split nach Absatz in R
- 10. Was ist itext 7 gleichwertige Klasse in itext 5
- 11. Wie richtet man einen Absatz (justify) mit Itext aus?
- 12. Itext Wie UTF-Codierung und Schriftart auf einen Absatz setzen
- 13. iText 5 Fügen Sie ein Textfeld unter einem Absatz hinzu
- 14. iText 7 Tabelle ignoriert meine Tabellenrahmeneinstellungen
- 15. itext 7 Importieren von Gliederung/Lesezeichen
- 16. iText 7 - Breite der Zellen einstellen
- 17. iText 7 Lesehintergrundbild aus JAR-Datei
- 18. Griechische Zeichen in PDF mit iText 7
- 19. wie benutzerdefinierte farbe mit itext 7
- 20. iText 7 Jumpstart mit flacher Batterie
- 21. Itext 7 überschreibt den Standardrand in pdfHtml
- 22. Hinzufügen von Metadaten mit iText 7
- 23. IText 7: Tabelleninhalt wird nicht angezeigt
- 24. iText 7 kann keinen Rand setzen
- 25. Erstellen von Textbox in iText 7
- 26. IText 7, Textausrichtung in einem PdfFormField?
- 27. iText 7 (7.0.2) Fehler: Die Methode hinzufügen (AreaBreak) im Typ Dokument ist nicht anwendbar für die Argumente (Absatz)
- 28. iText 7 relative Spaltenbreite funktioniert nicht mehr Starten von iText 7.0.2
- 29. itext 7 concat pdf und an die Antwort senden
- 30. Wie Sie den Text in einer Zelle itext 7
Teilen Sie Ihren Code, expliziter sein .. – pirs
Ich würde mich freuen, wenn mir jemand helfen könnte. –
Es wäre ok, warte eine Weile – pirs