pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Lehmkühler <andr...@lehmi.de>
Subject Re: Drawing vertical text like Identity-V encoding.
Date Tue, 26 Aug 2014 10:13:45 GMT
Hi,


> tani@marino.co.jp hat am 26. August 2014 um 10:56 geschrieben:
>
>
> Hi,
>
> I understand that PDFToImage currently doesn't support drawing
> vertical text like Identity-V encoding. But I had to use it,
> so I tried to let it work with modification as show below.
>
> Even though I don't know whether this code is proper or not, I
> could make image files with vertical text PDF file.
>
> I'm happy if this information is something useful.
Of course, looks interesting. Can you provide us with a sample pdf?

Please create an issue on JIRA [1] and attach both the patch and the
sample pdf to it.


> Regards,
> tani

BR
Andreas Lehmkühler

[1] https://issues.apache.org/jira/browse/PDFBOX


>
> diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
> b/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
> index ec1ed4a..0aae1b7 100644
> --- a/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
> +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
> @@ -330,7 +330,16 @@ public class PDFStreamEngine
>              Matrix adjMatrix = new Matrix();
>              adjustment =- (adjustment / 1000) * horizontalScaling * fontsize;
>              // TODO vertical writing mode
> -            adjMatrix.setValue( 2, 0, adjustment );
> +            //
> +            // TODO: This is workaround for vertical writing mode by tani.
> +            //       Check pdfbox official improvement.
> +            //
> +            if (getGraphicsState().getTextState().getFont().getCMap() != null
> +                &&
> getGraphicsState().getTextState().getFont().getCMap().getWMode() == 1) {
> +                adjMatrix.setValue( 2, 1, adjustment ); // Adjust only Y
> axis.
> +            } else {
> +                adjMatrix.setValue( 2, 0, adjustment );
> +            }
>              showAdjustedTextRun(strings.get(i), adjMatrix);
>          }
>      }
> @@ -472,9 +481,18 @@ public class PDFStreamEngine
>              float ty = 0;
>              // reset the matrix instead of creating a new one
>              td.reset();
> -            td.setValue(2, 0, tx);
> -            td.setValue(2, 1, ty);
> -
> +            //
> +            // TODO: This is workaround for vertical writing mode by tani.
> +            //       Check pdfbox official improvement.
> +            //
> +            if (getGraphicsState().getTextState().getFont().getCMap() != null
> +                &&
> getGraphicsState().getTextState().getFont().getCMap().getWMode() == 1) {
> +                td.setValue(2, 1, -tx); // Adjust only Y axis.
> +            } else {
> +                td.setValue(2, 0, tx);
> +                td.setValue(2, 1, ty);
> +            }
> +           
>              // The text matrix gets updated after each glyph is placed. The
>updated
>              // version will have the X and Y coordinates for the next glyph.
>              // textMatrixEnd contains the coordinates of the end of the last
>glyph without
> @@ -488,7 +506,16 @@ public class PDFStreamEngine
>              // add some spacing to the text matrix (see comment above)
>              tx = (charHorizontalDisplacementText * fontSizeText +
>characterSpacingText +
>                      spacingText) * horizontalScalingText;
> -            td.setValue(2, 0, tx);
> +            //
> +            // TODO: This is workaround for vertical writing mode by tani.
> +            //       Check pdfbox official improvement.
> +            //
> +            if (getGraphicsState().getTextState().getFont().getCMap() != null
> +                &&
> getGraphicsState().getTextState().getFont().getCMap().getWMode() == 1) {
> +                td.setValue(2, 1, -tx); // Adjust only Y axis.
> +            } else {
> +                td.setValue(2, 0, tx);
> +            }
>              td.multiply(textMatrix, textMatrix);
> 
>              // determine the width of this character
>
> --
>
>

Mime
View raw message