簡體   English   中英

通過 pdfbox 將圖像添加到 pdf 但在添加 pdf 后變為空白

[英]Adding an image to a pdf via pdfbox but after adding the pdf get blank

 import java.awt.image.BufferedImage;  
 import java.io.ByteArrayInputStream;  
 import java.io.File;  
 import java.io.IOException;  
 import java.util.Scanner;  
 import javax.imageio.ImageIO;  
 import org.apache.commons.codec.binary.Base64;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import org.apache.pdfbox.pdmodel.PDDocument; 
 import org.apache.pdfbox.pdmodel.PDPage; 
 import org.apache.pdfbox.pdmodel.PDPageContentStream; 
 import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

 public class One {
      /**  
       * @param args  
       */  
      public static void main(String[] args) throws IOException {
           // TODO Auto-generated method stub  
           Scanner s=new Scanner(System.in);  
           System.out.println("Enter base64 string to be converted to image");  
           String base64=s.nextLine();  
           byte[] base64Val=convertToImg(base64);
           writeByteToImageFile(base64Val, "image.png");
           System.out.println("Saved the base64 as image in current directory with name image.png");
           addImageToPDF();
      }
      public static byte[] convertToImg(String base64) throws IOException  
      {  
           return Base64.decodeBase64(base64);  
      }  
      public static void writeByteToImageFile(byte[] imgBytes, String imgFileName) throws IOException  
      {  
           File imgFile = new File(imgFileName);
           BufferedImage img = ImageIO.read(new ByteArrayInputStream(imgBytes));
           ImageIO.write(img, "png", imgFile);
      }
      
      public static void addImageToPDF() throws IOException {
          File file = new File("C:\\Users\\user\\Downloads\\Risk Template(RiskTemplate).pdf"); 
          PDDocument doc = PDDocument.load(file);  
          PDPage page = doc.getPage(0);
          PDImageXObject pdImage = PDImageXObject.createFromFile("D:\\Development\\Workspace\\1\\image.png", doc); 
          PDPageContentStream contents = new PDPageContentStream(doc, page);
          contents.drawImage(pdImage, 5, 5);     
          System.out.println("Image inserted");  
          contents.close();       
          doc.save("D:\\Development\\Workspace\\1\\InsertImage_OP.pdf"); 

          doc.close();
      }
 }

我正在從 base64 字符串創建圖像,然后嘗試將該圖像附加到 pdf。 圖像創建成功,圖像也被添加到 pdf(輸出)只包含角落的圖像,原始 pdf 的內容現在是空白的。

正如 MKL 和 Tilman 在他們的評論中所寫,您必須使用

PDPageContentStream(document, page, AppendMode.APPEND, true, true);

public static void addImageToPDF() throws IOException {
          File file = new File("C:\\Users\\user\\Downloads\\Risk Template(RiskTemplate).pdf"); 
          PDDocument doc = PDDocument.load(file);  
          PDPage page = doc.getPage(0);
          PDImageXObject pdImage = PDImageXObject.createFromFile("D:\\Development\\Workspace\\1\\image.png", doc); 
          PDPageContentStream contents = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true);
          contents.drawImage(pdImage, 5, 5);     
          System.out.println("Image inserted");  
          contents.close();       
          doc.save("D:\\Development\\Workspace\\1\\InsertImage_OP.pdf"); 

          doc.close();
      }

免責聲明:此答案由 MKL/Tilman 給出,但為了進一步參考,答案比評論更“可見”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM