1、建立水印PDF。
1)、建立文字水印pdf檔案
代碼:
<code>#encoding=utf-8</code>
<code>#author: walker</code>
<code>#date: 2014-03-17</code>
<code>#function: 建立文字水印pdf</code>
<code>from</code> <code>reportlab.pdfgen </code><code>import</code> <code>canvas</code>
<code>from</code> <code>reportlab.lib.units </code><code>import</code> <code>cm</code>
<code>def</code> <code>create_watermark(content):</code>
<code> </code><code>#預設大小為21cm*29.7cm</code>
<code> </code><code>c </code><code>=</code> <code>canvas.Canvas(</code><code>"mark.pdf"</code><code>, pagesize </code><code>=</code> <code>(</code><code>30</code><code>*</code><code>cm, </code><code>30</code><code>*</code><code>cm))</code>
<code> </code><code>#移動坐标原點(坐标系左下為(0,0))</code>
<code> </code><code>c.translate(</code><code>10</code><code>*</code><code>cm, </code><code>5</code><code>*</code><code>cm)</code>
<code> </code>
<code> </code><code>#設定字型</code>
<code> </code><code>c.setFont(</code><code>"Helvetica"</code><code>, </code><code>80</code><code>)</code>
<code> </code><code>#指定描邊的顔色</code>
<code> </code><code>c.setStrokeColorRGB(</code><code>0</code><code>, </code><code>1</code><code>, </code><code>0</code><code>)</code>
<code> </code><code>#指定填充顔色</code>
<code> </code><code>c.setFillColorRGB(</code><code>0</code><code>, </code><code>1</code><code>, </code><code>0</code><code>)</code>
<code> </code><code>#畫一個矩形</code>
<code> </code><code>c.rect(cm, cm, </code><code>7</code><code>*</code><code>cm, </code><code>17</code><code>*</code><code>cm, fill</code><code>=</code><code>1</code><code>)</code>
<code> </code><code>#旋轉45度,坐标系被旋轉</code>
<code> </code><code>c.rotate(</code><code>45</code><code>)</code>
<code> </code><code>c.setFillColorRGB(</code><code>0.6</code><code>, </code><code>0</code><code>, </code><code>0</code><code>)</code>
<code> </code><code>#設定透明度,1為不透明</code>
<code> </code><code>c.setFillAlpha(</code><code>0.3</code><code>)</code>
<code> </code><code>#畫幾個文本,注意坐标系旋轉的影響</code>
<code> </code><code>c.drawString(</code><code>3</code><code>*</code><code>cm, </code><code>0</code><code>*</code><code>cm, content)</code>
<code> </code><code>c.setFillAlpha(</code><code>0.6</code><code>)</code>
<code> </code><code>c.drawString(</code><code>6</code><code>*</code><code>cm, </code><code>3</code><code>*</code><code>cm, content)</code>
<code> </code><code>c.setFillAlpha(</code><code>1</code><code>)</code>
<code> </code><code>c.drawString(</code><code>9</code><code>*</code><code>cm, </code><code>6</code><code>*</code><code>cm, content)</code>
<code> </code><code>#關閉并儲存pdf檔案</code>
<code> </code><code>c.save()</code>
<code>create_watermark(</code><code>'walker'</code><code>)</code>
效果圖:
<a href="http://s3.51cto.com/wyfs02/M01/22/C5/wKioL1MmtY7gLmlHAAAnyxSUB4o111.png" target="_blank"></a>
2)、建立圖檔水印pdf。
<code>#function: 建立圖檔水印pdf</code>
<code>def</code> <code>create_watermark(f_jpg):</code>
<code> </code><code>f_pdf </code><code>=</code> <code>'mark.pdf'</code>
<code> </code><code>w_pdf </code><code>=</code> <code>20</code><code>*</code><code>cm</code>
<code> </code><code>h_pdf </code><code>=</code> <code>20</code><code>*</code><code>cm</code>
<code> </code>
<code> </code><code>c </code><code>=</code> <code>canvas.Canvas(f_pdf, pagesize </code><code>=</code> <code>(w_pdf, h_pdf))</code>
<code> </code><code>c.setFillAlpha(</code><code>0.3</code><code>) </code><code>#設定透明度</code>
<code> </code><code>print</code> <code>c.drawImage(f_jpg, </code><code>7</code><code>*</code><code>cm, </code><code>7</code><code>*</code><code>cm, </code><code>6</code><code>*</code><code>cm, </code><code>6</code><code>*</code><code>cm) </code><code>#這裡的機關是實體尺寸</code>
<code>create_watermark(</code><code>'eg.png'</code><code>)</code>
<a href="http://s3.51cto.com/wyfs02/M01/22/CA/wKioL1MnpDSDEFwrAAAO8juU39g979.png" target="_blank"></a>
2、添加水印。
<code>#date: 2014-03-18</code>
<code>#function:給pdf添加水印</code>
<code>from</code> <code>PyPDF2 </code><code>import</code> <code>PdfFileWriter, PdfFileReader</code>
<code>#所有路徑為絕對路徑</code>
<code>def</code> <code>add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):</code>
<code> </code><code>pdf_output </code><code>=</code> <code>PdfFileWriter()</code>
<code> </code><code>input_stream </code><code>=</code> <code>file</code><code>(pdf_file_in, </code><code>'rb'</code><code>)</code>
<code> </code><code>pdf_input </code><code>=</code> <code>PdfFileReader(input_stream)</code>
<code> </code>
<code> </code><code># PDF檔案被加密了</code>
<code> </code><code>if</code> <code>pdf_input.getIsEncrypted():</code>
<code> </code><code>print</code> <code>'該PDF檔案被加密了.'</code>
<code> </code><code># 嘗試用空密碼解密</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>pdf_input.decrypt('')</code>
<code> </code><code>except</code> <code>Exception, e:</code>
<code> </code><code>print</code> <code>'嘗試用空密碼解密失敗.'</code>
<code> </code><code>return</code> <code>False</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code> <code>'用空密碼解密成功.'</code>
<code> </code><code># 擷取PDF檔案的頁數</code>
<code> </code><code>pageNum </code><code>=</code> <code>pdf_input.getNumPages()</code>
<code> </code><code>#讀入水印pdf檔案</code>
<code> </code><code>pdf_watermark </code><code>=</code> <code>PdfFileReader(</code><code>file</code><code>(pdf_file_mark, </code><code>'rb'</code><code>))</code>
<code> </code><code># 給每一頁打水印</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(pageNum):</code>
<code> </code><code>page </code><code>=</code> <code>pdf_input.getPage(i)</code>
<code> </code><code>page.mergePage(pdf_watermark.getPage(</code><code>0</code><code>))</code>
<code> </code><code>page.compressContentStreams() </code><code>#壓縮内容</code>
<code> </code><code>pdf_output.addPage(page)</code>
<a href="http://s3.51cto.com/wyfs02/M02/22/C9/wKiom1MnrYqRqmWpAACf9L-3nXY146.png" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/22/CB/wKioL1MnrWSBsrHhAAChEqREs6g570.png" target="_blank"></a>
本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1378142如需轉載請自行聯系原作者
RQSLT