使用itextpdf处理pdf文件


package tflv.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JLabel;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

public class PdfTest {

	public static void main(String[] args) throws FileNotFoundException, DocumentException, IOException {
//		Document document = new Document(PageSize.A4);
        File file = new File("C:\\Users\\tflv\\Downloads\\附件1:合同单-demo.pdf");
//        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
//        document.open();
//        PdfContentByte cb = writer.getDirectContent();
//        writer.setPageEvent(new MyHeaderFooter());// 页眉/页脚
 
// Load existing PDF
        File file2 = new File("C:\\Users\\tflv\\Downloads\\附件1:合同单.pdf");
        PdfReader reader = new PdfReader(new FileInputStream(file2));
//        PdfImportedPage page = writer.getImportedPage(reader, 1);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(file));
//        PdfWriter writer = stamper.getWriter();
        onEndPage(stamper);
        shiying(reader, stamper);
        stamper.close();
        reader.close();
// Copy first page of existing PDF into output PDF
//        document.newPage();
//        cb.addTemplate(page, 0, 0);
        
//        document.close();
	}

	public static void onEndPage(PdfStamper writer) throws DocumentException, IOException {
		Font hfFont = new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 8, Font.NORMAL);
	        PdfPTable table = new PdfPTable(1);
	        try {
	            table.setTotalWidth(PageSize.A4.getWidth() - 100);
//	            table.setWidths(new int[] { 24, 24, 3});
	            table.setLockedWidth(true);
	            table.getDefaultCell().setFixedHeight(-10);
	            table.getDefaultCell().setBorder(0);
	            table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
	            table.addCell(new Paragraph("我是页眉/页脚", hfFont));// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
	            
	            // 将页眉写到document中,位置可以指定,指定到下面就是页脚
	            table.writeSelectedRows(0, -1, 50, PageSize.A4.getHeight() - 20, writer.getOverContent(1));
	        } catch (Exception de) {
	            throw new ExceptionConverter(de);
	        }

    }
	
	public static void shiying(PdfReader reader, PdfStamper stamper) throws DocumentException, IOException {
		BaseFont hfFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
		PdfGState gs = new PdfGState();
        //改透明度
        gs.setFillOpacity(0.5f);
        gs.setStrokeOpacity(0.4f);
        int total = reader.getNumberOfPages() + 1;

        PdfContentByte under;
        // 添加一个水印
        for (int i = 1; i < total; i++) {
            // 在内容上方加水印
            under = stamper.getOverContent(i);
            //在内容下方加水印
            //under = stamper.getUnderContent(i);
            gs.setFillOpacity(0.5f);
            under.setGState(gs);
            under.beginText();
            //改变颜色
            under.setColorFill(BaseColor.LIGHT_GRAY);
            //改水印文字大小
            under.setFontAndSize(hfFont, 150);
            under.setTextMatrix(70, 200);
            //后3个参数,x坐标,y坐标,角度
            under.showTextAligned(Element.ALIGN_CENTER, "科源程序", 300, 350, 55);

            under.endText();
        }
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 itextpdf 合并图片生成 pdf 文件的步骤如下: 1. 导入 itextpdf 的 jar 包 2. 创建一个 Document 对象 3. 创建一个 PdfWriter 对象, 并将其与 Document 对象关联 4. 打开 Document 对象 5. 循环添加图片到 Document 对象中 6. 关闭 Document 对象 以下是一个示例代码: ```java import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.pdf.PdfWriter; public class ImageToPdf { public static void main(String[] args) { // 创建一个 Document 对象 Document document = new Document(); try { // 创建一个 PdfWriter 对象, 并将其与 Document 对象关联 PdfWriter.getInstance(document, new FileOutputStream("images.pdf")); // 打开 Document 对象 document.open(); // 循环添加图片到 Document 对象中 for (int i = 1; i <= 3; i++) { // 创建图片对象 Image image = Image.getInstance("image" + i + ".jpg"); // 将图片添加到 Document 对象中 document.add(image); } } catch (DocumentException | IOException e) { e.printStackTrace(); } finally { // 关闭 Document 对象 document.close(); } } } ``` ### 回答2: 使用itextpdf库合并多个图片生成pdf文件的步骤如下: 1. 导入itextpdf库:下载itextpdf库并将其添加到项目的类路径中。 2. 创建PdfDocument对象:使用PdfWriter类创建一个PdfDocument对象,这将用于保存和管理pdf文件。 3. 打开文档:使用PdfDocument对象的open方法打开文档,指定输出的文件路径。 4. 创建Document对象:创建一个Document对象,它是iText库中用于处理PDF文件中内容的主要类。 5. 逐个添加图片:使用Image类加载每个要合并的图片文件,并使用Document对象的add方法将其添加到文档中。 6. 关闭文档:使用PdfDocument对象的close方法关闭文档,确保将所有内容保存到pdf文件中。 下面是一个示例代码片段: ```java import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Image; import java.io.File; import java.io.IOException; public class ImageToPdfConverter { public static void convertToPdf(String[] imagePaths, String pdfPath) throws IOException { PdfWriter writer = new PdfWriter(pdfPath); PdfDocument pdfDocument = new PdfDocument(writer); Document document = new Document(pdfDocument); for (String imagePath : imagePaths) { Image image = new Image(ImageDataFactory.create(imagePath)); document.add(image); } document.close(); pdfDocument.close(); } public static void main(String[] args) throws IOException { String[] imagePaths = {"image1.jpg", "image2.jpg", "image3.jpg"}; String pdfPath = "output.pdf"; convertToPdf(imagePaths, pdfPath); } } ``` 在上述示例中,首先创建了PdfWriter和PdfDocument对象,然后创建了一个Document对象。接下来,使用Image类加载要合并的每个图片文件,并使用Document对象的add方法将其添加到文档中,然后关闭文档和PdfDocument对象,确保将内容保存到pdf文件中。最后,调用convertToPdf方法,传入图片文件路径数组和输出的pdf文件路径即可生成pdf文件。 ### 回答3: 使用iTextPDF库可以很方便地合并图片生成PDF文件。下面是使用iTextPDF合并图片生成PDF文件的步骤: 1.创建一个Document对象。用于存放合并后的PDF文件内容。 2.创建一个PdfWriter对象,并将Document对象与PdfWriter对象关联。 3.打开Document对象,可以使用document.open()方法。 4.创建一个Image对象,用于表示要合并的图片。 5.将Image对象添加到Document对象中,可以使用document.add()方法。 6.循环以上步骤,将需要合并的所有图片都添加到Document对象中。 7.关闭Document对象,可以使用document.close()方法。 8.保存合并后的PDF文件,可以使用PdfWriter对象的close()方法。 下面是一个使用iTextPDF合并图片生成PDF文件的例子: ```java import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileOutputStream; import java.io.IOException; public class ImageToPdf { public static void main(String[] args) { String[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg" }; String outputPath = "output.pdf"; try { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(outputPath)); document.open(); for (String imagePath : imagePaths) { Image image = Image.getInstance(imagePath); document.add(image); } document.close(); System.out.println("PDF file created successfully."); } catch (IOException | DocumentException e) { e.printStackTrace(); } } } ``` 在上面的例子中,我们创建了一个Document对象,并将其与PdfWriter对象关联。然后,我们循环遍历需要合并的图片路径,创建Image对象,并将其添加到Document对象中。最后,我们关闭Document对象,并保存合并后的PDF文件。 需要注意的是,需要将iTextPDF库添加到项目的依赖中才能使用该库。在本例中,我们使用com.itextpdf.textcom.itextpdf.text.pdf包中的类和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值