开发者社区> 科技探索者> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

给PDF添加水印(Python+C#)

简介:
+关注继续查看

1、Python + PDFlib

   以下是用PDFlib给pdf添加水印的速记,另外PDFStamp是个很好用的pdf水印工具。PDFlib功能比较多、杂;PDFStamp功能单一,更方便使用。据walker测试,PDFlib会比PDFStamp快一些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#encoding=utf-8
#author: walker
#date: 2014-03-27
 
from PDFlib.PDFlib import PDFlib
from PDFlib.PDFlib import PDFlibException
 
#给单个文件添加水印,在右上角和左下角各添加一个水印
#所有参数均为全路径文件名
def add_watermark(pdf_file_in, pdf_file_out, image_file):
    = PDFlib()
    p.set_option("license=xxxxx")   #your key
    p.set_option("errorpolicy=return");
                  
    if (p.begin_document(pdf_file_out, "") == -1):
        raise PDFlibException("Error: " + p.get_errmsg())
    p.set_info("Author""walker");
    p.set_info("Title", "");
    p.set_info("Creator""walker");
    p.set_info("Subject", "");
    p.set_info("Keywords", "");
    #p.set_info("Producer", "walker");
    #输入文件
    indoc = p.open_pdi_document(pdf_file_in, "");
    if (indoc == -1):
        raise PDFlibException("Error: " + p.get_errmsg())
                  
    endpage = p.pcos_get_number(indoc, "length:pages");
    endpage = int(endpage)
                  
    image = p.load_image("auto", image_file, "")
    if image == -1:
        raise PDFlibException("Error: " + p.get_errmsg())
                  
    for pageno in range(1, endpage+1):
        page = p.open_pdi_page(indoc, pageno, "");
        if (page == -1):
            raise PDFlibException("Error: " + p.get_errmsg())
        p.begin_page_ext(00, "");     #添加一页
                      
        p.fit_pdi_page(page, 00"adjustpage")
        page_width = p.get_value("pagewidth"0)    #单位为像素72dpi下像素值
        page_height = p.get_value("pageheight"0)  #单位为像素72dpi下像素值
                      
        imagewidth = p.info_image(image, "imagewidth", "");
        imageheight = p.info_image(image, "imageheight", "");
                      
        margin = 1000   #用于设置水印边距
                      
        optlist_top = "boxsize={" + str(page_width) + " " + str(page_height) + "} "
        optlist_top += "position={" + str(margin/page_width) + " " + str(margin/ page_height) + "} "
        optlist_top += " fitmethod=clip dpi=96"
                      
        optlist_bottom = "boxsize={" + str(page_width) + " " + str(page_height) + "} "
        optlist_bottom += "position={" + str(100 - margin/page_width) + " " + str(100 - margin/ page_height) + "} "
        optlist_bottom += " fitmethod=clip dpi=96"
                      
        p.fit_image(image, 00, optlist_bottom)
        p.fit_image(image, 00, optlist_top)
                      
        p.close_pdi_page(page);
        p.end_page_ext("");
                  
    p.close_image(image)
    p.end_document("")

2、C# + iTextSharp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
 
//给单个文件添加水印,在右上角和左下角各添加一个水印
//所有参数均为全路径文件名
bool add_watermark(string srcPdf, string dstPdf, string imagepath)
{         
    iTextSharp.text.Image img = Image.GetInstance(imagepath);
    PdfReader reader = new PdfReader(srcPdf);
    PdfStamper stamp = new PdfStamper(reader, new FileStream(dstPdf, FileMode.Create));
 
    PdfContentByte page;
    float width = reader.GetPageSize(1).Width;
    float height = reader.GetPageSize(1).Height;
    int num = reader.NumberOfPages;
    for (int i = 1; i <= num; ++i)
    {
        page = stamp.GetOverContent(i);
 
        img.SetAbsolutePosition(margin, margin);
        page.AddImage(img);
 
        img.SetAbsolutePosition(width - img.Width - margin, height - img.Height - margin);
        page.AddImage(img);
    }
 
    stamp.Close();
    reader.Close();
 
    return true;
}


相关阅读:

1、Python添加pdf水印

2、PDFlib8注册机和序列号产生规则


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1385138如需转载请自行联系原作者

RQSLT

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python 编程 | 连载 11 - Python 集合
Python 编程 | 连载 11 - Python 集合
8 0
Python 编程 | 连载 13 - Python 的流程控制
Python 编程 | 连载 13 - Python 的流程控制
6 0
Python 编程 | 连载 14 - Python 的函数
Python 编程 | 连载 14 - Python 的函数
15 0
Python 编程 | 连载 15 - Python 的类
Python 编程 | 连载 15 - Python 的类
7 0
Python 编程 | 连载 16 - 类的特性
Python 编程 | 连载 16 - 类的特性
10 0
Python 编程 | 连载 17 - 高阶函数与装饰器
Python 编程 | 连载 17 - 高阶函数与装饰器
14 0
Python 编程 | 连载 18 - 异常处理(上)
Python 编程 | 连载 18 - 异常处理
15 0
Python 编程 | 连载 18 - 异常处理(下)
Python 编程 | 连载 18 - 异常处理
12 0
Python 编程 | 连载 19 - Package 和 Module
Python 编程 | 连载 19 - Package 和 Module
14 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
yqdh_58c1349b15e...1510470348.pdf
立即下载
yqdh_58c13162a73...1510469851.pdf
立即下载
yqdh_58c13478654...1510469921.pdf
立即下载