1,向PDF中加入图片:
首先导入pdfbox的jar包:
fontbox-1.8.13.jar
jempbox-1.8.13.jar
pdfbox-1.8.13.jar
pdfbox-app-1.8.13.jar
preflight-1.8.13.jar
preflight-app-1.8.13.jar
xmpbox-1.8.13.jar
不多说上代码:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
public class TpdfBox {
public static void main(String[] args){
String inputFile="D:/2018.pdf";
String image="D:/8.jpg";
String outputFile="D:/test.pdf";
try {
createPDFFromImage(inputFile,image,outputFile);
} catch (COSVisitorException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("error");
e.printStackTrace();
}
}
public static void createPDFFromImage( String inputFile, String image, String outputFile )
throws IOException, COSVisitorException
{
// the document
PDDocument doc = null;
try
{
doc = PDDocument.load(inputFile);
//我们将图片放在第一页,当然我们也可以指定坐标,下面例子就是指定坐标
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get( 0 );
//PDPage page = (PDPage)doc.getDocumentCatalog().
PDXObjectImage ximage = null;
if( image.toLowerCase().endsWith(".jpg") )
{
FileInputStream is = new FileInputStream(image);
ximage = new PDJpeg(doc,is);
is.close();
}else{
/*else if (image.toLowerCase().endsWith(".tif") || image.toLowerCase().endsWith(".tiff"))
{
new RandomAccessFile(new File(image));
ximage = new PDCcitt;
}*/
BufferedImage awtImage = ImageIO.read( new File( image ) );
ximage = new PDPixelMap(doc, awtImage);
}
PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true);
//contentStream.drawImage(ximage, 20, 20 );
float scale = 0.5f; // reduce this value if the image is too large
System.out.println(ximage.getHeight());
System.out.println(ximage.getWidth());
contentStream.drawXObject(ximage, 20, 200, ximage.getWidth()*scale, ximage.getHeight()*scale);
contentStream.close();
doc.save( outputFile );
}
finally
{
if( doc != null )
{
doc.close();
}
}
}
2.指定坐标放入图片:
public void createPDFFromImage(String pdfFile,
List<String> imgList,int x, int y, float scale) throws IOException, COSVisitorException {
// the document
PDDocument doc = null;
try {
doc = new PDDocument();
Iterator iter = imgList.iterator();
int imgIndex=0;
while(iter.hasNext()) {
PDPage page = new PDPage();
doc.addPage(page);
BufferedImage tmp_image = ImageIO.read(new File(iter.next().toString()));
BufferedImage image = new BufferedImage(tmp_image.getWidth(), tmp_image.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
image.createGraphics().drawRenderedImage(tmp_image, null);
PDXObjectImage ximage = new PDPixelMap(doc, image);
imgIndex++;
PDPageContentStream contentStream = new PDPageContentStream(
doc, page,true,true);
contentStream.drawXObject(ximage, x, y, ximage.getWidth()*scale, ximage.getHeight()*scale);
contentStream.close();
}
doc.save(pdfFile);
} finally {
if (doc != null) {
doc.close();
}
}
}
3..将PDF转换成图片:
public static void main(String[] args) throws IOException {
PDDocument doc = PDDocument.load("D:/2018.pdf");
int pageCount = doc.getNumberOfPages();
System.out.println(pageCount);
List pages = doc.getDocumentCatalog().getAllPages();
for(int i=0;i<pages.size();i++){
PDPage page = (PDPage)pages.get(i);
BufferedImage image = page.convertToImage();
Iterator iter = ImageIO.getImageWritersBySuffix("jpg");
ImageWriter writer = (ImageWriter)iter.next();
File outFile = new File("D:/"+i+".jpg");
FileOutputStream out = new FileOutputStream(outFile);
ImageOutputStream outImage = ImageIO.createImageOutputStream(out);
writer.setOutput(outImage);
writer.write(new IIOImage(image,null,null));
}
doc.close();
System.out.println("over");
}
}