@@ -45,19 +45,19 @@ This file is part of the iText (R) project.
45
45
46
46
import com .itextpdf .io .LogMessageConstant ;
47
47
import com .itextpdf .io .font .constants .StandardFonts ;
48
- import com .itextpdf .io .image .ImageDataFactory ;
49
48
import com .itextpdf .kernel .colors .ColorConstants ;
50
49
import com .itextpdf .kernel .font .PdfFontFactory ;
51
50
import com .itextpdf .kernel .geom .PageSize ;
52
51
import com .itextpdf .kernel .geom .Rectangle ;
53
52
import com .itextpdf .kernel .pdf .PdfDocument ;
53
+ import com .itextpdf .kernel .pdf .PdfPage ;
54
54
import com .itextpdf .kernel .pdf .PdfWriter ;
55
+ import com .itextpdf .kernel .pdf .canvas .PdfCanvas ;
55
56
import com .itextpdf .kernel .utils .CompareTool ;
56
57
import com .itextpdf .layout .borders .SolidBorder ;
57
58
import com .itextpdf .layout .element .AreaBreak ;
58
59
import com .itextpdf .layout .element .Cell ;
59
60
import com .itextpdf .layout .element .Div ;
60
- import com .itextpdf .layout .element .Image ;
61
61
import com .itextpdf .layout .element .List ;
62
62
import com .itextpdf .layout .element .Paragraph ;
63
63
import com .itextpdf .layout .element .Table ;
@@ -85,6 +85,20 @@ public class KeepTogetherTest extends ExtendedITextTest {
85
85
public static final String sourceFolder = "./src/test/resources/com/itextpdf/layout/KeepTogetherTest/" ;
86
86
public static final String destinationFolder = "./target/test/com/itextpdf/layout/KeepTogetherTest/" ;
87
87
88
+ private static final String BIG_TEXT = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n "
89
+ + " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,\n "
90
+ + " sed diam voluptua.\n \n At vero eos et accusam et justo duo dolores et ea rebum.\n \n "
91
+ + " Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n "
92
+ + " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,\n "
93
+ + " sed diam voluptua.\n \n At vero eos et accusam et justo duo dolores et ea rebum.\n \n "
94
+ + "Lorem ipsum dolor sit amet, consetetur sadipscing elitr,\n sed diam nonumy eirmod tempor"
95
+ + " invidunt ut labore et dolore magna aliquyam erat,\n sed diam voluptua.\n \n "
96
+ + " At vero eos et accusam et justo duo dolores et ea rebum.\n \n " ;
97
+ private static final String MEDIUM_TEXT = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr"
98
+ + " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."
99
+ + " At vero eos et accusam et justo duo dolores et ea rebum.\n " ;
100
+
101
+
88
102
@ BeforeClass
89
103
public static void beforeClass () {
90
104
createOrClearDestinationFolder (destinationFolder );
@@ -1011,122 +1025,116 @@ public void smallFloatInsideKeptTogetherTableTest02() throws IOException, Interr
1011
1025
1012
1026
@ Test
1013
1027
@ LogMessages (messages = {
1014
- @ LogMessage (messageTemplate = LogMessageConstant .ELEMENT_DOES_NOT_FIT_AREA )
1028
+ @ LogMessage (messageTemplate = LogMessageConstant .ELEMENT_DOES_NOT_FIT_AREA , count = 2 )
1015
1029
})
1016
- //TODO: update cmp file when DEVSIX-4681 will be fixed
1017
- public void floatingElementsInDivAndKeepTogetherElemTest () throws IOException , InterruptedException {
1018
- String cmpFileName = sourceFolder + "cmp_floatingElementsInDivAndKeepTogetherElem.pdf" ;
1019
- String outFile = destinationFolder + "floatingElementsInDivAndKeepTogetherElem.pdf" ;
1030
+ public void contentOverlappingInDivWithKeepTogetherTest () throws IOException , InterruptedException {
1031
+ String filename = "contentOverlappingInDivWithKeepTogether.pdf" ;
1032
+ String outFile = destinationFolder + filename ;
1033
+ String cmpFileName = sourceFolder + "cmp_" + filename ;
1020
1034
1021
- PdfDocument pdfDoc = new PdfDocument (new PdfWriter (outFile ));
1022
- pdfDoc . addNewPage ();
1035
+ try ( Document doc = new Document ( new PdfDocument (new PdfWriter (outFile )))) {
1036
+ doc . getPdfDocument (). addNewPage (PageSize . A5 . rotate () );
1023
1037
1024
- Document doc = new Document (pdfDoc );
1025
-
1026
- Div mainDiv = new Div ();
1038
+ Div main = new Div ();
1027
1039
1028
- Image first = new Image (ImageDataFactory .create (sourceFolder + "1.png" ));
1029
- first .setProperty (Property .FLOAT , FloatPropertyValue .RIGHT );
1030
- first .setHeight (350 );
1040
+ Div child1 = createChildDivWithText (main , null ).setKeepTogether (true );
1041
+ createChildDivWithText (child1 , BIG_TEXT ).setKeepTogether (true );
1031
1042
1032
- Image second = new Image ( ImageDataFactory . create ( sourceFolder + "2.png" ) );
1033
- second . setProperty ( Property . FLOAT , FloatPropertyValue . RIGHT );
1034
- second . setHeight ( 350 );
1043
+ Div div1_2 = createChildDivWithText ( child1 , null ). setKeepTogether ( true );
1044
+ createChildDivWithText ( div1_2 , "Section A" );
1045
+ createChildDivWithText ( div1_2 , null ). add ( new Paragraph ( MEDIUM_TEXT ). setFirstLineIndent ( 20 ) );
1035
1046
1036
- mainDiv .add (first );
1037
- mainDiv .add (second );
1047
+ Div child2 = createChildDivWithText (main , null ).setKeepTogether (true );
1048
+ createChildDivWithText (child2 , "Section B" );
1049
+ createChildDivWithText (child2 , null );
1050
+ createChildDivWithText (child2 , "Lorem ipsum dolor sit amet!" );
1038
1051
1039
- doc .add (mainDiv );
1040
- doc .add (new Paragraph ("Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1041
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1042
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1043
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1044
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1045
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! " )
1046
- .setKeepTogether (true ).setFontSize (24 ));
1052
+ doc .add (main );
1053
+ }
1047
1054
1048
- doc .close ();
1049
1055
Assert .assertNull (new CompareTool ().compareByContent (outFile , cmpFileName , destinationFolder ));
1050
1056
}
1051
1057
1052
1058
@ Test
1053
1059
@ LogMessages (messages = {
1054
- @ LogMessage (messageTemplate = LogMessageConstant .ELEMENT_DOES_NOT_FIT_AREA )
1060
+ @ LogMessage (messageTemplate = LogMessageConstant .ELEMENT_DOES_NOT_FIT_AREA , count = 2 )
1055
1061
})
1056
- //TODO: update cmp file when DEVSIX-4681 will be fixed
1057
- public void floatingEmptyElementsInDivAndKeepTogetherElemTest () throws IOException , InterruptedException {
1058
- String cmpFileName = sourceFolder + "cmp_floatingEmptyElementsInDivAndKeepTogetherElem.pdf" ;
1059
- String outFile = destinationFolder + "floatingEmptyElementsInDivAndKeepTogetherElem.pdf" ;
1060
-
1061
- PdfDocument pdfDoc = new PdfDocument (new PdfWriter (outFile ));
1062
- pdfDoc .addNewPage (PageSize .A5 .rotate ());
1062
+ public void missContentAndOverlappingInDivNoKeepTogetherTest () throws IOException , InterruptedException {
1063
+ String filename = "missContentAndOverlappingInDivNoKeepTogether.pdf" ;
1064
+ String outFile = destinationFolder + filename ;
1065
+ String cmpFileName = sourceFolder + "cmp_" + filename ;
1063
1066
1064
- Document doc = new Document (pdfDoc );
1067
+ try (Document doc = new Document (new PdfDocument (new PdfWriter (outFile )))) {
1068
+ doc .getPdfDocument ().addNewPage (PageSize .A5 .rotate ());
1065
1069
1066
- Div mainDiv = new Div ();
1070
+ Div main = new Div ();
1067
1071
1068
- Paragraph p1 = new Paragraph ( );
1069
- p1 . setProperty ( Property . FLOAT , FloatPropertyValue . RIGHT );
1072
+ Div child1 = createChildDivWithText ( main , null ). setKeepTogether ( true );
1073
+ createChildDivWithText ( child1 , BIG_TEXT );
1070
1074
1071
- Paragraph p2 = new Paragraph ( );
1072
- p2 . setProperty ( Property . FLOAT , FloatPropertyValue . RIGHT );
1075
+ Div div1_2 = createChildDivWithText ( child1 , null ). setKeepTogether ( true );
1076
+ createChildDivWithText ( div1_2 , "Section A" );
1073
1077
1074
- Paragraph ktp = new Paragraph ("Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1075
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1076
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1077
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1078
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1079
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1080
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1081
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1082
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1083
- ).setKeepTogether (true ).setFontSize (20 );
1078
+ createChildDivWithText (div1_2 , null ).add (new Paragraph (MEDIUM_TEXT ).setFirstLineIndent (20 ));
1084
1079
1085
- mainDiv .add (p1 );
1086
- mainDiv .add (p2 );
1080
+ // KEEP_TOGETHER is not set here
1081
+ Div child2 = createChildDivWithText (main , null );
1082
+ createChildDivWithText (child2 , "Section B" );
1083
+ createChildDivWithText (child2 , null );
1084
+ createChildDivWithText (child2 , "Lorem ipsum dolor sit amet!" );
1087
1085
1088
- doc .add (mainDiv );
1089
- doc . add ( ktp );
1086
+ doc .add (main );
1087
+ }
1090
1088
1091
- doc .close ();
1092
1089
Assert .assertNull (new CompareTool ().compareByContent (outFile , cmpFileName , destinationFolder ));
1093
1090
}
1094
1091
1095
1092
@ Test
1096
- public void floatingEmptyElementsAndKeepTogetherElemTest () throws IOException , InterruptedException {
1097
- String cmpFileName = sourceFolder + "cmp_floatingEmptyElementsAndKeepTogetherElem.pdf" ;
1098
- String outFile = destinationFolder + "floatingEmptyElementsAndKeepTogetherElem.pdf" ;
1093
+ @ LogMessages (messages = {
1094
+ @ LogMessage (messageTemplate = LogMessageConstant .ELEMENT_DOES_NOT_FIT_AREA , count = 2 )
1095
+ })
1096
+ public void contentOverlappingDivKeepTogetherInRectTest () throws IOException , InterruptedException {
1097
+ String filename = "contentOverlappingDivKeepTogetherInRect.pdf" ;
1098
+ String outFile = destinationFolder + filename ;
1099
+ String cmpFileName = sourceFolder + "cmp_" + filename ;
1099
1100
1100
- PdfDocument pdfDoc = new PdfDocument (new PdfWriter (outFile ));
1101
- pdfDoc .addNewPage (PageSize .A5 .rotate ());
1101
+ try (PdfDocument pdfDoc = new PdfDocument (new PdfWriter (outFile ))) {
1102
+ PdfPage page = pdfDoc .addNewPage (PageSize .A5 .rotate ());
1103
+ Rectangle rectangle = new Rectangle (10 , 10 , 500 , 350 );
1104
+ PdfCanvas pdfCanvas = new PdfCanvas (page );
1102
1105
1103
- Document doc = new Document (pdfDoc );
1106
+ try (Canvas canvas = new Canvas (pdfCanvas , rectangle )) {
1107
+ Div main = new Div ();
1104
1108
1105
- Paragraph p1 = new Paragraph ();
1106
- p1 .setProperty (Property .FLOAT , FloatPropertyValue .RIGHT );
1109
+ Div child1 = createChildDivWithText (main , null ).setKeepTogether (true );
1107
1110
1108
- Paragraph p2 = new Paragraph ();
1109
- p2 .setProperty (Property .FLOAT , FloatPropertyValue .RIGHT );
1111
+ createChildDivWithText (child1 , BIG_TEXT ).setKeepTogether (true );
1112
+ createChildDivWithText (child1 , "Section A" )
1113
+ .setKeepTogether (true )
1114
+ .add (new Paragraph (MEDIUM_TEXT ).setFirstLineIndent (20 ));
1110
1115
1111
- Paragraph ktp = new Paragraph ("Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1112
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1113
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1114
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1115
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1116
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1117
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1118
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1119
- + "Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! Hello, iText! "
1120
- ).setKeepTogether (true ).setFontSize (20 );
1116
+ Div child2 = createChildDivWithText (main , null ).setKeepTogether (true );
1121
1117
1122
- doc .add (p1 );
1123
- doc .add (p2 );
1124
- doc .add (ktp );
1118
+ createChildDivWithText (child2 , "Section B" );
1119
+ createChildDivWithText (child2 , null );
1120
+ createChildDivWithText (child2 , "Lorem ipsum dolor sit amet!" );
1121
+
1122
+ canvas .add (main );
1123
+ }
1124
+ }
1125
1125
1126
- doc .close ();
1127
1126
Assert .assertNull (new CompareTool ().compareByContent (outFile , cmpFileName , destinationFolder ));
1128
1127
}
1129
1128
1129
+ private Div createChildDivWithText (Div parent , String text ) {
1130
+ Div child = new Div ();
1131
+ if (text != null ) {
1132
+ child .add (new Paragraph (text ));
1133
+ }
1134
+ parent .add (child );
1135
+
1136
+ return child ;
1137
+ }
1130
1138
1131
1139
private static Div createKeptTogetherDivWithSmallFloat (int divHeight ) {
1132
1140
// test keep-together processing on height-only overflow for blocks
0 commit comments