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

--



Reply via email to