天天看點

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

1、Python + PDFlib

<code>#encoding=utf-8</code>

<code>#author: walker</code>

<code>#date: 2014-03-27</code>

<code>from</code> <code>PDFlib.PDFlib </code><code>import</code> <code>PDFlib</code>

<code>from</code> <code>PDFlib.PDFlib </code><code>import</code> <code>PDFlibException</code>

<code>#給單個檔案添加水印,在右上角和左下角各添加一個水印</code>

<code>#所有參數均為全路徑檔案名</code>

<code>def</code> <code>add_watermark(pdf_file_in, pdf_file_out, image_file):</code>

<code>    </code><code>p </code><code>=</code> <code>PDFlib()</code>

<code>    </code><code>p.set_option(</code><code>"license=xxxxx"</code><code>)   </code><code>#your key</code>

<code>    </code><code>p.set_option(</code><code>"errorpolicy=return"</code><code>);</code>

<code>                 </code> 

<code>    </code><code>if</code> <code>(p.begin_document(pdf_file_out, "") </code><code>=</code><code>=</code> <code>-</code><code>1</code><code>):</code>

<code>        </code><code>raise</code> <code>PDFlibException(</code><code>"Error: "</code> <code>+</code> <code>p.get_errmsg())</code>

<code>    </code><code>p.set_info(</code><code>"Author"</code><code>, </code><code>"walker"</code><code>);</code>

<code>    </code><code>p.set_info(</code><code>"Title"</code><code>, "");</code>

<code>    </code><code>p.set_info(</code><code>"Creator"</code><code>, </code><code>"walker"</code><code>);</code>

<code>    </code><code>p.set_info(</code><code>"Subject"</code><code>, "");</code>

<code>    </code><code>p.set_info(</code><code>"Keywords"</code><code>, "");</code>

<code>    </code><code>#p.set_info("Producer", "walker");</code>

<code>    </code><code>#輸入檔案</code>

<code>    </code><code>indoc </code><code>=</code> <code>p.open_pdi_document(pdf_file_in, "");</code>

<code>    </code><code>if</code> <code>(indoc </code><code>=</code><code>=</code> <code>-</code><code>1</code><code>):</code>

<code>    </code><code>endpage </code><code>=</code> <code>p.pcos_get_number(indoc, </code><code>"length:pages"</code><code>);</code>

<code>    </code><code>endpage </code><code>=</code> <code>int</code><code>(endpage)</code>

<code>    </code><code>image </code><code>=</code> <code>p.load_image(</code><code>"auto"</code><code>, image_file, "")</code>

<code>    </code><code>if</code> <code>image </code><code>=</code><code>=</code> <code>-</code><code>1</code><code>:</code>

<code>    </code><code>for</code> <code>pageno </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, endpage</code><code>+</code><code>1</code><code>):</code>

<code>        </code><code>page </code><code>=</code> <code>p.open_pdi_page(indoc, pageno, "");</code>

<code>        </code><code>if</code> <code>(page </code><code>=</code><code>=</code> <code>-</code><code>1</code><code>):</code>

<code>            </code><code>raise</code> <code>PDFlibException(</code><code>"Error: "</code> <code>+</code> <code>p.get_errmsg())</code>

<code>        </code><code>p.begin_page_ext(</code><code>0</code><code>, </code><code>0</code><code>, "");     </code><code>#添加一頁</code>

<code>                     </code> 

<code>        </code><code>p.fit_pdi_page(page, </code><code>0</code><code>, </code><code>0</code><code>, </code><code>"adjustpage"</code><code>)</code>

<code>        </code><code>page_width </code><code>=</code> <code>p.get_value(</code><code>"pagewidth"</code><code>, </code><code>0</code><code>)    </code><code>#機關為像素72dpi下像素值</code>

<code>        </code><code>page_height </code><code>=</code> <code>p.get_value(</code><code>"pageheight"</code><code>, </code><code>0</code><code>)  </code><code>#機關為像素72dpi下像素值</code>

<code>        </code><code>imagewidth </code><code>=</code> <code>p.info_image(image, </code><code>"imagewidth"</code><code>, "");</code>

<code>        </code><code>imageheight </code><code>=</code> <code>p.info_image(image, </code><code>"imageheight"</code><code>, "");</code>

<code>        </code><code>margin </code><code>=</code> <code>1000</code>   <code>#用于設定水印邊距</code>

