Вопрос Возможно ли отредактировать файл PDF напрямую?


У меня есть файл PDF, который создается как часть компиляции файла справки. Существует всегда запаздывающий материал, который входит в текстовый файл (например, «Что нового в этой версии»), а Help и Manual позволяют включать материал из текстового файла, который он работает только для вывода CHM, а не для PDF.

Мне интересно, могу ли я сделать это, создав вместо этого уникальную строку-заполнитель, а затем используя какой-то инструмент (возможно, мне нужно будет написать его), чтобы выполнить поиск и замену этой уникальной строки содержимым текстового файла с последним словом.

Это возможно? Или это сломает какую-то внутреннюю структуру?


4
2018-06-22 00:00


происхождения


Когда вы заменяете текстовую строку другим, вы должны отслеживать изменение длины текста. Это влияет как минимум на два внутренних свойства и структуры PDF-файла: (1) xref таблица, которая представляет внутренний ToC объектов, отмечая смещение байта начальной точки объекта; (2) /Length ключ для потока, который включает измененный текст. В противном случае файл будет считаться поврежденным. Кроме того, для редактирования текста полный (не подмножественно) шрифт должен быть встроен в PDF. - Kurt Pfeifle
Возможно, пришло время посмотреть на другой продукт, например HelpNDoc или Precision Helper. Существуют также компоненты Delphi для работы с PDF-файлами, которые могут делать то, что вам нужно, например PowerPDF или один из предметов из Список - afrazier


ответы:


"Это зависит."

Вам, вероятно, понадобится пара вещей: во-первых, текст не может быть растрирован. Если это так, то все ставки отключены. Во-вторых, весь шрифт должен быть встроен. Если шрифт был подмножеством (что чаще всего имеет место), то у вас могут не быть требуемые символы. Наконец, вы, вероятно, захотите ограничить размер изменяемой текстовой области настолько малой, насколько это возможно, просто для того, чтобы не иметь дело с большими объемами переплава. Вам нужно столько же пробелов вокруг plcaeholder, насколько это возможно.

Теперь, вероятно, это не будет то, что вы сможете сделать с помощью простого текстового редактора, но могут быть некоторые инструменты для создания PDF-файлов, которые могут сделать вам замену.


5
2018-06-22 01:00



Хмммм ... Reflow - это именно то, чего я не хочу. Есть две вещи, которые я хочу внедрить - одна из них - версия (1.2.3.456) - это не должно иметь большого значения. Другой - текстовый файл, т. Е. Отформатированный с разрывами строк - я думаю, мне нужно будет добавить некоторые \ n. К сожалению, выталкивая PDF-файл с помощью текстового редактора, я не вижу текстовых блоков. Я уверен, что файл не растрирован - я могу выбрать текст с помощью мыши, например. - rossmcm
Содержимое почти наверняка сжато, поэтому вы не сможете легко найти свой текст. - afrazier
да, я думаю, все. В файле есть большие комки двоичного кода. Наверное, я в тупике. - rossmcm


Если вы готовы заразиться руками; IText должно сработать.

Есть Примеры которые охватывают широкий круг тем и должны указывать в правильном направлении.

Обратите внимание на приведенный ниже пример; используя document.add метод добавления Paragraph в существующий документ PDF.

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



Я хочу, чтобы мои руки были грязными, но не настолько грязными ... Я использую Delphi. Жаль, что нет порта - он выглядит довольно всеобъемлющим. - rossmcm
Получите фрилансера. Работает на Java, может называть его процессом - tgkprog


Вы можете использовать (Open Source) qpdf утилита (доступна для Linux, Windows и MacOS X) для распаковки PDF в более читаемый формат. Оттуда вы можете пойти и попробовать другие советы из других ответов:

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

Файл oUtput.pdf будет иметь несжатые потоки объектов, все объекты, пронумерованные и повторно отсортированные в порядке возрастания, и некоторые полезные комментарии, посыпанные в файл. Файл может быть отредактирован в текстовом редакторе (если он не вмешивается в оставшиеся двоичные разделы).


3
2018-06-22 06:00





PDFedit может сделать трюк - процитировать рекламный блок на своем сайте sourceforge

Бесплатный редактор для PDF-документов. Полное редактирование PDF-документов возможно с помощью PDFedit. Вы можете изменить исходные PDF-объекты (для продвинутых пользователей) или использовать многие функции gui. Функциональность может быть легко расширена с использованием языка сценариев (ECMAScript)

По состоянию на июнь 2013 года существуют версии nix и Windows.


1
2018-06-22 01:19



Windows к сожалению - rossmcm
он якобы работает в cygwin или colinux / andlinux, но я никогда не получал его на работу, - Journeyman Geek♦