pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From t...@marino.co.jp
Subject Re: Drawing vertical text like Identity-V encoding.
Date Thu, 28 Aug 2014 05:17:27 GMT
Hi,

> 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.

I created an issue on JIRA.
https://issues.apache.org/jira/browse/PDFBOX-2294

Regards,
tani

On 2014/08/26 19:13, Andreas Lehmkühler wrote:
> Hi,
>
>>
>> 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