Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pdfbox Java在中间位置绘制图像_Java_Pdfbox - Fatal编程技术网

使用pdfbox Java在中间位置绘制图像

使用pdfbox Java在中间位置绘制图像,java,pdfbox,Java,Pdfbox,我正在尝试使用pdfbox将图像添加到pdf的中心。下面是我的代码,但我无法在pdf中获得图像的正确位置。我按照下面的链接获得了正确的位置,但静止图像偏离了中点位置 import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; impo

我正在尝试使用pdfbox将图像添加到pdf的中心。下面是我的代码,但我无法在pdf中获得图像的正确位置。我按照下面的链接获得了正确的位置,但静止图像偏离了中点位置

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.util.Matrix;

public class imageAppend {
     public static void main (String[] args){

            File file = new File("...pdf file location");
            PDDocument doc = null;
            try 
            {
                doc = PDDocument.load(file);
                PDImageXObject pdImage = PDImageXObject.createFromFile("image file location", doc);

                PDPage page = doc.getPage(0);
                PDPageContentStream contentStream = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true);

               float x_pos = page.getCropBox().getWidth();
               float y_pos = page.getCropBox().getHeight();

                float x_adjusted = ( x_pos - w ) / 2;
                float y_adjusted = ( y_pos - h ) / 2;

                Matrix mt = new Matrix(1f, 0f, 0f, -1f, page.getCropBox().getLowerLeftX(), page.getCropBox().getUpperRightY());
            contentStream.transform(mt);
            contentStream.drawImage(pdImage, x_adjusted, y_adjusted, w, h);

                doc.save("new pdf file location");
                doc.close();

            } catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
}

我用我得到的测试数据重现了你的问题(不幸的是,你没有分享你的数据)

修复很简单,我删除了两行

Matrix mt = new Matrix(1f, 0f, 0f, -1f, page.getCropBox().getLowerLeftX(), page.getCropBox().getUpperRightY());
contentStream.transform(mt);
现在去

对于一般情况,还应将裁剪框左下角的坐标添加到
x\u调整后的
y\u调整后的

float x_adjusted = ( x_pos - w ) / 2 + page.getCropBox().getLowerLeftX();
float y_adjusted = ( y_pos - h ) / 2 + page.getCropBox().getLowerLeftY();

(测试方法
testImageAppendNoMirror

我用我得到的测试数据重现了你的问题(很遗憾,你没有分享你的数据)

修复很简单,我删除了两行

Matrix mt = new Matrix(1f, 0f, 0f, -1f, page.getCropBox().getLowerLeftX(), page.getCropBox().getUpperRightY());
contentStream.transform(mt);
现在去

对于一般情况,还应将裁剪框左下角的坐标添加到
x\u调整后的
y\u调整后的

float x_adjusted = ( x_pos - w ) / 2 + page.getCropBox().getLowerLeftX();
float y_adjusted = ( y_pos - h ) / 2 + page.getCropBox().getLowerLeftY();

(测试方法
testImageAppendNoMirror

乍一看,您将图像的左下角居中。hi@mkl我能够在正确的位置绘制图像,但图像是反转的。我不知道如何更正它?嗯,你的矩阵参数是从
1f,0f,0f,-1f
开始的。-1表示y坐标方向上的镜像。即使我使用1f,也不会反转图像。“反转”是指“反转颜色”?我以为你指的是倒坐标。请分享图片乍一看,你将图片的左下角居中。嗨@mkl我能够在正确的位置绘制图片,但是图片是颠倒的。我不知道如何更正它?嗯,你的矩阵参数是从
1f,0f,0f,-1f
开始的。-1表示y坐标方向上的镜像。即使我使用1f,也不会反转图像。“反转”是指“反转颜色”?我以为你指的是倒坐标。请分享图片