Удалить изображение маски "Водяной знак" из PDF itextsharp - PullRequest
0 голосов
/ 06 декабря 2011

Мне нужно удалить изображение маски из PDF-документа. Одно и то же изображение используется как «водяной знак» на всех страницах. Это возможно с iTextSharp, и если да, я был бы признателен за любые примеры кода.

Причина, по которой мне нужно удалить водяной знак, заключается в том, что мне нужно распознать PDF, но текст под «водяным знаком» искажается.

У меня есть поиск в Интернете, но мне удалось найти все, что работает.

Спасибо, Димитрис

с помощью этого кода я могу заменить изображение, но если я не заменю изображение ... тогда изображение действительно исчезнет, ​​но я получаю ошибку при открытии PDF в Adobe Reades

        string pdfTempFilename = "1_tmp.pdf";            
        FileStream os = new FileStream(pdfTempFilename, FileMode.Create);
        PdfReader pdf = new PdfReader(@"D:\import\pdf.pdf");
        PdfStamper stp = new PdfStamper(pdf, os);
        PdfWriter writer = stp.Writer;
        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance("mask.gif");
        PdfDictionary pg = pdf.GetPageN(1);
        PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));

        PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));                                                                       

        if (xobj != null) {

            foreach (PdfName name in xobj.Keys){            
                PdfObject obj = xobj.Get(name);
                if (obj.IsIndirect()) {
                    PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
                    PdfName type = tg.GetAsName(PdfName.SUBTYPE);


                    PdfObject ind = tg.Get(PdfName.MASK);

                    if (PdfName.IMAGE.Equals(type) && ind !=null)
                    {
                        PdfReader.KillIndirect(obj);                           

                        writer.AddDirectImageSimple(img, (PRIndirectReference)obj);                            
                        break;
                    }
                }
            }
       }
       stp.Close();

`

...