<code>        </code><code>optlist_top </code><code>=</code> <code>"boxsize={"</code> <code>+</code> <code>str</code><code>(page_width) </code><code>+</code> <code>" "</code> <code>+</code> <code>str</code><code>(page_height) </code><code>+</code> <code>"} "</code>

<code>        </code><code>optlist_top </code><code>+</code><code>=</code> <code>"position={"</code> <code>+</code> <code>str</code><code>(margin</code><code>/</code><code>page_width) </code><code>+</code> <code>" "</code> <code>+</code> <code>str</code><code>(margin</code><code>/</code> <code>page_height) </code><code>+</code> <code>"} "</code>

<code>        </code><code>optlist_top </code><code>+</code><code>=</code> <code>" fitmethod=clip dpi=96"</code>

<code>        </code><code>optlist_bottom </code><code>=</code> <code>"boxsize={"</code> <code>+</code> <code>str</code><code>(page_width) </code><code>+</code> <code>" "</code> <code>+</code> <code>str</code><code>(page_height) </code><code>+</code> <code>"} "</code>

<code>        </code><code>optlist_bottom </code><code>+</code><code>=</code> <code>"position={"</code> <code>+</code> <code>str</code><code>(</code><code>100</code> <code>-</code> <code>margin</code><code>/</code><code>page_width) </code><code>+</code> <code>" "</code> <code>+</code> <code>str</code><code>(</code><code>100</code> <code>-</code> <code>margin</code><code>/</code> <code>page_height) </code><code>+</code> <code>"} "</code>

<code>        </code><code>optlist_bottom </code><code>+</code><code>=</code> <code>" fitmethod=clip dpi=96"</code>

<code>        </code><code>p.fit_image(image, </code><code>0</code><code>, </code><code>0</code><code>, optlist_bottom)</code>

<code>        </code><code>p.fit_image(image, </code><code>0</code><code>, </code><code>0</code><code>, optlist_top)</code>

<code>        </code><code>p.close_pdi_page(page);</code>

<code>        </code><code>p.end_page_ext("");</code>

<code>    </code><code>p.close_image(image)</code>

<code>    </code><code>p.end_document("")</code>

2、C# + iTextSharp

<code>using</code> <code>System;</code>

<code>using</code> <code>System.IO;</code>

<code>using</code> <code>iTextSharp.text;</code>

<code>using</code> <code>iTextSharp.text.pdf;</code>

<code>//給單個檔案添加水印,在右上角和左下角各添加一個水印</code>

<code>//所有參數均為全路徑檔案名</code>

<code>bool</code> <code>add_watermark(</code><code>string</code> <code>srcPdf, </code><code>string</code> <code>dstPdf, </code><code>string</code> <code>imagepath)</code>

<code>{         </code>

<code>    </code><code>iTextSharp.text.Image img = Image.GetInstance(imagepath);</code>

<code>    </code><code>PdfReader reader = </code><code>new</code> <code>PdfReader(srcPdf);</code>

<code>    </code><code>PdfStamper stamp = </code><code>new</code> <code>PdfStamper(reader, </code><code>new</code> <code>FileStream(dstPdf, FileMode.Create));</code>

<code>    </code><code>PdfContentByte page;</code>

<code>    </code><code>float</code> <code>width = reader.GetPageSize(1).Width;</code>

<code>    </code><code>float</code> <code>height = reader.GetPageSize(1).Height;</code>

<code>    </code><code>int</code> <code>num = reader.NumberOfPages;</code>

<code>    </code><code>for</code> <code>(</code><code>int</code> <code>i = 1; i &lt;= num; ++i)</code>

<code>    </code><code>{</code>

<code>        </code><code>page = stamp.GetOverContent(i);</code>

<code>        </code><code>img.SetAbsolutePosition(margin, margin);</code>

<code>        </code><code>page.AddImage(img);</code>

<code>        </code><code>img.SetAbsolutePosition(width - img.Width - margin, height - img.Height - margin);</code>

<code>    </code><code>}</code>

<code>    </code><code>stamp.Close();</code>

<code>    </code><code>reader.Close();</code>

<code>    </code><code>return</code> <code>true</code><code>;</code>

<code>}</code>

相關閱讀:

本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1385138如需轉載請自行聯系原作者

RQSLT