我的目标是在一个空白的PDF文件(DIN A4)上绘制一张上传的图片,但我不知道它的尺寸。对于横向图片,我有一个带有一个水平空白页面的PDF文件;对于纵向图片,我有一个带有一个垂直页面的PDF文件。
以下是我的代码:
对于竖直的图片,一切正常(我更希望图片居中显示,但这是下一步)。问题出在水平的图片上:我的上传的水平图片没有填满整个水平pdf页面,而是得到了一个水平的pdf页面,我的图片在左边被旋转了90度向右,并从上到下适合(缩放可以工作,但不是我所希望的方式): 我的愿望是正确地插入上传的水平或垂直图片,而不需要旋转到预定的PDF页面。
以下是我的代码:
File image = convertMultipartFileToFile(file); //I get a MultipartFile from my RequestParam (Spring) - converting works fine
BufferedImage awtImage = ImageIO.read(image);
String path = "";
if (awtImage.getWidth() > awtImage.getHeight()) {
path = MyController.class.getResource("/pdf4ImageUploadHorizontal.pdf").getPath();
} else {
path = MyController.class.getResource("/pdf4ImageUploadVertical.pdf").getPath();
}
pdf = new File(path);
PDDocument doc = PDDocument.load(pdf);
PDPage page = doc.getPage(0);
int actualPDFWidth = 0;
int actualPDFHeight = 0;
if (awtImage.getWidth() > awtImage.getHeight()) {
actualPDFWidth = (int) PDRectangle.A4.getHeight();
actualPDFHeight = (int) PDRectangle.A4.getWidth();
} else {
actualPDFWidth = (int) PDRectangle.A4.getWidth();
actualPDFHeight = (int) PDRectangle.A4.getHeight();
}
// Add image to page
PDImageXObject pdImage = PDImageXObject.createFromFileByContent(image, doc);
Dimension scaledDim = getScaledDimension(new Dimension(pdImage.getWidth(), pdImage.getHeight()), new Dimension(actualPDFWidth, actualPDFHeight)); // I'm using this function: https://dev59.com/F2Ag5IYBdhLWcg3wwdPA
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.drawImage(pdImage, 0, 0, scaledDim.width, scaledDim.height);
contentStream.close();
doc.save("c:\\xyz\\pdf.pdf");
对于竖直的图片,一切正常(我更希望图片居中显示,但这是下一步)。问题出在水平的图片上:我的上传的水平图片没有填满整个水平pdf页面,而是得到了一个水平的pdf页面,我的图片在左边被旋转了90度向右,并从上到下适合(缩放可以工作,但不是我所希望的方式): 我的愿望是正确地插入上传的水平或垂直图片,而不需要旋转到预定的PDF页面。
getScaledDimension
是做什么用的? - TuGordoBello