org.apache.fop.render.pdf.CTMHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.fop Show documentation
Show all versions of org.apache.fop Show documentation
The core maven build properties
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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: CTMHelper.java 985537 2010-08-14 17:17:00Z jeremias $ */
package org.apache.fop.render.pdf;
import java.awt.geom.AffineTransform;
import org.apache.fop.area.CTM;
import org.apache.fop.pdf.PDFNumber;
/**
* CTMHelper converts FOP transformation matrices to those
* suitable for use by the PDFRenderer. 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
*/
public final class CTMHelper {
private CTMHelper() {
}
/**
* Converts the sourceMatrix to a string for use in the PDFRenderer cm operations.
* For example:
*
* 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);
*
* will return the string "1.0 0.0 0.0 1.0 1.0 1.0
".
*
* @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 constructPDFArray(matrix);
}
/**
* Converts the AffineTransform instance to a string for use in the PDFRenderer
* cm operations.
*
* @param transform The matrix to convert.
* @param convertMillipoints Indicates that the matrix needs to be converted from millipoints
* to points.
* @return a space seperated string containing the matrix elements.
*/
public static String toPDFString(AffineTransform transform, boolean convertMillipoints) {
if (null == transform) {
throw new NullPointerException("transform must not be null");
}
final double[] matrix = new double[6];
transform.getMatrix(matrix);
if (convertMillipoints) {
//Convert from millipoints to points
matrix[4] /= 1000;
matrix[5] /= 1000;
}
return constructPDFArray(matrix);
}
private static String constructPDFArray(double[] matrix) {
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);
}
/**
* Creates a new CTM based in the sourceMatrix.
* For example:
*
* 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);
*
* 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]);
}
/**
* Creates an array of six doubles from the source CTM.
* For example:
*
* 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);
*
* 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};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy