import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.tf.fcgl.businessmng.uploadimg.UploadImgController;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
public class Convert2Pdf {
private static final Log log = LogFactory.getLog(UploadImgController.class);
public static byte[] convert(List<String> listUrls) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
//Document document = new Document(PageSize.A4, 20, 20, 20, 20);
Document document = new Document();
//设置文档页边距
document.setMargins(0,0,0,0);
//FileOutputStream fos = null;
try {
//fos = new FileOutputStream(target);
PdfWriter.getInstance(document, out);
//打开文档
document.open();
Image image;
for(int i=0;i<listUrls.size();i++) {
URL url = new URL(listUrls.get(i));
//获取图片字节
HttpURLConnection conn =(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
byte[] btImg = readInputStream(inStream);//得到图片的二进制数据
if(btImg.length==0) {
continue;
}
//获取图片的宽高
image= Image.getInstance(btImg);
float imageHeight=image.getScaledHeight();
float imageWidth=image.getScaledWidth();
//log.info(imageHeight+"wid"+imageWidth);
//计算 缩小比例
float xRatio=1; //宽比例
float yRatio=1; //高比例
float right = PageSize.A4.getRight(); //595
float top = PageSize.A4.getTop(); //842
//System.out.println( PageSize.A4.getLeft()+" "+PageSize.A4.getRight()+""+PageSize.A4.getTop());
if(imageWidth>right) {
xRatio=right/imageWidth;
}
if(imageHeight>top) {
yRatio=top/imageHeight;
}
float xyRatio=xRatio>yRatio?yRatio:xRatio;
image.scaleAbsolute(imageWidth*xyRatio, imageHeight*xyRatio);
//设置页面宽高与图片一致 画布
Rectangle rectangle = new Rectangle(imageWidth*xyRatio, imageHeight*xyRatio);
//595.0F, 842.0F Rectangle a4 = PageSize.A4;
//document.setPageSize(PageSize.A4);
document.setPageSize(rectangle);
//图片居中
image.setAlignment(Image.ALIGN_CENTER);
//新建一页添加图片
document.newPage();
document.add(image);
}
} catch (Exception ioe) {
log.info("失败图片"+ioe.getMessage());
throw ioe;
} finally {
//关闭文档
out.close();
document.close();
}
return out.toByteArray();
}
public static byte[] readInputStream(InputStream inStream) throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
/**
* 合并多个pdf
*
* @param os 合并的pdf输出目标流
* @param files 需要被合并的多个pdf列表
*/
public static void mergePdf(ByteArrayOutputStream os, List<byte[]> files) {
Document document = null;
try {
// 获取纸张大小并实例化一个新的空文档, 例如 A5 纸
document = new Document(new PdfReader(files.get(0)).getPageSize(1));
// 实例化复制工具
final PdfCopy copy = new PdfCopy(document, os);
// 打开文档准备写入内容
document.open();
// 循环所有pdf文件
for (byte[] file : files) {
// 读取pdf
final PdfReader reader = new PdfReader(file);
// 获取页数
final int numberOfPages = reader.getNumberOfPages();
// pdf的所有页, 从第1页开始遍历, 这里要注意不是0
for (int i = 1; i <= numberOfPages; i++) {
document.newPage();
// 把第 i 页读取出来
final PdfImportedPage page = copy.getImportedPage(reader, i);
// 把读取出来的页追加进输出文件里
copy.addPage(page);
}
}
} catch (IOException | DocumentException e) {
throw new RuntimeException(e);
} finally {
if (document != null) {
document.close();
}
}
}
public static void main(String[] args) {
//convert(source, target);
}
}