• 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. }

  • 相关阅读:
    【图神经网络论文整理】(一)—— 可解释性和泛化性图分类的因果注意力:CAL
    亚马逊卖家自己掌握测评养号技术的重要性
    《MLB棒球创造营》:走近棒球运动·西雅图水手队
    docker-compose整合mysql主从
    技术架构职责和应该注意哪些
    虚拟机安装zookeeper集群
    解析 DAO 效率低下的原因及待考虑因素
    Redis:send of 37 bytes failed with errno=10054
    【电驱动】驱动电机系统讲解
    springboot烯烃厂压力管道管理系统java ssm
  • 原文地址:https://blog.csdn.net/shang02/article/details/134444909