2010-02-18 5 views
15

Voici les exigences, les utilisateurs doivent pouvoir afficher les fichiers PDF téléchargés dans le navigateur. Ils doivent pouvoir ajouter des notes au PDF et enregistrer le PDF mis à jour sur le serveur sans devoir l'enregistrer sur leur machine et l'ouvrir en dehors du navigateur. Comment modifier un pdf dans le navigateur et l'enregistrer sur le serveur

Toutes les idées sur la façon d'y parvenir sont les bienvenues.

par la façon dont je travaille avec un site web asp.net (en C#).


Je ne contrôle pas sur ce que le pdf ressemble. Il est téléchargé côté client alors que les autres utilisateurs ont besoin de voir et une note sur le dessus du pdf.

La solution que je pensais est de rendre le PDF à un jpeg et utiliser javascript pour tracer les coordonnées de l'endroit où doit aller la note.

Voici un exemple rapide du html et javascript qui créent le JSON de la note

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     * 
     { 
      margin:0; 
      padding:0; 
     } 
     #PDF 
     { 
      position:absolute; 
      top:0; 
      bottom:0; 
      width:600px; 
      height:800px; 
      background:url(assets/images/gray.png) repeat; 
      float:left; 
     } 
     #results 
     { 
      float:right; 
     } 
     .comment 
     { 
      position:absolute; 
      border:none; 
      background-color:Transparent; 
      height:300px; 
      width:100px; 
      overflow:auto; 
      float:left; 
      top:0; 
      right:0; 
      font-family: Arial; 
      font-size:12px; 

     } 
     div.comment 
     { 
      padding-top:-20px; 
     } 
     .comment a.button 
     { 
      display:block; 
      padding-top:-20px; 
     } 
    </style> 
</head> 
<body> 
    <div> 
     <div id="PDF"></div> 

     <div id="results"> 

     </div> 
    </div> 
</body> 
</html> 

<script type="text/javascript" src="script/jquery.js"></script> 
<script type="text/javascript"> 
    var points = []; 
    $("#PDF").click(function(e) { 
     if ($("textarea.comment").length == 0) { 
      var that = this; 
      var txt = $("<textarea class='comment'></textarea>").css({ top: e.pageY, left: e.pageX }).blur(function() { $(this).remove(); }).keypress(function(e2) { 
       if (e2.keyCode == 13 && !e.shiftKey) { 
        var that2 = this; 
        $("#PDF").append($("<div class='comment'>").html(that2.value.replace(/\r/gi, "<br>")).css({ top: e.pageY, left: e.pageX })); 
        $(this).remove(); 
        points.push({ "x": e.pageX, "y": e.pageY, "text": that2.value }) 
        $("#results").append('{ "x": ' + e.pageX + ', "y": ' + e.pageY + ', "text": "' + that2.value + '" }<br/>'); 
       } 
      }); 
      $(this).append(txt); 
      txt.each(function() { this.focus(); }) 
     } 
    }); 
</script> 

Alors maintenant, je dois savoir comment (en utilisant jQuery.):

  1. Afficher un fichier pdf au format .jpeg.
  2. Recréez le fichier PDF en y ajoutant les annotations.

Répondre

6

Vous pouvez utiliser GhostScript pour rendre un PDF en JPEG.
exemple de ligne de commande:

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=output.jpg input.pdf 

Vous devez appeler Ghostscript via la version en ligne de commande (comme ci-dessus) ou utiliser un emballage. Une recherche Google relevai ce blog:

Pour créer un nouveau PDF, vous avez deux options principales:

  • Modifier le JPEG et convertir le JPEG en PDF (vous pouvez utiliser GhsotScript pour la conversion)
  • Utilisez une bibliothèque PDF qui importe votre PDF original et ajoute des données par-dessus

Pour les bibliothèques PDF voir cette question SO:

+0

vous pouvez obtenir le dernier code pour l'encapsuleur GhostscriptSharp Ghostscript à http://github.com/mephraim/ghostscriptsharp –

2

Nous le faisons en utilisant LOWAGIE sur une plate-forme de printemps/Java.

Les utilisateurs reçoivent des déclarations de taxe de vente pré-générées et peuvent ajouter certains ajustements manuels dans quelques champs. Nous recalculons ensuite les champs totaux en fonction de leur saisie manuelle et sauvegardons le tout dans notre base de données.

+1

Je crois qu'il fait référence à http://itextpdf.com/ (autrefois appelé lowagie). – cmptrgeekken

5

Ma société, Atalasoft, fournit des composants qui vous permettent de visualiser des images de document, y compris des fichiers PDF, de les annoter et de les enregistrer de nouveau dans le PDF. Dans notre suite de produits, vous avez besoin de l'imagerie de document dotImage et du module complémentaire PDF Reader. Vous utiliseriez dotAnnotate via nos contrôles Web AJAX. Voici un link to our online demo - le document affiché est un TIFF, mais vous pouvez aussi utiliser un PDF.

+0

Le lien de démonstration en ligne ne fonctionne plus. Est-il toujours disponible quelque part? – Sky

+0

Je ne suis plus chez Atalasoft. Je contacterais le service des ventes ou du support pour savoir où cela s'est passé. – plinth

2

Vous pouvez utiliser PDFSharp ou itextsharp pour créer des annotations. N'a pas essayé l'annotation PDFSharp mais iTextSharp fonctionne. Vous devrez gérer l'édition du côté serveur. copiez probablement le fichier dans un dossier temporaire, modifiez-le et sauvegardez-le.

Vous trouverez iTextSharp à http://itextsharp.sourceforge.net, exemple d'annotation: en bas à la page http://itextsharp.sourceforge.net/tutorial/ch03.html

PdfSharp: http://www.pdfsharp.net

3

Je ne pense pas que vous serez en mesure d'avoir un utilisateur de charger un fichier PDF dans le navigateur , modifiez-le, puis enregistrez-le sur le serveur sans les enregistrer sur leur machine, puis en le téléchargeant sur le serveur.Ce que vous pouvez faire est de configurer un webform avec un backend de base de données qui peut représenter le pdf, et quand ils l'éditent, vous pouvez régénérer le PDF en utilisant itextsharp et charger les informations de la base de données, de cette façon lorsque l'utilisateur revient à éditer le PDF, vous pouvez préremplir le formulaire avec ce qui existe déjà.

itextsharp est extrêmement facile à utiliser, est ici un exemple:

string sourceFile = "path/to/pdfTemplate.pdf"; 
PdfReader reader = new PdfReader(sourceFile); 
PdfStamper stamper = new PdfStamper(reader, new FileStream("path/to/store/pdf/filename.pdf", FileMode.Create)); 
AcroFields fields = stamper.AcroFields; 

//now assign fields in the form to values from your form 

fields.SetField("input1", input1.Text); 
fields.SetField("input2", input2.Text); 

//close the pdf after filling out fields 

stamper.SetFullCompression(); 
stamper.FormFlattening = true; 
stamper.Close(); 

alors si vous vouliez montrer le PDF réel, vous pouvez facilement

Response.Redirect("path/to/store/pdf/filename.pdf"); 
+0

C'est possible. Regardez ma réponse – citronas

0

Vous n'avez pas spécifié quelles sont les limites de la technologie que vous avez. Si vous pouvez considérer une solution Silverlight comme et que vous avez des ordinateurs clients prenant en charge Silverlight, vous pouvez facilement le faire.

Regardez comment Microsoft Sketchflow fonctionne, il permet à l'utilisateur d'annoter des documents dans le navigateur Web et les annotations sont conservées sur le serveur.

Voici une entreprise avec un commercial control pour annoter le PDF (et d'autres formats).

Microsoft fait cela dans leur lecteur Sketchflow. Voici un video. Bien sûr, vous n'utiliserez pas sketchflow, mais impliquerez plutôt quelque chose de similaire qui répond à vos besoins.

En bonus Silverlight 4 prend en charge le presse-papier et le glisser-déposer pour que les utilisateurs finaux puissent coller quelque chose sur le PDF et y déposer n'importe quel fichier que vous pourrez télécharger sur votre serveur.

2

Si vous êtes en mesure d'acheter une bibliothèque tierce, je recommande à peu près TxTextControl.http://www.textcontrol.com/en_US/

Avec ce contrôle, vous pouvez écrire un éditeur, qui vous permet d'utiliser votre pdf comme modèle et permet à l'utilisateur de faire des changements et de les sauvegarder. Tous dans le navigateur, sans le besoin de sélectionner manuellement un fichier temp sur l'ordinateur. L'accès est assez similaire à l'utilisation de TextProperty d'un TextBox normal.

+0

La solution est bien, mais le coût de la licence est un problème pour les petits projets. –

Questions connexes