diff options
Diffstat (limited to 'pdf-as-lib/src/main/java')
2 files changed, 60 insertions, 13 deletions
| diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java index e64d735a..cd3fd716 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java @@ -209,7 +209,7 @@ public class PDFAsVisualSignatureBuilder extends PDVisibleSigBuilder {  					}  					String text = (String) cell.getValue(); -					float ttexty = texty - padding - fontSize; +					float ttexty = texty - fontSize - padding * 0.5f;  					// COSName name = COSName.getPDFName("ANDI_TAG!");  					// contentStream.beginMarkedContentSequence(COSName.ALT,  					// name); @@ -260,17 +260,18 @@ public class PDFAsVisualSignatureBuilder extends PDVisibleSigBuilder {  					float columnWidth = (colsSizes != null) ? colsSizes[j] : colWidth;  					float maxWidth = 0;  					for (int k = 0; k < tlines.length; k++) { -						 -						float fwidth; +						float lineWidth;  						if (textFont instanceof PDType1Font) { -							fwidth = textFont.getFontDescriptor().getFontBoundingBox().getWidth() -									/ 1000.0f * fontSize; +							lineWidth = textFont.getStringWidth(tlines[k]) / 1000.0f * fontSize; +							//fwidth = textFont.getFontDescriptor().getFontBoundingBox().getWidth() +							//		/ 1000.0f * fontSize;  						} else { -							fwidth = textFont.getStringWidth("abcdefghijklmnopqrstuvwxyz ") / 1000.0f * fontSize; +							float fwidth = textFont.getStringWidth("abcdefghijklmnopqrstuvwxyz ") / 1000.0f * fontSize;  							fwidth = fwidth / (float)"abcdefghijklmnopqrstuvwxyz".length(); +							lineWidth = tlines[k].length() * fwidth;  						} -						float lineWidth = tlines[k].length() * fwidth; +						   						//float w = textFont.getStringWidth(tlines[k]) / 1000 * fontSize;  						if (maxWidth < lineWidth) { diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java index da228dae..31c68ebf 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java @@ -6,7 +6,9 @@ import java.io.UnsupportedEncodingException;  import java.util.ArrayList;  import java.util.List; +import org.apache.fontbox.ttf.TrueTypeFont;  import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;  import org.apache.pdfbox.pdmodel.font.PDType1Font;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; @@ -308,6 +310,47 @@ public class PDFBoxTable {  		}  		return v;  	} +	 +	private String[] breakString(String value, float maxwidth, PDFont font, float fontSize) throws IOException { +		String[] words = value.split(" "); +		List<String> lines = new ArrayList<String>(); +		String cLineValue = ""; +		for (int i = 0; i < words.length; i++) { +			String word = words[i]; +			String[] lineBreaks = word.split("\n"); +			if (lineBreaks.length > 1) { +				for (int j = 0; j < lineBreaks.length; j++) { +					String subword = lineBreaks[j]; +					// if (cLine + subword.length() > maxline) { +					if(j == 0 && word.startsWith("\n")) { +						lines.add(cLineValue.trim()); +						cLineValue = ""; +					} else if(j != 0) { +						lines.add(cLineValue.trim()); +						cLineValue = ""; +					} +					// } +					String tmpLine = cLineValue + subword; +					float size = font.getStringWidth(tmpLine) / 1000.0f * fontSize; +					if (size > maxwidth && cLineValue.length() != 0) { +						lines.add(cLineValue.trim()); +						cLineValue = ""; +					} +					cLineValue += subword + " "; +				} +			} else { +				String tmpLine = cLineValue + word; +				float size = font.getStringWidth(tmpLine) / 1000.0f * fontSize; +				if (size > maxwidth && cLineValue.length() != 0) { +					lines.add(cLineValue.trim()); +					cLineValue = ""; +				} +				cLineValue += word + " "; +			} +		} +		lines.add(cLineValue.trim()); +		return lines.toArray(new String[0]); +	}  	private String[] breakString(String value, int maxline) {  		String[] words = value.split(" "); @@ -393,11 +436,14 @@ public class PDFBoxTable {  				c = font.getFont(null);  				fontSize = font.getFontSize();  			} -			 +			/*  			float fwidth;  			if (c instanceof PDType1Font) {  				fwidth = c.getFontDescriptor().getFontBoundingBox().getWidth() -						/ 1000.0f * fontSize; +						/ 1000.0f * fontSize * 0.9f; +			} else if (c instanceof PDTrueTypeFont) { +				PDTrueTypeFont t = (PDTrueTypeFont)c; +				fwidth = t.getAverageFontWidth() / 1000.0f * fontSize;  			} else {  				fwidth = c.getStringWidth("abcdefghijklmnopqrstuvwxyz ") / 1000.0f * fontSize;  				fwidth = fwidth / (float)"abcdefghijklmnopqrstuvwxyz".length(); @@ -405,14 +451,14 @@ public class PDFBoxTable {  			logger.debug("Font Width: {}", fwidth);  			int maxcharcount = (int) ((width - padding * 2) / fwidth) - 1; -			logger.debug("Max {} chars per line!", maxcharcount); +			logger.debug("Max {} chars per line!", maxcharcount); */  			float fheight = c.getFontDescriptor().getFontBoundingBox()  					.getHeight() -					/ 1000 * fontSize; +					/ 1000 * fontSize * 0.9f; -			String[] lines = breakString(string, maxcharcount); +			String[] lines = breakString(string, (width - padding * 2.0f), c, fontSize);  			cell.setValue(concatLines(lines)); -			return fheight * lines.length; +			return fheight * lines.length;// - padding;  		case Entry.TYPE_IMAGE:  			if(style != null && style.getImageScaleToFit() != null) {  				if( style.getImageScaleToFit().getHeight() < width) { | 
