1. 程式人生 > 程式設計 >Java pdf和jpg互轉案例

Java pdf和jpg互轉案例

pdfbox: jpg轉pdf:

/**
   * 使用pdfbox將jpg轉成pdf
   * @param jpgStream jpg輸入流
   * @param pdfPath pdf檔案儲存路徑
   * @throws IOException IOException
   */
  public static void jpgToPdf(InputStream jpgStream,String pdfPath) throws IOException {

    PDDocument pdDocument = new PDDocument();
    BufferedImage image = ImageIO.read(jpgStream);

    PDPage pdPage = new PDPage(new PDRectangle(image.getWidth(),image.getHeight()));
    pdDocument.addPage(pdPage);
    PDImageXObject pdImageXObject = LosslessFactory.createFromImage(pdDocument,image);
    PDPageContentStream contentStream = new PDPageContentStream(pdDocument,pdPage);
    contentStream.drawImage(pdImageXObject,image.getWidth(),image.getHeight());
    contentStream.close();
    pdDocument.save(pdfPath);
    pdDocument.close();
  }

pdfbox: pdf轉jpg:

static void pdfbox() throws IOException {
    long start = System.currentTimeMillis();
    //pdf路徑
    URL url = new URL("file:///D:/1.pdf");
    InputStream stream = URLUtil.getStream(url);
    // 載入解析PDF檔案
    PDDocument doc = PDDocument.load(stream);
    PDFRenderer pdfRenderer = new PDFRenderer(doc);
    PDPageTree pages = doc.getPages();
    int pageCount = pages.getCount();
    for (int i = 0; i < pageCount; i++) {
      BufferedImage bim = pdfRenderer.renderImageWithDPI(i,200);
      ByteArrayOutputStream os = new ByteArrayOutputStream();
      ImageIO.write(bim,"jpg",os);
      byte[] datas = os.toByteArray();
//      InputStream is = new ByteArrayInputStream(datas);
      //jpg檔案轉出路徑
      FileUtil.writeBytes(datas,new File("d:/jpg/" + i + ".jpg"));
    }
    long end = System.currentTimeMillis();
    long time = (end - start) / 1000;
    System.out.println(StrUtil.format("pdf轉jpg耗時: {}s",time));
  }

icepdf: pdf轉jpg

Document document = new Document();
document.setUrl(new URL(pdfUrl));
int pageNum = document.getNumberOfPages();
for (int i = 0; i < pageNum; i++) {
  // 目前僅支援1對1的pdf->jpg
  if (i != 0) {
    continue;
  }
  // 3、pdf -> jpg
  BufferedImage bim = (BufferedImage) document.getPageImage(i,GraphicsRenderingHints.SCREEN,Page.BOUNDARY_CROPBOX,rotation,scale);
  os = new ByteArrayOutputStream();
  ImageIO.write(bim,os);
  // 4、jpg -> fdfs
  byte[] datas = os.toByteArray();
  InputStream is = new ByteArrayInputStream(datas);

補充知識:Java實現對png圖片檔案電子簽名操作

我就廢話不多說了,大家還是直接看程式碼吧~

/**
 * 根據圖片畫素位置新增使用者電子簽名
 * @param imagePath   要操作的圖片路徑
 * @param signImagePath 電子簽名圖片路徑
 * @param outImagePath 合成後輸出圖片路徑
 * @param width 畫素位寬度
 * @param height 畫素位高度
 */
public static void syntheticPicture(String imagePath,String signImagePath,Integer width,Integer height,String outImagePath ) {
  try {
    BufferedImage big = ImageIO.read(new File(imagePath));
    BufferedImage small = ImageIO.read(new File(signImagePath));
    Graphics2D g = big.createGraphics();
    //根據圖片畫素位置貼上帶電子簽名
    g.drawImage(small,width,height,small.getWidth(),small.getHeight(),null);
    g.dispose();
    ImageIO.write(big,outImagePath .split("\\.")[1],new File(outImagePath ));
  } catch (Exception e) {
    throw new RuntimeException(e);
  }
}

以上這篇Java pdf和jpg互轉案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。