ich den Code gezogen von How to redact a large rectangle of a PDF by iTextSharp?iTextSharp 5.5.9 Redaction - Objekt Referenz nicht gefunden
Und generiert:
iTextSharp.text.pdf.PdfReader reader;
reader = new iTextSharp.text.pdf.PdfReader(new System.IO.FileStream(txtPDFFile.Text, System.IO.FileMode.Open));
string path = System.IO.Path.GetDirectoryName(txtPDFFile.Text);
System.IO.Stream fsOut = new System.IO.FileStream(System.IO.Path.Combine(path,"redacted.pdf"), System.IO.FileMode.OpenOrCreate);
iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, fsOut);
List<iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpLocation> cleanUpLocations = new List<iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpLocation>();
cleanUpLocations.Add(new iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpLocation(1, new iTextSharp.text.Rectangle(77f, 77f, 200f, 200f), iTextSharp.text.BaseColor.GRAY));
iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpProcessor cleaner = new iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpProcessor(cleanUpLocations, stamper);
cleaner.CleanUp();
stamper.Close();
reader.Close();
Also nahm ich aus dem verlinkten Artikel, die ich verwenden sollte Input-Dateien unterscheiden, die ich war tun.
Aber am cleaner.CleanUp() Ich erhalte einen Objektverweis wurde nicht gefunden:
at iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpContentOperator.Invoke(PdfContentStreamProcessor pdfContentStreamProcessor, PdfLiteral oper, List`1 operands)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.InvokeOperator(PdfLiteral oper, List`1 operands)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.ProcessContent(Byte[] contentBytes, PdfDictionary resources)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.FormXObjectDoHandler.HandleXObject(PdfContentStreamProcessor processor, PdfStream stream, PdfIndirectReference refi)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.DisplayXObject(PdfName xobjectName)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.Do.Invoke(PdfContentStreamProcessor processor, PdfLiteral oper, List`1 operands)
at iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpContentOperator.Invoke(PdfContentStreamProcessor pdfContentStreamProcessor, PdfLiteral oper, List`1 operands)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.InvokeOperator(PdfLiteral oper, List`1 operands)
at iTextSharp.text.pdf.parser.PdfContentStreamProcessor.ProcessContent(Byte[] contentBytes, PdfDictionary resources)
at iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpProcessor.CleanUpPage(Int32 pageNum, IList`1 cleanUpLocations)
at iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpProcessor.CleanUp()
at Com.EDS.DocSol.PDFExtract.PDFExtractForm.btnRedaction_Click(Object sender, EventArgs e) in D:\Users\me\Code\PDFExtract\PDFExtract\PDFExtractForm.cs:line 106
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Com.EDS.DocSol.PDFExtract.Program.Main(String[] args) in D:\Users\me\Code\PDFExtract\PDFExtract\Program.cs:line 140
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Ich kann nicht sehen, warum. Das Rechteck habe ich nicht verändert. Ich bin mir nicht sicher, ob da tatsächlich etwas an diesem Ort sein muss. Ich hatte Code, der zuerst eine Anmerkung hinzufügen würde, dann versuchte ich es anzuwenden. Aber es würde auch den gleichen Objektreferenzfehler erhalten.
Im obigen Code .... muss ich zuerst eine Redaktionsanmerkung erstellen, bevor ich mich bewerbe, oder soll dieser Code das Feld auswählen, das ich redigieren und alles in einem Durchgang anwenden möchte.
Das Rechteck ich will (es ist ein Adressblock), ist eigentlich: iTextSharp.text.Rectangle (45, 650, 200, 750);
Bitte teilen Sie ein Beispiel-PDF, um das Problem zu reproduzieren. 'PdfCleanUpContentOperator.Invoke' ist eine zu große Methode, um zu erraten, wo ein Objekt unerwartet null ist. – mkl
Ich musste das PDF-Dokument durchgehen und desensibilisieren. Aber hier ist ein Beispiel. https://www.dropbox.com/s/9h4cuyqvmv9rso6/Document.pdf?dl=0 Auch habe ich versucht, den Code auf die folgende Veränderung: 'iTextSharp.xtra.iTextSharp.text.pdf.pdfcleanup.PdfCleanUpProcessor Reiniger = new iTextSharp.xtra.iTextSharp.text.pdf.pcleanup.PdfCleanUpProcessor (stamper); ' (entfernt die Aufräumorte) Dies scheint eine Objektreferenz zu bekommen, die nicht auf contructor gefunden wird .... Ich frage mich, ob das ungültig ist. ..und dass die Aufräumorte vorhanden sein müssen? – dcole
Ich habe versucht, das Problem zu reproduzieren, indem ich Ihren Code verwendete und die Rechteckkoordinaten in '45, 650, 200, 750' änderte, wie durch Ihre Frage und die Dateipfade auf meinem System angezeigt. Das Anwenden auf die Beispieldatei funktionierte leider nicht richtig. Entweder gibt es etwas Besonderes an Ihrem Setup, das Sie noch nicht erwähnt haben, oder Sie haben ein Problem in Ihrer ursprünglichen PDF-Datei repariert, als Sie es * desensibilisiert haben. – mkl