JAVA-pdfbox增加图片标题,增加尾部图片、增加页码

文章描述了一段Java代码,用于在PDF文件的左上角添加Logo,在右下角插入签名,并在每页添加页码。作者提到需要调整坐标以适应PDF内容。
摘要由CSDN通过智能技术生成

需求:给原有pdf左上角加 logo,右下角加签名,每页都显示,且不得覆盖原pdf内容,并增加页码

代码:
@Test
public void updatePdfAccount() {
   
    String sourceDir = "D:\\account\\go\\pdfAccount\\newPdf"; // 修改前的 pdf账单文件夹
    String targetDir = "D:\\account\\go\\pdfAccount\\test\\";// 修改后的 pdf账单
    File dir = new File(sourceDir);
    File[] files = dir.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.toLowerCase().endsWith(".pdf") || name.toLowerCase().endsWith(".pdf");
        }
    });
    String headImage = "D:\\account\\international_head.jpg";//头部图片
    String footImage = "D:\\account\\1.jpg";  //尾部图片
    for (File f : files) {
        try {
            FileInputStream pdfInputStream = new FileInputStream(f.getPath());
            PDDocument pdDocument = PDDocument.load(pdfInputStream);
           int count=  pdDocument.getNumberOfPages();
            PDFont font = PDType1Font.HELVETICA_BOLD;
            for (int i = 0; i < count; i++) {
                PDPage page = pdDocument.getPage(i);
                PDImageXObject image = PDImageXObject.createFromFile(headImage, pdDocument);
                //放头部图片
                PDPageContentStream pageStream = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.APPEND, false, false);
                // pageStream对象绘制图片位置及大小,已PDF文件右下角为原点(x,y)是图片左下角左边,width、height是图片的长和宽
                pageStream.drawImage(image, 20, 15, 120, 50);
                pageStream.close();
                //放尾部图片
                PDImageXObject image2 = PDImageXObject.createFromFile(footImage, pdDocument);
                PDPageContentStream pageStream2 = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.PREPEND, false, false);
                //pageStream对象绘制图片位置及大小,已PDF文件右下角为原点(x,y)是图片左下角左边,width、height是图片的长和宽
                pageStream2.drawImage(image2, 520, 50, 200, 60);
                pageStream2.close();
                //增加页码
                PDPageContentStream pageStream3 = new PDPageContentStream(pdDocument, page, PDPageContentStream.AppendMode.PREPEND, false, false);
                pageStream3.setFont(font, 9);  //调整字体
                PDRectangle mediaBox = page.getMediaBox();
                float x = mediaBox.getLowerLeftX() + 740;  //调整坐标
                float y = mediaBox.getLowerLeftY() + 30;   //调整坐标
                String text = "Page " + (i+1) + " of " + count;//  页码文本
                pageStream3.beginText();
                pageStream3.newLineAtOffset(x, y);
                pageStream3.showText(text);
                pageStream3.endText();
                pageStream3.close();
            }
            //    7、保存PDF到指定路径
            pdDocument.save(targetDir + f.getName());
            pdDocument.close();
            pdfInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

总结:挺好用,只是需要调整坐标,我这儿调整了头部图片和尾部图片。主打一个随机应变

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Apache PDFBox库来将图片生成低精度的PDF文件,下面是一个简单的示例代码: ```java import java.io.File; import java.io.IOException; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDStream; import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory; import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; public class ImageToPdfConverter { public static void main(String[] args) { String imagePath = "path/to/image.jpg"; String pdfPath = "path/to/output.pdf"; int dpi = 72; // 设置dpi为72,可以生成低精度的PDF文件 try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(); document.addPage(page); PDImageXObject image = null; File file = new File(imagePath); if (file.exists() && file.isFile()) { image = LosslessFactory.createFromImage(document, JPEGFactory.createFromStream(document, new PDStream(document, file.toURI().toURL().openStream()), dpi)); } if (image != null) { float width = image.getWidth(); float height = image.getHeight(); List<PDPage> allPages = document.getPages(); PDPage lastPage = allPages.get(allPages.size() - 1); lastPage.setMediaBox(new PDRectangle(width, height)); lastPage.getResources().add(image); lastPage.drawImage(image, 0, 0, width, height); } document.save(pdfPath); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们使用了`LosslessFactory.createFromImage`方法来创建一个低精度的`PDImageXObject`对象,然后将其添加到PDF文档的最后一页中,并最终将文档保存到指定的PDF文件中。你可以根据需要调整代码中的dpi值来生成不同精度的PDF文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值