titulo saber quien propiedades programa para online ocultar metadatos las hizo fecha eliminar editar como cambiar borrar autor archivo pdf uiwebview

saber - eliminar metadatos de un archivo pdf



UIWebView sin copiar/pegar cuando se muestran archivos PDF (8)

Intenté desactivar Copiar / Pegar en UIWebView utilizando una categoría y reemplazando canPerformAction y devolviendo NO para copiar, cortar y pegar selectores.

Funcionó como se esperaba cuando cargué una página web o todos los demás formatos de documento (por ejemplo, docx, pptx, rtf, txt), pero no cuando cargué un documento PDF en UIWebView.

Parece que hay algún mecanismo diferente que maneja documentos PDF en UIWebView que maneja / responde al selector Copiar y, por lo tanto, no puedo bloquearlo.

También traté de deshabilitar la interacción del usuario para todas las subvistas de UIScrollView de UIWebView, que funcionó bien para otros formatos de documentos excepto PDF.

¿Alguien puede ayudar a averiguar cómo desactivar Copiar en UIWebView para documentos PDF también?


De acuerdo, entonces he estado experimentando el mismo problema yo mismo y parezco encontrar una solución, incluso si es parcial.

Lo que hago es usar un UILongPressGestureRecognizer para deshabilitar los gestos de pulsación larga que pueden llevar a copiar / pegar.

El código:

UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; // allocating the UILongPressGestureRecognizer longPress.allowableMovement=100; // Making sure the allowable movement isn''t too narrow longPress.minimumPressDuration=0.3; // This is important - the duration must be long enough to allow taps but not longer than the period in which the scroll view opens the magnifying glass longPress.delegate=self; // initialization stuff longPress.delaysTouchesBegan=YES; longPress.delaysTouchesEnded=YES; longPress.cancelsTouchesInView=YES; // That''s when we tell the gesture recognizer to block the gestures we want [webView addGestureRecognizer:longPress]; // Add the gesture recognizer to the view and scroll view then release [[webView scrollView] addGestureRecognizer:longPress]; [longPress release];


Esta solución funcionó para mí:

MÉTODO 1 - Detectar prensas largas personalizadas

A) Crea una subclase de UILongPressGestureRecogniser.

B) Incluye el método canBePreventedByGestureRecognizer: en tu subclase, como este:

Encabezamiento:

#import <UIKit/UIKit.h> @interface CustomLongPress : UILongPressGestureRecognizer @end

Implementación:

#import "CustomLongPress.h" @implementation CustomLongPress - (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer*)preventedGestureRecognizer { return NO; } @end

Ese es el único código que necesita en la subclase.

C) Abra la vista que contiene su lector de uiwebview / pdf. Incluya su subclase: #import "CustomLongPress.h" y luego agregue el UILongPressGestureRecogniser personalizado a su UIWebView, así:

- (void)viewDidLoad { [super viewDidLoad]; //Load UIWebView etc //Add your custom gesture recogniser CustomLongPress * longPress = [[CustomLongPress alloc] initWithTarget:self action:@selector(longPressDetected)]; [pdfWebView addGestureRecognizer:longPress]; }

D) Detecta la pulsación larga y desactiva la interacción de usuario de tu UIWebView y luego vuelve a encenderla:

-(void)longPressDetected { NSLog(@"long press detected"); [pdfWebView setUserInteractionEnabled:NO]; [pdfWebView setUserInteractionEnabled:YES]; }

Aparentemente, la razón por la que esto funciona es porque UIWebView captura prensas largas con sus propios reconocedores de gestos, con la exclusión de cualquier reconocimiento de gestos adicional que hayas agregado. Pero al subclasificar los reconocedores de gestos y evitar su exclusión al devolver "NO" al método canBePreventedByGestureRecognizer: se anula el comportamiento predeterminado.

Una vez que puede detectar las pulsaciones largas en archivos PDF, al desactivar la interacción de usuario y luego de nuevo, se evita que UIWebView active su comportamiento predeterminado, es decir, al iniciar un UIMenu "Copiar / Definir" o al presionar un enlace, al abrir una hoja de cálculo emergente con acciones "Copiar" y "Abrir".

MÉTODO 2 - Catch UIMenu NSNotification

Alternativamente, si solo quiere bloquear el UIMenu "Copiar / Definir", (pero no afecta las pulsaciones largas), puede agregar esta línea (escuchando UIMenuControllerDidShowMenuNotification) a su ViewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuShown) name:UIMenuControllerDidShowMenuNotification object:nil];

y luego agregue este método, usando el mismo método UserInteraction Off / On como se indica arriba:

-(void)menuShown { NSLog(@"menu shown"); [pdfWebView setUserInteractionEnabled:NO]; [pdfWebView setUserInteractionEnabled:YES]; }

Primer método tomado de: https://devforums.apple.com/thread/72521?start=25&tstart=0 , y segundo método desde algún lugar en Stack, perdón olvidado donde. Por favor incluye si sabes.


Gran respuesta Zubaba. Estoy usando un webView para mostrar texto en color y en negrita, y tuve el mismo problema. Puse su solución en un método y lo llamo justo después de inicializar WebView. No parece necesitar el delegado.

self.textView = [[UIWebView alloc] initWithFrame:textFrame]; [self longPress:self.textView]; - (void)longPress:(UIView *)webView { UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress)]; // allocating the UILongPressGestureRecognizer longPress.allowableMovement=100; // Making sure the allowable movement isn''t too narrow longPress.minimumPressDuration=0.3; // This is important - the duration must be long enough to allow taps but not longer than the period in which the scroll view opens the magnifying glass longPress.delaysTouchesBegan=YES; longPress.delaysTouchesEnded=YES; longPress.cancelsTouchesInView=YES; // That''s when we tell the gesture recognizer to block the gestures we want [webView addGestureRecognizer:longPress]; // Add the gesture recognizer to the view and scroll view then release [webView addGestureRecognizer:longPress];

}

- (void)handleLongPress { }


UILongPressGestureRecognizer se encuentra en UIPDFPageView. Para obtener acceso a esta vista, mire la jerarquía de vistas en el menú Depurar, actualmente puede acceder a esta vista de manera similar una vez que carga el pdf a la vista web:

let pdfPageView = myWebView.scrollview?.subviews[0]?.subviews[0]

Luego, para eliminar Long Press, utilice este método mientras pasa en pdfPageView:

func removeLongPressFromView(view: UIView){ if let gestures = view.gestureRecognizers{ for gesture in gestures{ if gesture is UILongPressGestureRecognzier{ view.removeGestureRecognizer(gesture) } } } }


En caso de que alguien necesite la respuesta de Zubaba en Swift 3;

let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress)) longPress.allowableMovement = 100 longPress.minimumPressDuration = 0.3 longPress.delegate = self longPress.delaysTouchesBegan = true longPress.delaysTouchesEnded = true longPress.cancelsTouchesInView = true yourWebView.addGestureRecognizer(longPress) yourWebView.scrollView.addGestureRecognizer(longPress) func handleLongPress() { // Show some alert to inform user or do nothing. }


Buscando una solución Xamarin.iOS.

var longPressGestureRecognizer = new CustomLongPressGestureRecognizer ((UILongPressGestureRecognizer obj) => { Console.WriteLine ("CustomLongPressGestureRecognizer action"); }); webView.AddGestureRecognizer (longPressGestureRecognizer);

El enfoque dado por Zubaba podría verse así:

public class ZubabaLongPressGestureRecognizer : UIKit.UILongPressGestureRecognizer { public ZubabaLongPressGestureRecognizer (Action<UILongPressGestureRecognizer> action) : base (action) { AllowableMovement = 100; MinimumPressDuration = 0.3; DelaysTouchesBegan = true; DelaysTouchesEnded = true; CancelsTouchesInView = true; } }

El menú abrir / copiar / cancelar aún muestra la primera vez que se mantiene un vínculo por página PDF. Después de esa primera pulsación larga, sin embargo, no aparece correctamente para esa página. Que esto sea dependiente de la página PDF no me da confianza de que haya una solución disponible.

Las soluciones de Johnny Rockex pueden verse así:

public class RockexLongPressGestureRecognizer : UIKit.UILongPressGestureRecognizer { public RockexLongPressGestureRecognizer(UIKit.UIWebView webView, Action<UILongPressGestureRecognizer> action) : base(UserInteractionAction(webView) + action) { } private static Action<UILongPressGestureRecognizer> UserInteractionAction(UIKit.UIWebView webView) { return (UILongPressGestureRecognizer obj) => { webView.UserInteractionEnabled = false; webView.UserInteractionEnabled = true; }; } public override bool CanPreventGestureRecognizer(UIGestureRecognizer preventedGestureRecognizer) { return false; } }

y

notificationToken1 = UIMenuController.Notifications.ObserveMenuFrameDidChange (Callback); notificationToken2 = NSNotificationCenter.DefaultCenter.AddObserver(UIMenuController.DidShowMenuNotification, Callback);

No fui capaz de hacer nada. De manera amigable, alguien más lo ha hecho mejor con un arreglo de Xamarin.iOS


Aquí hay una modificación a la respuesta de Zubaba en Swift 3 que terminó trabajando para que elimine la advertencia. Cambié la tarea longPress.delegate = self a longPress.delegate = self as? UIGestureRecognizerDelegate longPress.delegate = self as? UIGestureRecognizerDelegate .

let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress)) longPress.allowableMovement = 100 longPress.minimumPressDuration = 0.3 longPress.delegate = self as? UIGestureRecognizerDelegate longPress.delaysTouchesBegan = true longPress.delaysTouchesEnded = true longPress.cancelsTouchesInView = true webView.addGestureRecognizer(longPress) webView.scrollView.addGestureRecognizer(longPress) webView.loadRequest(request)


1.ios11 iphone6 ​​Object-C sin copiar / pegar / buscar / compartir

2.

viewDidLoad{ ....... [self setupExclude]; } - (void)setupExclude{ UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPG)]; longPress.minimumPressDuration = 0.2; [self.webview addGestureRecognizer:longPress]; UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:nil]; singleTapGesture.numberOfTapsRequired = 1; singleTapGesture.numberOfTouchesRequired = 1; [self.webview addGestureRecognizer:singleTapGesture]; UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(longPG)]; doubleTapGesture.numberOfTapsRequired = 2; doubleTapGesture.numberOfTouchesRequired = 1; [self.webview addGestureRecognizer:doubleTapGesture]; [singleTapGesture requireGestureRecognizerToFail:doubleTapGesture]; } - (BOOL)canPerformAction:(SEL)action withSender:(id)sender{ BOOL res = [super canPerformAction:action withSender:sender]; UIMenuController.sharedMenuController.menuVisible = NO; self.webview.userInteractionEnabled = NO; self.webview.userInteractionEnabled = YES; return res; } - (void)longPG{ UIMenuController.sharedMenuController.menuVisible = NO; self.webview.userInteractionEnabled = NO; self.webview.userInteractionEnabled = YES; }

3. ¡Hecho!