Fermer

juin 12, 2020

Unifier PdfViewer et PdfProcessing pour Telerik UI pour WPF


Dans notre dernière version, nous avons fait nos premiers pas pour vous donner la possibilité de modifier des fichiers PDF dans Telerik UI pour WPF. Jouez avec la version bêta et dites-nous ce que vous en pensez.

Avec R2 2020, nous avons lancé une toute nouvelle initiative en Telerik UI for WPF – unifiant l'architecture sous-jacente de PdfViewer et PdfProcessing pour permettre la fonctionnalité parité. C'est la première étape vers l'activation de la fonctionnalité d'édition dans le PdfViewer, et dans cet article de blog, nous vous expliquerons la puissance de ce modèle unifié.

Au cours des versions précédentes, notre équipe a travaillé dur pour adapter le RadPdfViewer pour WPF avec lequel travailler. le modèle de bibliothèque RadPdfProcessing. Bien qu'il ait été difficile de changer le modèle d'un contrôle mature et de conserver son API publique, vos précieux commentaires ont démontré que cela serait bénéfique pour vos scénarios de développement

Êtes-vous curieux du résultat de nos efforts? J'ai hâte de vous le montrer! Une chose que je dois mentionner avant de commencer, cependant, est que ce changement est actuellement dans un état bêta et vous devrez activer explicitement le nouveau modèle. Nous continuons à le polir et à le tester pour nous assurer que le changement de modèle n'affectera aucun des clients existants avant d'appliquer officiellement le changement. Et voici l'endroit pour dire que vos commentaires seront précieux pour nous.

Single PdfFormatProvider et Single RadFixedDocument

L'unification des modèles vous permet de travailler avec la même instance RadFixedDocument, peu importe lequel des deux composants vous avoir besoin. Dans les versions précédentes, si vous aviez besoin d'importer un document avec PdfProcessing pour pouvoir le modifier puis l'afficher dans PdfViewer, vous deviez exporter le document PdfProcessing puis l'importer dans PdfViewer. Cette opération a été très pénible dans l'utilisation des composants mais n'est plus nécessaire avec le nouveau modèle! Vous pouvez importer le document, le modifier et simplement l'affecter à PdfViewer:

 PdfFormatProvider pdfFormatProvider = new PdfFormatProvider (); 
RadFixedDocument document = pdfFormatProvider.Import (stream);

this.pdfViewer. Document = document;

Passons maintenant à la partie la plus intéressante du sujet.

Activation de l'édition PDF dans RadPdfViewer

Dans cette section de l'article, je vais vous guider à travers les parties les plus importantes de la configuration de RadPdfViewer afin qu'il vous permette d'ajouter du contenu textuel à un document existant dans l'interface utilisateur. Un projet complet illustrant le scénario est disponible dans notre référentiel SDK: Ajouter un contenu de document .

Pour permettre à l'utilisateur d'écrire du contenu sur le document visualisé, nous allons créer une couche personnalisée et l'ajouter à la collection de couches de PdfViewer. Pour créer une couche qui sera utilisée par RadPdfViewer, vous devrez implémenter l'interface IUILayer.

 public class AddTextUILayer: IUILayer 

Une fois que vous l'avez implémentée, nous devons enregistrer la nouvelle couche afin qu'elle puisse être utilisée par le contrôle via UILayersBuilder:

 classe publique CustomUILayersBuilder: UILayersBuilder 
{
override protégé void BuildUILayersOverride (IUILayerContainer uiLayerContainer)
{
base.BuildUIL14 [U19] [
base.BuildUIL14] [
base.BuildContainer [] [1945451414] UILayers.AddAfter (DefaultUILayers.ContentElementsUILayer, new AddTextUILayer ());
}
}

Et tout ce qui reste est d'utiliser le nouveau générateur:

 CustomUILayersBuilder uILayersBuilder = new CustomUILayersBuilder14;) ] ExtensibilityManager.RegisterLayersBuilder (uILayersBuilder); 

Le nouveau calque nous permettra d'afficher une zone de texte sur l'emplacement où l'utilisateur a cliqué et d'obtenir le valu e ils ont inséré. La partie la plus importante de l'implémentation de la couche est la méthode SubmitChangesAndRemoveTextBox () qui est invoquée lorsque la zone de texte a perdu son focus. Il montre comment mettre à jour le document à l'aide de l'API de PdfProcessing. Une fois que vous l'avez mis à jour en interne, n'oubliez pas d'invalider l'interface utilisateur afin que vos modifications puissent être respectées et visualisées pour l'utilisateur. Pour activer cela, nous avons exposé la méthode PdfViewer.InvalidatePageUI () .

 private void SubmitChangesAndRemoveTextBox (expéditeur d'objet)
{
    TextBox textBox = (TextBox) expéditeur;
 
    textBox.LostFocus - = this.TextBox_LostFocus;
    textBox.KeyDown - = this.TextBox_KeyDown;
 
    this.canvas.Children.Remove (textBox);
 
    string text = textBox.Text;
 
    Page RadFixedPage = this.context.Page;
 
    Editeur FixedContentEditor = nouveau FixedContentEditor (page);
    editor.Position.Translate (this.mouseLocation.X, this.mouseLocation.Y);
    editor.DrawText (texte);
 
    RadPdfViewer viewer = this.context.Presenter.Owner as RadPdfViewer;
    if (visualiseur! = null)
    {
        viewer.InvalidatePageUI (page);
    }
 
    this.hasActiveTextBox = false;
} 

Voici à quoi ressemble la fonctionnalité:

 PDFViewer "title =" PDFViewer "/></p data-recalc-dims=

Plus arrive. Voulez-vous essayer?

Comme je l'ai mentionné au début de la publication, la fonctionnalité est actuellement en version bêta et n'est pas activée par défaut car nous travaillons toujours à la peaufiner avant de la présenter officiellement à tous nos utilisateurs. Nous avons fourni des options pour essayer le nouveau modèle alors que nous prévoyons de migrer PdfViewer pour l'utiliser cela et vos commentaires nous aident toujours beaucoup.

Vous pouvez maintenant tester le nouveau moteur et nous faire savoir si vous trouvez quelque chose que vous aimeriez voir implémenté différemment ou corrigé. Nous vous encourageons à tester le nouveau comportement du contrôle et partagez vos commentaires avec nous afin que nous puissions prendre en compte les différents points de vue et scénarios que vous pourriez avoir avant le changement officiel.

Voyons comment procéder

L'option la plus simple pour configurer PdfViewer pour utiliser le nouveau modèle est par ses paramètres d'importation par défaut. Nous avons introdu ced une nouvelle propriété appelée UsePdfProcessingModel afin que vous puissiez basculer entre les deux modèles utilisés par le contrôle. Voici comment le définir:

 this.pdfViewer.DefaultFormatProviderSettings.UsePdfProcessingModel = true; 

Si vous utilisez la classe PdfFormatProvider pour importer les documents dans le contrôle, vous pouvez utiliser le même paramètre appliqué au fournisseur de format:

 Paramètres FormatProviderSettings = nouveau FormatProviderSettings (ReadingMode.OnDemand); 
settings.UsePdfProcessingModel = true;
PdfFormatProvider provider = new PdfFormatProvider (stream, settings);
RadFixedDocument doc = provider.Import (stream);
this.pdfViewer.Document = doc;

Vous utilisez déjà PdfProcessing? Aucun problème! Attribuez simplement l'instance RadFixedDocument importée à la propriété Document de RadPdfViewer:

 en utilisant (var stream = File.OpenRead (filePath)) 
{
PdfFormatProvider provider = new PdfFormatProvider ();
provider.ImportSettings = PdfImportSettings.ReadOnDemand;
RadFixedDocument doc = provider.Import (stream);
this.pdfViewer.Document = doc;
}

Note

Dans cette version, nous annonçons la disponibilité immédiate de cette nouvelle architecture de modèle pour RadPdfViewer. Il est toujours en Aperçu et facultatif pour le moment car nous travaillons toujours sur l'ajout de fonctionnalités et de stabilité. À ce stade, nous améliorons les performances du modèle et ajoutons des mécanismes de mise en cache. Une fois que nous aurons atteint la parité complète des fonctionnalités, nous passerons ensuite entièrement au nouveau modèle. C'est pourquoi toute l'équipe sera heureuse si vous testez la nouvelle architecture et partagez vos commentaires avec nous. Cela nous aidera à nous assurer que nous avons couvert tous les scénarios clients et que le nouveau modèle est stable autant que possible.

Essayez-le vous-même et partagez vos commentaires

Assurez-vous d'obtenir la dernière version et essayez le nouveau modèle du contrôle RadPdfViewer pour WPF . Ne soyez pas timide et partagez vos commentaires! Nous sommes plus que ravis d'entendre ce que vous pensez, donc si vous avez des commentaires ou des suggestions, nous sommes toujours là pour répondre à toutes vos questions :). Vous pouvez utiliser Telerik UI pour WPF Feedback Portal et comme toujours, notre système de billetterie.

Si vous n'avez pas installé les composants, dépêchez-vous et téléchargez un essai aujourd'hui: Essayez l'interface utilisateur pour WPF

Nous avons hâte d'entendre vos commentaires concernant le nouveau moteur de RadPdfViewer!





Source link