Author: msahyoun Date: Fri Dec 4 19:04:53 2015 New Revision: 1718008 URL: http://svn.apache.org/viewvc?rev=1718008&view=rev Log: PDFBOX-3148: correct appearance generation for multiple paragraphs
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java?rev=1718008&r1=1718007&r2=1718008&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java Fri Dec 4 19:04:53 2015 @@ -174,7 +174,8 @@ class PlainTextFormatter { if (textContent != null && !textContent.getParagraphs().isEmpty()) { - for (Paragraph paragraph : textContent.getParagraphs()) + boolean isFirstParagraph = true; + for (Paragraph paragraph : textContent.getParagraphs()) { if (wrapLines) { @@ -183,7 +184,8 @@ class PlainTextFormatter appearanceStyle.getFontSize(), width ); - processLines(lines); + processLines(lines, isFirstParagraph); + isFirstParagraph = false; } else { @@ -225,14 +227,14 @@ class PlainTextFormatter * @param lines the lines to process. * @throws IOException if there is an error writing to the stream. */ - private void processLines(List<Line> lines) throws IOException + private void processLines(List<Line> lines, boolean isFirstParagraph) throws IOException { float wordWidth = 0f; float lastPos = 0f; float startOffset = 0f; float interWordSpacing = 0f; - + for (Line line : lines) { switch (textAlignment) @@ -255,19 +257,19 @@ class PlainTextFormatter float offset = -lastPos + startOffset + horizontalOffset; - if (lines.indexOf(line) == 0) + if (lines.indexOf(line) == 0 && isFirstParagraph) { contents.newLineAtOffset(offset, verticalOffset); - // reset the initial verticalOffset - verticalOffset = 0f; + // reset the initial horizontalOffset horizontalOffset = 0f; } else { // keep the last position verticalOffset = verticalOffset - appearanceStyle.getLeading(); - contents.newLineAtOffset(offset, -appearanceStyle.getLeading()); + contents.newLineAtOffset(offset, - appearanceStyle.getLeading()); } + lastPos = startOffset; List<Word> words = line.getWords();