You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Roman (JIRA)" <ji...@apache.org> on 2016/08/24 11:25:22 UTC

[jira] [Reopened] (PDFBOX-3464) character height 3 times higher than expected

     [ https://issues.apache.org/jira/browse/PDFBOX-3464?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Roman reopened PDFBOX-3464:
---------------------------

This do not help, since (ascent-descent)/2 value is even greater then height. I'm attaching my screenshot to illustrate.


> character height 3 times higher than expected
> ---------------------------------------------
>
>                 Key: PDFBOX-3464
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3464
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Text extraction
>            Reporter: Roman
>            Priority: Minor
>         Attachments: screenshot-1.png, screenshot.png, subnode.docx.pdf
>
>
> The issue basically same as PDFBOX-2749, but wrong sample was attached to it by mistake. Correct PDF is attached here.
> The core of the problem is that font height for this specific font is determined incorrectly, please see code with comments below.
> The issue was reproduced on Pdfbox 1.8.4, but as we tested before, same result we get on 1.8.9 and 2.0 versions.
> {code}
> public class Extractor extends PDFTextStripper {
> //<...CUT...>
> 	protected void writePage() throws IOException {
> 		for (List<TextPosition> textList : charactersByArticle) { //charactersByArticle was inherited from base class
> 			Iterator textIter = textList.iterator();
> //<...CUT...>
> 			while (textIter.hasNext()) {
> 				TextPosition position = (TextPosition) textIter.next();
> //<...CUT...>
> 		PDFontDescriptor fontDescriptor = position.getFont().getFontDescriptor();
> //<...CUT...>
> 		float yscale = position.getTextPos().getYScale();
> 		float asc = Math.abs(fontDescriptor.getAscent() / 1000 * yscale);
> 		float rh = Math.abs(fontDescriptor.getFontBoundingBox().getUpperRightY() / 1000 * yscale);
> 		float desc = Math.abs(fontDescriptor.getDescent() / 1000 * yscale);
> 		float capHeight = Math.abs(fontDescriptor.getCapHeight() / 1000 * yscale);
> 		if (capHeight == 0)
> 			capHeight = position.getHeight();
> 		float h = (rh + Math.max(Math.max(capHeight, position.getHeight()), asc)) / 2;
> //"h" evaluates to 37.39 (should be between 11 and 12)
> //"desc" evaluates to 2.664
> //"capHeight" evaluates to 37.39
> //"position.getHeight()" evaluates to 33.48
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org