6

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

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

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

5 ответов5

5

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

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

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

4

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

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

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

3

Если вы хотите испачкать руки; 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();
    }
2

pdfedit может сделать трюк - процитировать рекламу на их сайте sourceforge

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

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

0

Foxit PDF Reader Enterprise Edition позволяет редактировать PDF-файлы. Существует также Master PDF, но в бесплатной версии добавлен водяной знак (который, я уверен, вам не нужен).

Кроме того, вы можете сохранить свою мастер-копию в виде документа Word (.docx) или OO Writer (.odt) и использовать эмулятор принтера (например, CutePDF Writer) для "печати" в PDF. Office 365 и OO Writer также предлагают функцию "Экспорт в PDF", что позволяет избежать необходимости редактирования PDF-файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .