Вставить картинку в текстовый документ

Это первый раз, когда я работаю над POI Apache, и вопрос, который я собираюсь задать, был задан уже на этом сайте, но ясный ответ им не дал, поэтому у меня нет выбора, кроме как взять всю вашу помощь.

Я пытаюсь написать java-программу, которая берет изображения из одной папки и вставляет это изображение в текстовый документ. Я использую Apache POI для этой программы. Здесь я отправляю свой код.

import java.io.*; import java.util.*; import org.apache.poi.util.IOUtils; import org.apache.poi.xwpf.usermodel.*; public class ImagesDoc { public static void main(String[] args) throws IOException { XWPFDocument docx = new XWPFDocument(); XWPFParagraph par = docx.createParagraph(); XWPFRun run = par.createRun(); run.setText("Hello, World. This is my first java generated docx-file. Have fun."); run.setFontSize(13); InputStream pic = new FileInputStream("C:\\Users\\amitabh\\Pictures\\pics\\pool.jpg"); byte [] picbytes = IOUtils.toByteArray(pic); docx.addPicture(picbytes, Document.PICTURE_TYPE_JPEG); FileOutputStream out = new FileOutputStream("C:\\Users\\amitabh\\Pictures\\pics\\simple1.docx"); docx.write(out); out.close(); pic.close(); } } 

Я могу создать файл документа слова, и я также могу вставить текст, но docx.addPicture(picbytes, Document.PICTURE_TYPE_JPEG); строка дает мне ошибку, как «добавить литье в docx». Я добавил все возможные банки для этой программы. Для этой ошибки я искал по всей сети и обнаружил, что у многих людей есть аналогичная проблема. «addPicture» для справки XWPFDocument не работает. Пожалуйста, помогите мне решить эту проблему.

Во-первых, я хотел бы указать пример, представленный apache poi- Link , то есть правильный способ сделать это будет

 doc.createParagraph().createRun().addPicture(new FileInputStream(imgFile), format, imgFile, Units.toEMU(200), Units.toEMU(200)); 

Тем не менее, все еще существует ошибка, которая делает файл .docx нечитаемым после выполнения вышеуказанного оператора. Это может быть разрешено в ближайшее время, и в этом случае вышеупомянутое заявление будет работать. Тем временем, есть обход.

Сначала создайте файл docx без каких-либо изображений. Затем добавьте этот class CustomXWPFDocument в свой пакет.

 import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlToken; import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; import java.io.IOException; import java.io.InputStream; public class CustomXWPFDocument extends XWPFDocument { public CustomXWPFDocument(InputStream in) throws IOException { super(in); } public void createPicture(String blipId,int id, int width, int height) { final int EMU = 9525; width *= EMU; height *= EMU; //String blipId = getAllPictures().get(id).getPackageRelationship().getId(); CTInline inline = createParagraph().createRun().getCTR().addNewDrawing().addNewInline(); String picXml = "" + "" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + ""; //CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch(XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); //graphicData.set(xmlToken); inline.setDistT(0); inline.setDistB(0); inline.setDistL(0); inline.setDistR(0); CTPositiveSize2D extent = inline.addNewExtent(); extent.setCx(width); extent.setCy(height); CTNonVisualDrawingProps docPr = inline.addNewDocPr(); docPr.setId(id); docPr.setName("Picture " + id); docPr.setDescr("Generated"); } } 

Затем создайте обновленный документ, добавив свои фотографии следующим образом:

 CustomXWPFDocument document = new CustomXWPFDocument(new FileInputStream(new File("C:\\Users\\Avarice\\Desktop\\doc1.docx"))); FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\Avarice\\Desktop\\doc2.docx")); String id = document.addPictureData(new FileInputStream(new File("C:\\Users\\Avarice\\Desktop\\thumbnail.jpg")), Document.PICTURE_TYPE_JPEG); document.createPicture(id,document.getNextPicNameNumber(Document.PICTURE_TYPE_JPEG), 64, 64); document.write(fos); fos.flush(); fos.close(); 

В вашем пути сборки также должны быть следующие банки: –

пои-OOXML-схемы

XMLBeans

dom4j

  I have used poi 3.10 to generate word doc and to insert a picture. you need 2 classes.. here is the example import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.poi.xwpf.usermodel.Document; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.UnderlinePatterns; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFHeader; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.xmlbeans.XmlException; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; public class ImageAttachmentInDocument { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy"); Calendar cal = Calendar.getInstance(); String date = dateFormat.format(cal.getTime()); // Create a document file CustomXWPFDocument document = new CustomXWPFDocument(); // Adding a file try { // Working addPicture Code below... XWPFParagraph paragraphX = document.createParagraph(); paragraphX.setAlignment(ParagraphAlignment.CENTER); String blipId = paragraphX.getDocument().addPictureData( new FileInputStream(new File("D://c2//WLB.jpg")), Document.PICTURE_TYPE_JPEG); System.out.println("4" + blipId); System.out.println(document .getNextPicNameNumber(Document.PICTURE_TYPE_JPEG)); document.createPicture(blipId, document.getNextPicNameNumber(Document.PICTURE_TYPE_JPEG), 200, 75); System.out.println("5"); } catch (InvalidFormatException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // insert doc details // Createa a para -1 XWPFParagraph paragraphOne = document.createParagraph(); paragraphOne.setAlignment(ParagraphAlignment.CENTER); XWPFRun paragraphOneRunOne = paragraphOne.createRun(); paragraphOneRunOne.setBold(true); paragraphOneRunOne.setFontSize(20); paragraphOneRunOne.setFontFamily("Verdana"); paragraphOneRunOne.setColor("000070"); paragraphOneRunOne.setText("Daily Status Report"); // Createa a para -2 XWPFParagraph paragraphTwo = document.createParagraph(); paragraphTwo.setAlignment(ParagraphAlignment.CENTER); XWPFRun paragraphTwoRunOne = paragraphTwo.createRun(); paragraphTwoRunOne.setFontSize(12); paragraphTwoRunOne.setFontFamily("Verdana"); paragraphTwoRunOne.setColor("000070"); paragraphTwoRunOne.setText(date); paragraphTwoRunOne.addBreak(); // Createa a para -3 XWPFParagraph paragraphThree = document.createParagraph(); paragraphThree.setAlignment(ParagraphAlignment.LEFT); XWPFRun paragraphThreeRunOne = paragraphThree.createRun(); paragraphThreeRunOne.setFontSize(14); paragraphThreeRunOne.setFontFamily("Verdana"); paragraphThreeRunOne.setColor("000070"); paragraphThreeRunOne.setText("5.30 AM PST"); paragraphThreeRunOne.addBreak(); // Createa a para -4 XWPFParagraph paragraphFour = document.createParagraph(); paragraphFour.setAlignment(ParagraphAlignment.LEFT); XWPFRun paragraphFourRunOne = paragraphFour.createRun(); paragraphFourRunOne.setBold(true); paragraphFourRunOne.setUnderline(UnderlinePatterns.SINGLE); paragraphFourRunOne.setFontSize(10); paragraphFourRunOne.setFontFamily("Verdana"); paragraphFourRunOne.setColor("000070"); paragraphFourRunOne.setText("ABCD"); // insert doc details end XWPFParagraph paragraphFive = document.createParagraph(); paragraphFive.setAlignment(ParagraphAlignment.RIGHT); XWPFRun paragraphFiveRunOne = paragraphFive.createRun(); paragraphFiveRunOne.addBreak(); paragraphFourRunOne.setBold(true); paragraphFourRunOne.setUnderline(UnderlinePatterns.SINGLE); paragraphFourRunOne.setFontSize(10); paragraphFourRunOne.setFontFamily("Verdana"); paragraphFourRunOne.setColor("000070"); paragraphFourRunOne.setText("ABCD00000000000"); FileOutputStream outStream = null; try { double x = Math.random(); String fileName = "D:\\c2\\" + String.valueOf(x) + ".docx"; outStream = new FileOutputStream(fileName); } catch (FileNotFoundException e) { System.out.println("First Catch"); e.printStackTrace(); } try { document.write(outStream); outStream.close(); } catch (FileNotFoundException e) { System.out.println("Second Catch"); e.printStackTrace(); } catch (IOException e) { System.out.println("Third Catch"); e.printStackTrace(); } } } import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlToken; import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; import java.io.IOException; import java.io.InputStream; public class CustomXWPFDocument extends XWPFDocument { public CustomXWPFDocument() { super(); } public CustomXWPFDocument(InputStream in) throws IOException { super(in); } public void createPicture(String blipId,int id, int width, int height) { final int EMU = 9525; width *= EMU; height *= EMU; //String blipId = getAllPictures().get(id).getPackageRelationship().getId(); CTInline inline = createParagraph().createRun().getCTR().addNewDrawing().addNewInline(); String picXml = "" + "" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + ""; //CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch(XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); //graphicData.set(xmlToken); inline.setDistT(0); inline.setDistB(0); inline.setDistL(0); inline.setDistR(0); CTPositiveSize2D extent = inline.addNewExtent(); extent.setCx(width); extent.setCy(height); CTNonVisualDrawingProps docPr = inline.addNewDocPr(); docPr.setId(id); docPr.setName("Picture " + id); docPr.setDescr("Generated"); } } 
  • Что такое SuppressWarnings («unchecked») в Java?
  • Возьмите входной сигнал Char от сканера
  • Сообщения журнала коллекции мусора Java
  • Проверьте, содержит ли один список элемент из другого
  • Как установить системное время в Java?
  • Как заменить непечатаемые символы Unicode на Java?
  • Индикатор выполнения командной строки в Java
  • Как я могу поместить ось в .png-файл в java?
  • Найти драйвер Oracle JDBC в репозитории Maven
  • Как вы эффективно справляетесь с моментальными снимками maven-3?
  • Прокрутка страницы вверх или вниз в Selenium WebDriver (Selenium 2) с использованием java
  • Давайте будем гением компьютера.