Skip to content

Commit 8a9f1b4

Browse files
ars18wrwUbuntu
authored andcommitted
Restrict nbsp only splitting
DEVSIX-5262
1 parent cc948ef commit 8a9f1b4

File tree

6 files changed

+92
-0
lines changed

6 files changed

+92
-0
lines changed

layout/src/main/java/com/itextpdf/layout/renderer/LineRenderer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,9 @@ && hasChildRendererInHtmlMode()) {
530530

531531
childPos = lastFittingChildRendererData.childIndex;
532532
childResult = lastFittingChildRendererData.childLayoutResult;
533+
if (0 == childPos && LayoutResult.NOTHING == childResult.getStatus()) {
534+
anythingPlaced = false;
535+
}
533536
textRendererLayoutResults.put(childPos, childResult);
534537

535538
MinMaxWidth textSequenceElemminMaxWidth = ((MinMaxWidthLayoutResult) childResult).getMinMaxWidth();

layout/src/test/java/com/itextpdf/layout/renderer/TextRendererIntegrationTest.java

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ This file is part of the iText (R) project.
2929
import com.itextpdf.kernel.colors.ColorConstants;
3030
import com.itextpdf.kernel.font.PdfFont;
3131
import com.itextpdf.kernel.font.PdfFontFactory;
32+
import com.itextpdf.kernel.geom.PageSize;
3233
import com.itextpdf.kernel.geom.Rectangle;
3334
import com.itextpdf.kernel.pdf.PdfDocument;
3435
import com.itextpdf.kernel.pdf.PdfWriter;
@@ -774,6 +775,94 @@ public IRenderer getNextRenderer() {
774775
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder));
775776
}
776777

778+
@Test
779+
public void nbspCannotBeFitAndIsTheOnlySymbolTest() throws IOException, InterruptedException {
780+
String outFileName = destinationFolder + "nbspCannotBeFitAndIsTheOnlySymbolTest.pdf";
781+
String cmpFileName = sourceFolder + "cmp_nbspCannotBeFitAndIsTheOnlySymbolTest.pdf";
782+
783+
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFileName));
784+
// No place for any symbol (page width is fully occupied by margins)
785+
Document doc = new Document(pdfDocument, new PageSize(72, 1000));
786+
787+
Paragraph paragraph = new Paragraph()
788+
.add(new Text("\u00A0"));
789+
790+
paragraph.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
791+
doc.add(paragraph);
792+
793+
doc.close();
794+
795+
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder));
796+
}
797+
798+
@Test
799+
@LogMessages(messages = {
800+
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA)
801+
})
802+
public void nbspCannotBeFitAndMakesTheFirstChunkTest() throws IOException, InterruptedException {
803+
String outFileName = destinationFolder + "nbspCannotBeFitAndMakesTheFirstChunkTest.pdf";
804+
String cmpFileName = sourceFolder + "cmp_nbspCannotBeFitAndMakesTheFirstChunkTest.pdf";
805+
806+
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFileName));
807+
// No place for any symbol (page width is fully occupied by margins)
808+
Document doc = new Document(pdfDocument, new PageSize(72, 1000));
809+
810+
Paragraph paragraph = new Paragraph()
811+
.add(new Text("\u00A0"))
812+
.add(new Text("SecondChunk"));
813+
814+
paragraph.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
815+
doc.add(paragraph);
816+
817+
doc.close();
818+
819+
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder));
820+
}
821+
822+
@Test
823+
@LogMessages(messages = {
824+
@LogMessage(messageTemplate = LogMessageConstant.ELEMENT_DOES_NOT_FIT_AREA)
825+
})
826+
public void nbspCannotBeFitAndIsTheFirstSymbolOfChunkTest() throws IOException, InterruptedException {
827+
String outFileName = destinationFolder + "nbspCannotBeFitAndIsTheFirstSymbolOfChunkTest.pdf";
828+
String cmpFileName = sourceFolder + "cmp_nbspCannotBeFitAndIsTheFirstSymbolOfChunkTest.pdf";
829+
830+
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFileName));
831+
// No place for any symbol (page width is fully occupied by margins)
832+
Document doc = new Document(pdfDocument, new PageSize(72, 1000));
833+
834+
Paragraph paragraph = new Paragraph()
835+
.add(new Text("\u00A0First"));
836+
837+
paragraph.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
838+
doc.add(paragraph);
839+
840+
doc.close();
841+
842+
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder));
843+
}
844+
845+
@Test
846+
public void nbspCannotBeFitAndIsTheLastSymbolOfFirstChunkTest() throws IOException, InterruptedException {
847+
String outFileName = destinationFolder + "nbspCannotBeFitAndIsTheLastSymbolOfFirstChunkTest.pdf";
848+
String cmpFileName = sourceFolder + "cmp_nbspCannotBeFitAndIsTheLastSymbolOfFirstChunkTest.pdf";
849+
850+
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFileName));
851+
// No place for the second symbol
852+
Document doc = new Document(pdfDocument, new PageSize(81, 1000));
853+
854+
Paragraph paragraph = new Paragraph()
855+
.add(new Text("H\u00A0"))
856+
.add(new Text("ello"));
857+
858+
paragraph.setProperty(Property.RENDERING_MODE, RenderingMode.HTML_MODE);
859+
doc.add(paragraph);
860+
861+
doc.close();
862+
863+
Assert.assertNull(new CompareTool().compareByContent(outFileName, cmpFileName, destinationFolder));
864+
}
865+
777866
@Test
778867
@LogMessages(messages = {
779868
@LogMessage(messageTemplate = LogMessageConstant.CREATE_COPY_SHOULD_BE_OVERRIDDEN, count = 8)

0 commit comments

Comments
 (0)