1. public static boolean waterMark(String inputFile,
  2. String outputFile, String waterMarkName)throws IOException {
  3. try {
  4. //inputFile = new String(inputFile.getBytes("UTF-8"),"UTF-8");
  5. BaseFont base = BaseFont.createFont("STSong-Light",
  6. "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
  7. String inputFileName = inputFile.substring(inputFile.lastIndexOf("/")+1);
  8. inputFileName = URLEncoder.encode(inputFileName, "utf-8");
  9. inputFileName = StringUtils.replace(inputFileName, "+", "%20");
  10. //inputFileName.replace("+","%20");
  11. //response.addHeader("Content-Disposition", "attachment;inputFileName=" + inputFileName);
  12. //inputFileName = URLEncoder.encode(inputFileName, "utf-8").replaceAll("\\+", "%2B").replaceAll("\\s", " ");
  13. //inputFileName = URLDecoder.decode(inputFileName, "utf-8");
  14. //inputFileName = new String(inputFileName.getBytes(),"ISO-8859-1");
  15. //处理文件名有中文问题
  16. // try {
  17. // if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
  18. // inputFileName= URLEncoder.encode(inputFileName, "UTF-8");
  19. // } else {
  20. // inputFileName= new String(inputFileName.getBytes(),"ISO-8859-1");
  21. // }
  22. // } catch (UnsupportedEncodingException e) {
  23. // e.printStackTrace();
  24. // }
  25. // //最后加双引号处理名称中间有空格问题
  26. // response.setHeader("Content-Disposition","attachment;filename=\""+inputFileName+"\"");
  27. inputFile = inputFile.substring(0,inputFile.lastIndexOf("/"))+"/"+inputFileName;
  28. URL url = new URL(inputFile);
  29. InputStream file = url.openStream();
  30. PdfReader reader = new PdfReader(file);
  31. System.out.print("reader"+reader);
  32. File fileOut = new File(outputFile);
  33. if (!fileOut.exists()) {
  34. // 先得到文件的上级目录,并创建上级目录,在创建文件
  35. fileOut.getParentFile().mkdir();
  36. fileOut.createNewFile();
  37. }
  38. //Field f = PdfReader.class.getDeclaredField("ownerPasswordUsed");
  39. //f.setAccessible(true);
  40. //f.set(reader, Boolean.TRUE);
  41. PdfStamper stamper = new PdfStamper(reader, new BufferedOutputStream(new FileOutputStream(fileOut)));
  42. //这里的字体设置比较关键,这个设置是支持中文的写法
  43. int total = reader.getNumberOfPages() + 1;
  44.  
  45. PdfContentByte under;
  46. Rectangle pageRect = null;
  47. String [] content = waterMarkName.split("\r\n");
  48. for (int i = 1; i < total; i++) {
  49. pageRect = stamper.getReader().
  50. getPageSizeWithRotation(i);
  51. // 计算水印X,Y坐标
  52. float x = pageRect.getWidth()/2;
  53. float y = pageRect.getHeight()/2;
  54. // 获得PDF最顶层
  55. under = stamper.getOverContent(i);
  56. under.saveState();
  57. // set Transparency
  58. PdfGState gs = new PdfGState();
  59. // 设置透明度为0.2
  60. gs.setFillOpacity(0.1f);
  61. under.setGState(gs);
  62. under.restoreState();
  63. under.beginText();
  64. under.setFontAndSize(base, 55);
  65. under.setColorFill(BaseColor.GRAY);
  66.  
  67. // 水印文字成35度角倾斜
  68. under.showTextAligned(Element.ALIGN_CENTER
  69. ,content[0], x,
  70. y, 35);
  71. under.showTextAligned(Element.ALIGN_CENTER
  72. ,content[1], x+30,
  73. y-50, 35);
  74. // 添加水印文字
  75. under.endText();
  76. under.setLineWidth(1f);
  77. under.stroke();
  78. }
  79. stamper.close();
  80. file.close();
  81. return true;
  82. } catch (Exception e) {
  83. e.printStackTrace();
  84. return false;
  85. }
  86. }

pdf文件下载水印添加的中文与空格问题解决的更多相关文章

  1. 利用iTextSharp组件给PDF文档添加图片水印,文字水印

    最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为:   using S ...

  2. 「Python实用秘技04」为pdf文件批量添加文字水印

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第4期 ...

  3. PDF的水印怎么去掉

    很多朋友私下都有问过PDF去除水印的方法,现在在网上下载一些PDF电子书,几乎页面内都会有水印的,而且有的水印还带有超链接,稍微不注意就会点开进入别的页面内,不仅影响了阅读效果还带给读者负面影响,那如 ...

  4. 怎么编辑PDF,如何给PDF加水印

    在使用PDF文件的时候,往往会用到PDF编辑器来修改,那么,在使用PDF编辑器修改文件的时候,想要在文件中添加水印,这该怎么操作呢,不会的小伙伴可以看看下面的文章了哦,说不定就会了. 1.打开运行PD ...

  5. java 实现 PDF 加水印功能

    使用java代码实现给PDF加水印的功能 首先导入所需要的依赖 <dependency> <groupId>com.itextpdf</groupId> <a ...

  6. Gitbook 生成 pdf 中文字体错乱问题解决办法

    Gitbook 生成 pdf 中文字体错乱问题解决办法   用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, ...

  7. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  8. javascript 过滤字符串中的中文与空格

    js 如何过滤字符串里中文或空格呢?方法有很多种,我们可以使用替换与正则表达式来实现,本文向大家介绍两个简单的例子,感兴趣的码农可以参考一下. 1.javascript过滤空格: function m ...

  9. C#如何给PDF文档添加注释

    整理文档时,我们可能会需要在一些或一段文字上添加注释加以说明,那如何以编程的方式实现呢?本文将实例讲述C#中如何使用免费组件给PDF文档添加文本注释,包括自由文本注释.自由文本注释能允许我们自定义它的 ...

随机推荐

  1. <转载>Android性能优化之HashMap,ArrayMap和SparseArray

    本篇博客来自于转载,打开原文地址已经失效,在此就不贴出原文地址了,如原作者看到请私信我可用地址,保护原创,人人有责.   Android开发者都知道Lint在我们使用HashMap的时候会给出警告—— ...

  2. Go map实现原理

    map结构 整体为一个数组,数组每个元素可以理解成一个槽,槽是一个链表结构,槽的每个节点可存8个元素,搞清楚了map的结构,想想对应的增删改查操作也不是那么难

  3. .NET CAD二次开发学习 对称画线功能

    [CommandMethod("CBline")] //对称画线 public void CBline() { Document doc = Application.Documen ...

  4. ADO.NET 基础学习笔记1

    1. ODBC.OLEDB.ADO.ADO.NET之间的关系 ODBC: 开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准.ODBC(Open DatabaseConnectiv ...

  5. WPF TextBox 正则验证 大于等于0 小于等于1 的两位小数

    正则:^(0\.\d+|[1-9][0-9]|1)$ TextBox绑定正则验证 <TextBox x:Name="txb"   MaxLength="6" ...

  6. 教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)

    一键获取微信小程序源代码 Tips: 一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下3 这个目录下有一些demo 可以 ...

  7. HTML 练习实现鼠标移到用户图像展示更多信息

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Python之路【第一篇】:Python简介和入门

    python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...

  9. http-server安装及运行

    vue项目打包后会生成一个dist目录,我们想要直接运行dist目录...除了复制静态文件到服务器nginx目录下,然后启动nginx来启动项目, 另外一个办法就是安装http-server 直接启动 ...

  10. Vault安装、配置、使用

    一.环境搭建 官网指导步骤:https://learn.hashicorp.com/vault/#getting-started 1. 下载vault安装文件 2. dev环境启动 ./vault s ...