Question Est-il possible d'éditer un fichier PDF directement?


J'ai un fichier PDF qui est produit dans le cadre d'une compilation de fichier d'aide. Il y a toujours des éléments de dernière minute qui entrent dans un fichier texte (par exemple: "Qu'est-ce qui est nouveau dans cette version") et tandis que Help and Manual vous permet d'inclure des éléments d'un fichier texte, cela ne fonctionne que pour la sortie CHM. PDF

Je me demande si je peux le faire en générant une chaîne d'espace réservé unique et en utilisant un outil (je pourrais avoir besoin d'en écrire une) pour effectuer une recherche et remplacer cette chaîne unique par le contenu du fichier texte d'information.

Est-ce faisable? Ou va-t-il casser une sorte de structure interne?


4
2018-06-22 00:00


origine


Lorsque vous remplacez une chaîne de texte par une autre, vous devez suivre l'évolution de la longueur du texte. Cela influence au moins deux propriétés et structures de clé PDF internes: xref table qui représente la ToC interne des objets, en notant le décalage d'octet des points de départ de l'objet; (2) le /Length clé pour le flux qui inclut le texte modifié. Sinon, le fichier sera considéré comme corrompu. De plus, pour éditer du texte, la police complète (non complétée) doit être incorporée dans le PDF. - Kurt Pfeifle
Il est peut-être temps de regarder un autre produit, comme HelpNDoc ou Precision Helper. Il existe également des composants Delphi pour gérer les PDF qui pourraient faire ce dont vous avez besoin, comme PowerPDF ou l'un des articles de Liste de About.com - afrazier


Réponses:


"Ça dépend."

Vous aurez probablement besoin de deux choses: Tout d'abord, le texte n'a pas pu être pixellisé. Si tel est le cas, alors tous les paris sont désactivés. Deuxièmement, la police entière doit avoir été incorporée. Si la police a été subsettée (ce qui est le plus souvent le cas), vous ne pouvez pas avoir les glyphes requis. Enfin, vous voudrez probablement limiter la taille de la zone à modifier pour être aussi petite que possible, juste pour éviter de devoir gérer de grandes quantités de reflux. Vous voulez autant d'espace blanc autour du détenteur que possible.

Maintenant, ce ne sera probablement pas quelque chose que vous pourrez faire avec un éditeur de texte simple, mais il pourrait y avoir des outils de gestion de fichiers PDF qui pourraient vous être utiles.


5
2018-06-22 01:00



Hmmmm .... Reflow est exactement ce que je ne veux pas. Il y a 2 choses que je veux intégrer - l'une est la version (1.2.3.456) - cela ne devrait pas être une grosse affaire. L'autre est un fichier texte - c'est-à-dire formaté avec des sauts de ligne - je suppose que je devrais ajouter des \ n 's. Malheureusement, le fait de parcourir le PDF avec un éditeur de texte ne permet pas de voir des blocs de texte. Je suis sûr que le fichier n'est pas pixellisé - je peux sélectionner du texte avec la souris par exemple. - rossmcm
Le contenu est presque certainement compressé, vous ne pourrez donc pas trouver votre texte si facilement. - afrazier
oui, je suppose que c'est ça. Il y a de gros morceaux de binaire dans le fichier. Je suppose que je suis déconcerté. - rossmcm


Si vous êtes prêt à vous salir les mains; je Texte devrait marcher.

Il y a exemples qui couvrent un large éventail de sujets et devraient vous orienter dans la bonne direction.

Notez l'exemple ci-dessous; en utilisant le document.add méthode pour ajouter un Paragraph dans un document PDF existant.

protected void createPdf(String filename)
        throws IOException, DocumentException, SQLException {
        // Open the database connection
        DatabaseConnection connection = new HsqldbConnection("filmfestival");
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter.getInstance(document, new FileOutputStream(filename));
        // step 3
        document.open();
        // step 4
        // Add text with a local destination
        Paragraph p = new Paragraph();
        Chunk top = new Chunk("Country List", FilmFonts.BOLD);
        top.setLocalDestination("top");
        p.add(top);
        document.add(p);
        // Add text with a link to an external URL
        Chunk imdb = new Chunk("Internet Movie Database", FilmFonts.ITALIC);
        imdb.setAction(new PdfAction(new URL("http://www.imdb.com/")));
        p = new Paragraph(
            "Click on a country, and you'll get a list of movies, containing links to the ");
        p.add(imdb);
        p.add(".");
        document.add(p);
        // Add text with a remote goto
        p = new Paragraph("This list can be found in a ");
        Chunk page1 = new Chunk("separate document");
        page1.setAction(new PdfAction("movie_links_1.pdf", 1));
        p.add(page1);
        p.add(".");
        document.add(p);
        document.add(Chunk.NEWLINE);
        // Get a list with countries from the database
        Statement stm = connection.createStatement();
        ResultSet rs = stm.executeQuery(
            "SELECT DISTINCT mc.country_id, c.country, count(*) AS c "
            + "FROM film_country c, film_movie_country mc WHERE c.id = mc.country_id "
            + "GROUP BY mc.country_id, country ORDER BY c DESC");
        // Loop over the countries
        while (rs.next()) {
            Paragraph country = new Paragraph(rs.getString("country"));
            country.add(": ");
            Chunk link = new Chunk(String.format("%d movies", rs.getInt("c")));
            link.setAction(
                PdfAction.gotoRemotePage("movie_links_1.pdf", rs.getString("country_id"), false, true));
            country.add(link);
            document.add(country);
        }
        document.add(Chunk.NEWLINE);
        // Add text with a local goto
        p = new Paragraph("Go to ");
        top = new Chunk("top");
        top.setAction(PdfAction.gotoLocalPage("top", false));
        p.add(top);
        p.add(".");
        document.add(p);
        // step 5
        document.close();
        // Close the database connection
        connection.close();
    }

3
2018-06-22 04:31



Je suis prêt à me salir les mains, mais pas si sale ... J'utilise Delphi. Il est dommage qu'il n'y ait pas de port - cela semble assez complet. - rossmcm
Obtenez un pigiste. Fonctionne en Java, peut l'appeler comme un processus - tgkprog


Vous pouvez utiliser (Open Source) qpdf utilitaire (disponible pour Linux, Windows et MacOS X) pour décompresser le PDF dans un format plus lisible. À partir de là, vous pouvez essayer d'autres conseils parmi les autres réponses:

qpdf.exe ^
   --qdf ^
     input.pdf ^
     output.pdf

Le fichier oUtput.pdf contiendra des flux d'objets non compressés, tous les objets renumérotés et re-triés dans un ordre croissant, et quelques commentaires utiles seront diffusés dans le fichier. Le fichier peut être édité dans un éditeur de texte (s'il ne gêne pas les sections binaires restantes).


3
2018-06-22 06:00





pdfedit pourrait faire l'affaire - pour citer le texte sur leur site sourceforge

Editeur gratuit pour les documents PDF. L'édition complète des documents PDF est possible avec PDFedit. Vous pouvez modifier les objets pdf bruts (pour les utilisateurs avancés) ou utiliser de nombreuses fonctions d'interface graphique. La fonctionnalité peut être facilement étendue en utilisant un langage de script (ECMAScript)

En juin 2013, il existe des versions * nix et Windows.


1
2018-06-22 01:19



Windows malheureusement - rossmcm
cela fonctionne prétendument dans cygwin ou colinux / andlinux mais je ne l'ai jamais eu au travail, - Journeyman Geek♦