代码之家  ›  专栏  ›  技术社区  ›  SurenSaluka

在PDFTron UWP上使用压模添加文本水印

  •  1
  • SurenSaluka  · 技术社区  · 6 年前

    我已使用以下代码将水印添加到我的pdf中。我的实际要求是在用户尝试打印pdf时显示水印。(打印预览和打印副本应具有水印 在查看器上的原始文档上)

    我设置了标志ShowsOnScreen(false)和ShowsOnPrint(true),但它会显示在打印预览上,也会显示在查看器上。 另一个问题是,可以选择此水印并进行其他注释,如高亮显示。

    请给我建议一个解决方法。或者我需要对查看器隐藏水印,并仅在打印预览/打印时显示 或 显示水印在查看器上的显示方式,但它必须是只读的。

    using (Stamper st = new Stamper(StamperSizeType.e_relative_scale, 0.9, 0.9)) 
                    { 
                        pdfDoc.InitSecurityHandler(); 
    
                        st.SetAlignment(StamperHorizontalAlignment.e_horizontal_center, StamperVerticalAlignment.e_vertical_center); 
                        st.SetFontColor(new ColorPt(0, 0, 0));                    st.SetOpacity(0.3); 
                        st.SetAsBackground(false); 
                        st.ShowsOnScreen(false); 
    
                        st.SetRotation(-45); 
                        st.ShowsOnPrint(true); 
    
                        st.SetAsAnnotation(false); 
    
                        st.StampText(pdfDoc, "If you are reading this\nthis is an even page", new PageSet(1, pdfDoc.GetPageCount())); 
                    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   SurenSaluka    6 年前

    在PDFTron团队的帮助下进行了分类。这是代码

    public async Task<PDFDoc> SetWatermark(PDFDoc pdfDoc)
        {
            try
            {
                #region Solution 1
                var text = "Sample Watermark\nSample Watermark";
    
                pdfDoc.InitSecurityHandler();
                Image img1 = null;
    
                // Create a dummy document
                using (PDFDoc tempDoc = new PDFDoc())
                using (Stamper st = new Stamper(StamperSizeType.e_relative_scale, 0.9, 0.9))
                {
            // Add a page to the dummy doc.
                    tempDoc.PagePushBack(tempDoc.PageCreate());
                    st.SetAlignment(StamperHorizontalAlignment.e_horizontal_center, StamperVerticalAlignment.e_vertical_center);
    
                    // Set text color to black
                    st.SetFontColor(new ColorPt(0, 0, 0));
    
                    // Add a text to the dummy page. This text will be the watermark you going to apply on your original document.
                    st.StampText(tempDoc, text, new PageSet(1, tempDoc.GetPageCount()));
            // Reduce PDF page to minimal size
                    tempDoc.GetPage(1).SetMediaBox(tempDoc.GetPage(1).GetVisibleContentBox());
    
            // Require a sepaprate license
                    PDFDraw draw = new PDFDraw();
                    // Adjust image output quality
                    draw.SetDPI(100);
                    draw.SetPageTransparent(true);
    
                    // Export the dummy page's text as an image
                    var pngImageData = await draw.ExportAsStreamAsync(tempDoc.GetPage(1), "PNG");
                    img1 = await Image.CreateAsync(pdfDoc.GetSDFDoc(), pngImageData);
                }
    
                // Create a new stamper to embed the above created image to the original doc
                using (Stamper st = new Stamper(StamperSizeType.e_relative_scale, 0.9, 0.9))
                {
                    // Adjust final stamp positioning
                    st.SetAlignment(StamperHorizontalAlignment.e_horizontal_center, StamperVerticalAlignment.e_vertical_center);
                    st.SetOpacity(0.3);
                    st.SetAsBackground(false);
                    st.ShowsOnScreen(true);
                    st.SetRotation(-45);
                    st.ShowsOnPrint(true);
                    st.SetAsAnnotation(false); //Make it true if you want to add this watermark to the XFDF file
    
                    st.StampImage(pdfDoc, img1, new PageSet(1, pdfDoc.GetPageCount()));
                }
                #endregion
            }
            catch (Exception ex)
            {
                throw;
            }
            return pdfDoc; //Retrun the watermark embeded document
        }