1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.render.pdf;
import org.apache.fop.area.CTM;
import org.apache.fop.pdf.PDFNumber;
/**
* CTMHelper converts FOP transformation matrixis to those
* suitable for use by the PDFRender. The e and f elements
* of the matrix will be divided by 1000 as FOP uses millipoints
* as it's default user space and PDF uses points.
*
* @see org.apache.fop.area.CTM
*
* @author <a href="kevin@rocketred.com>Kevin O'Neill</a>
*/
public final class CTMHelper {
/**
* <p>Converts the sourceMatrix to a string for use in the PDFRender cm operations.</p>
* <p>For example:
* <pre>
* org.apache.fop.area.CTM ctm =
* new org.apache.fop.area.CTM(1.0, 0.0, 0.0, 1.0, 1000.0, 1000.0);
* String pdfMatrix = org.apache.fop.render.pdf.CTMHelper.toPDFString(ctm);
* </pre>
* will return the string "<code>1.0 0.0 0.0 1.0 1.0 1.0</code>".
*
* @param sourceMatrix - The matrix to convert.
*
* @return a space seperated string containing the matrix elements.
*/
public static String toPDFString(CTM sourceMatrix) {
if (null == sourceMatrix) {
throw new NullPointerException("sourceMatrix must not be null");
}
final double matrix[] = toPDFArray(sourceMatrix);
return PDFNumber.doubleOut(matrix[0], 8) + " " +
PDFNumber.doubleOut(matrix[1], 8) + " " +
PDFNumber.doubleOut(matrix[2], 8) + " " +
PDFNumber.doubleOut(matrix[3], 8) + " " +
PDFNumber.doubleOut(matrix[4], 8) + " " +
PDFNumber.doubleOut(matrix[5], 8);
}
/**
* <p>Creates a new CTM based in the sourceMatrix.</p>
* <p>For example:
* <pre>
* org.apache.fop.area.CTM inCTM =
* new org.apache.fop.area.CTM(1.0, 0.0, 0.0, 1.0, 1000.0, 1000.0);
* org.apache.fop.area.CTM outCTM =
* org.apache.fop.render.pdf.CTMHelper.toPDFCTM(ctm);
* </pre>
* will return a new CTM where a == 1.0, b == 0.0, c == 0.0, d == 1.0, e == 1.0 and f == 1.0.
*
* @param sourceMatrix - The matrix to convert.
*
* @return a new converted matrix.
*/
public static CTM toPDFCTM(CTM sourceMatrix) {
if (null == sourceMatrix) {
throw new NullPointerException("sourceMatrix must not be null");
}
final double matrix[] = toPDFArray(sourceMatrix);
return new CTM(matrix[0], matrix[1], matrix[2], matrix[3],
matrix[4], matrix[5]);
}
/**
* <p>Creates an array of six doubles from the source CTM.</p>
* <p>For example:
* <pre>
* org.apache.fop.area.CTM inCTM =
* new org.apache.fop.area.CTM(1.0, 0.0, 0.0, 1.0, 1000.0, 1000.0);
* double matrix[] = org.apache.fop.render.pdf.CTMHelper.toPDFArray(ctm);
* </pre>
* will return a new array where matrix[0] == 1.0, matrix[1] == 0.0,
* matrix[2] == 0.0, matrix[3] == 1.0,
* matrix[4] == 1.0 and matrix[5] == 1.0.
*
* @param sourceMatrix - The matrix to convert.
* @return an array of doubles containing the converted matrix.
*/
public static double[] toPDFArray(CTM sourceMatrix) {
if (null == sourceMatrix) {
throw new NullPointerException("sourceMatrix must not be null");
}
final double matrix[] = sourceMatrix.toArray();
return new double[]{matrix[0], matrix[1], matrix[2], matrix[3],
matrix[4] / 1000.0, matrix[5] / 1000.0};
}
}
|