1 回答

TA貢獻1796條經驗 獲得超7個贊
答案取決于圖片如何應用于Word文檔。如果這是通過XWPFRun.addPicture完成的,則它是文本運行中的內嵌圖片。然后運行包含一個繪圖層,其中包含一個包含圖片的內聯元素。然后,此內聯元素可能包含非可視圖形框架屬性,這些屬性可能具有將無變化方面設置為真的圖形框架鎖定。
在看起來像XML:/word/document.xml
<w:r>
<w:drawing>
<wp:inline ...>
<wp:cNvGraphicFramePr><a:graphicFrameLocks noChangeAspect="true"/></wp:cNvGraphicFramePr>
<a:graphic>
...
然后對于XWPFRun run包含圖片可以設置
run.getCTR().getDrawingArray(0).getInlineArray(0).addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoChangeAspect(true);
完整示例:
import java.io.*;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;
import java.util.List;
import java.util.ArrayList;
import java.net.URL;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
public class CreateWordPicturesInTextRuns {
public static void main(String[] args) throws Exception {
List<String> pictureURLs = new ArrayList<String>();
pictureURLs.add("https://www.eastcottvets.co.uk/uploads/Animals/gingerkitten.jpg");
pictureURLs.add("https://www.catster.com/wp-content/uploads/2017/12/A-kitten-meowing.jpg");
pictureURLs.add("https://www.animalfriends.co.uk/app/uploads/2014/08/06110347/Kitten-small.jpg");
pictureURLs.add("https://d27ucmmhxk51xv.cloudfront.net/media/english/illustration/kitten.jpg");
XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("The kitten pictures: ");
URL url;
BufferedImage image;
Dimension dim;
ByteArrayOutputStream bout;
ByteArrayInputStream bin;
for (String pictureURL : pictureURLs) {
try {
url = new URL(pictureURL);
image = ImageIO.read(url);
dim = new Dimension(image.getWidth(), image.getHeight());
double width = dim.getWidth();
double height = dim.getHeight();
double scaling = 1.0;
if (width > 72*3) scaling = (72*3)/width; //scale width not to be greater than 3 inches
bout = new ByteArrayOutputStream();
ImageIO.write(image, "jpeg", bout);
bout.flush();
bin = new ByteArrayInputStream(bout.toByteArray());
run = paragraph.createRun();
run.addPicture(bin, XWPFDocument.PICTURE_TYPE_JPEG, "kitten",
Units.toEMU(width*scaling), Units.toEMU(height*scaling));
//lock aspect ratio
run.getCTR().getDrawingArray(0).getInlineArray(0).addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoChangeAspect(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
FileOutputStream out = new FileOutputStream("CreateWordPicturesInTextRuns.docx");
document.write(out);
out.close();
document.close();
}
}
添加回答
舉報