• java中利用itext编辑pdf


    最近项目需要,在调研如何在pdf中增加标识字样,用来区分版本.最后确定用itext来实现.

    itext的官网是:http://www.itextpdf.com/

    代码如下:

    Java代码 复制代码 收藏代码
    1. /**
    2. * authory kingviker
    3. * time : 2012-12-12
    4. */
    5. import java.io.FileOutputStream;
    6. import java.io.IOException;
    7. import com.itextpdf.text.DocumentException;
    8. import com.itextpdf.text.Font;
    9. import com.itextpdf.text.Image;
    10. import com.itextpdf.text.pdf.BaseFont;
    11. import com.itextpdf.text.pdf.PdfArray;
    12. import com.itextpdf.text.pdf.PdfContentByte;
    13. import com.itextpdf.text.pdf.PdfDictionary;
    14. import com.itextpdf.text.pdf.PdfName;
    15. import com.itextpdf.text.pdf.PdfObject;
    16. import com.itextpdf.text.pdf.PdfReader;
    17. import com.itextpdf.text.pdf.PdfStamper;
    18. public class AddContentToPDF {
    19. public static void main(String[] args) throws IOException, DocumentException {
    20. //创建一个pdf读入流
    21. PdfReader reader = new PdfReader("C:/help.pdf");
    22. //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.
    23. PdfStamper stamper = new PdfStamper(reader,
    24. new FileOutputStream("C:/help2.pdf"));
    25. //这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.
    26. BaseFont bf = BaseFont.createFont("STSong-Light",
    27. "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // set font
    28. //baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.
    29. Font font = new Font(bf,10);
    30. font.setStyle(Font.BOLD);
    31. font.getBaseFont();
    32. //页数是从1开始的
    33. for (int i=1; i<=reader.getNumberOfPages(); i++){
    34. //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上.
    35. PdfContentByte over = stamper.getOverContent(i);
    36. //用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息.
    37. PdfDictionary p = reader.getPageN(i);
    38. //拿到mediaBox 里面放着该页pdf的大小信息.
    39. PdfObject po = p.get(new PdfName("MediaBox"));
    40. System.out.println(po.isArray());
    41. //po是一个数组对象.里面包含了该页pdf的坐标轴范围.
    42. PdfArray pa = (PdfArray) po;
    43. System.out.println(pa.size());
    44. //看看y轴的最大值.
    45. System.out.println(pa.getAsNumber(pa.size()-1));
    46. //开始写入文本
    47. over.beginText();
    48. //设置字体和大小
    49. over.setFontAndSize(font.getBaseFont(), 10);
    50. //设置字体的输出位置
    51. over.setTextMatrix(107, 540);
    52. //要输出的text
    53. over.showText("我要加[终稿]字样 " + i);
    54. over.endText();
    55. //创建一个image对象.
    56. Image image = Image.getInstance("c:/1.jpg");
    57. //设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值
    58. image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue()-100);//0, 0, 841.92, 595.32
    59. over.addImage(image);
    60. //画一个圈.
    61. over.setRGBColorStroke(0xFF, 0x00, 0x00);
    62. over.setLineWidth(5f);
    63. over.ellipse(250, 450, 350, 550);
    64. over.stroke();
    65. }
    66. stamper.close();
    67. }
    68. }  
  • 相关阅读:
    js动态增加html页面元素
    sql(转自http://www.imooc.com/article/2325)
    正则表达式(转自https://segmentfault.com/a/1190000000699097)
    ssh整合(http://blog.csdn.net/songanling/article/details/22454973)
    json(http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html)
    spring定时器设置(转自:http://my.oschina.net/LvSantorini/blog/520049)
    (转)MyEclipse自动生成Hibernate实体类, oracle篇
    互联网安全
    来做几道算术题
    py打包exe的那些事
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575936.html
Copyright © 2020-2023  润新知