• spire.pdf盖章(无水印免费无限制)


    下载老版的spire.pdf.jar,就会在一页有水印,添加一页pdf,然后删掉最后一页就可以了;

    jar资源地址:spire.pdf-3.7.4.jar

    1. import java.awt.geom.Rectangle2D;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import org.apache.pdfbox.pdmodel.PDDocument;
    5. import org.apache.pdfbox.pdmodel.PDPage;
    6. import org.junit.Test;
    7. import com.spire.pdf.FileFormat;
    8. import com.spire.pdf.PdfDocument;
    9. import com.spire.pdf.PdfPageBase;
    10. import com.spire.pdf.annotations.PdfRubberStampAnnotation;
    11. import com.spire.pdf.annotations.appearance.PdfAppearance;
    12. import com.spire.pdf.graphics.PdfImage;
    13. import com.spire.pdf.graphics.PdfTemplate;
    14. import com.spire.pdf.widget.PdfPageCollection;
    15. public class SomeTest {
    16. public static void main(String[] args) {
    17. //创建PdfDocument对象,加载PDF测试文档
    18. PdfDocument doc = new PdfDocument();
    19. doc.loadFromFile("xxx.pdf");
    20. System.out.println(doc.getPages().getCount());
    21. //添加空白文档
    22. doc.getPages().add();
    23. PdfPageCollection pages = doc.getPages();
    24. System.out.println(pages.getCount());
    25. for (int i = 0; i < pages.getCount(); i++) {
    26. PdfPageBase page = doc.getPages().get(i);
    27. PdfRubberStampAnnotation stamp = getStamp(page);
    28. //添加图章到PDF
    29. page.getAnnotationsWidget().add(stamp);
    30. }
    31. System.out.println(doc.getPages().getCount());
    32. //保存文档
    33. doc.saveToFile("ImageStamp.pdf", FileFormat.PDF);
    34. //删除空白文档
    35. removeLast("ImageStamp.pdf");
    36. }
    37. private static void removeLast(String filePath) {
    38. try {
    39. // 加载PDF文档
    40. PDDocument document = PDDocument.load(new File(filePath));
    41. int pageNumberToRemove = document.getPages().getCount() - 1;
    42. // 获取要删除的页
    43. PDPage pageToRemove = document.getPage(pageNumberToRemove);
    44. // 删除页
    45. document.removePage(pageToRemove);
    46. // 保存修改后的PDF
    47. document.save(new File(filePath));
    48. // 关闭文档
    49. document.close();
    50. System.out.println("成功删除第 " + pageNumberToRemove + " 页!");
    51. } catch (IOException e) {
    52. e.printStackTrace();
    53. }
    54. }
    55. private static PdfRubberStampAnnotation getStamp(PdfPageBase page) {
    56. //加载印章图片
    57. PdfImage image = PdfImage.fromFile("章.png");
    58. //获取印章图片的宽度和高度
    59. int width = image.getWidth();
    60. int height = image.getHeight();
    61. //创建PdfTemplate对象
    62. PdfTemplate template = new PdfTemplate(width, height);
    63. //将图片绘制到模板 要在pdf上调整好大小
    64. template.getGraphics().drawImage(image, 50, 0, 100, 100);
    65. //创建PdfRubebrStampAnnotation对象,指定大小和位置
    66. Rectangle2D rect = new Rectangle2D.Float((float) (page.getActualSize().getWidth() - width - 0),
    67. (float) (page.getActualSize().getHeight() - height + 50), width, height);
    68. PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect);
    69. //创建PdfAppearance对象
    70. PdfAppearance pdfAppearance = new PdfAppearance(stamp);
    71. //将模板应用为PdfAppearance的一般状态
    72. pdfAppearance.setNormal(template);
    73. //将PdfAppearance 应用为图章的样式
    74. stamp.setAppearance(pdfAppearance);
    75. return stamp;
    76. }
    77. }

  • 相关阅读:
    吃透『MySQL』系列,手把手解析相关问题
    【MySQL】MVCC机制(undo log,read view)
    线程可重复使用,程序开发是如何使用线程池的呢?
    海康威视嵌入式软件一面(技术面)
    java计算机毕业设计ssm+vue杂货网络销售及配送系统
    C Primer Plus(6) 中文版 第12章 存储类别、链接和内存管理 12.2 随机数函数和静态变量
    考研数学|《1800》+《660》精华搭配混合用(经验分享)
    Minio入门系列 MinIO Client使用详解
    Docker笔记
    三刷操作系统之一文带你搞懂FreeRTOS——任务通知
  • 原文地址:https://blog.csdn.net/shang02/article/details/134444909