1、引用Maven的pom.xml中引用配置
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.2-jre</version>
</dependency>
2、使用URLConnection下载多个图片到本地
import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class Utils { public static String getParam(String url, String name) { String params = url.substring(url.indexOf("?") + 1, url.length()); Map<String, String> split = Splitter.on("&").withKeyValueSeparator("=").split(params); return split.get(name); } /** * @Description: 下载多个图片 * @param picurls 多个图片地址 path 图片下载存放目录 fileNames 多个文件名称 ,不传fileNames=null则取url中参数值,此时ParamName必须传 * @return void * @throws */ public static void downloadPicture(String[] picurls,String path,String[] fileNames,String ParamName) throws IOException { try { //多个图片下载地址 for(int i=0;i<picurls.length;i++) { //根据图片地址构建URL URL url= new URL(picurls[i]); URLConnection conn = url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(10000); conn.connect(); DataInputStream dataInputStream = new DataInputStream(conn.getInputStream()); //创建目录和图片 File pathFile=new File(path); File file =null; if(fileNames!=null){ file=new File(path+File.separator+fileNames[i]); } else { file=new File(path+File.separator+ getParam(picurls[i],ParamName)); } if(!pathFile.exists()) { pathFile.mkdirs(); file.createNewFile(); } if(!file.exists()) { file.createNewFile(); } //通过流复制图片 FileOutputStream fileOutputStream = new FileOutputStream(file); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = dataInputStream.read(buffer)) > 0) { output.write(buffer, 0, length); } fileOutputStream.write(output.toByteArray()); dataInputStream.close(); fileOutputStream.close(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
3、使用IText合成多个图片到单个pdf
1) 使用IText将多个图片转成多个pdf文件
public static void imageToPDF(String path,String imagePath) { File file = new File(path); Document document = new Document(); try { PdfWriter.getInstance(document, new FileOutputStream(file)); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (DocumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } document.open(); document.newPage(); Image image = null; try { try { image = Image.getInstance(imagePath); } catch (BadElementException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } image.setAbsolutePosition(0, 0); image.setBorderWidth(0); image.scaleAbsolute(PageSize.A4); try { document.add(image); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } document.close(); }
2) 使用IText将多个pdf合成到一个pdf文件
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.lowagie.text.Document; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfImportedPage; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfWriter; public class MergePDF { public static void main(String[] args) { try { List<InputStream> pdfs = new ArrayList<InputStream>(); pdfs.add(new FileInputStream("c:\\1.pdf")); pdfs.add(new FileInputStream("c:\\2.pdf")); OutputStream output = new FileOutputStream("c:\\merge.pdf"); MergePDF.concatPDFs(pdfs, output, true); } catch (Exception e) { e.printStackTrace(); } } public static void concatPDFs(List<InputStream> streamOfPDFFiles, OutputStream outputStream, boolean paginate) { Document document = new Document(); try { List<InputStream> pdfs = streamOfPDFFiles; List<PdfReader> readers = new ArrayList<PdfReader>(); int totalPages = 0; Iterator<InputStream> iteratorPDFs = pdfs.iterator(); // Create Readers for the pdfs. while (iteratorPDFs.hasNext()) { InputStream pdf = iteratorPDFs.next(); PdfReader pdfReader = new PdfReader(pdf); readers.add(pdfReader); totalPages += pdfReader.getNumberOfPages(); } // Create a writer for the outputstream PdfWriter writer = PdfWriter.getInstance(document, outputStream); document.open(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); PdfContentByte cb = writer.getDirectContent(); // Holds the PDF // data PdfImportedPage page; int currentPageNumber = 0; int pageOfCurrentReaderPDF = 0; Iterator<PdfReader> iteratorPDFReader = readers.iterator(); // Loop through the PDF files and add to the output. while (iteratorPDFReader.hasNext()) { PdfReader pdfReader = iteratorPDFReader.next(); // Create a new page in the target for each source page. while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) { document.newPage(); pageOfCurrentReaderPDF++; currentPageNumber++; page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF); cb.addTemplate(page, 0, 0); // Code for pagination. if (paginate) { cb.beginText(); cb.setFontAndSize(bf, 9); cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "" + currentPageNumber + " of " + totalPages, 520, 5, 0); cb.endText(); } } pageOfCurrentReaderPDF = 0; } outputStream.flush(); document.close(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (document.isOpen()) document.close(); try { if (outputStream != null) outputStream.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } } }
相关文档:iText PDF Java API 入门介绍教程