web-dev-qa-db-ja.com

PDFファイルを直接編集することは可能ですか?

ヘルプファイルのコンパイルの一部として生成されるPDFファイルがあります。テキストファイルに入る最新のものが常にあります(たとえば、「このバージョンの新機能」タイプのもの)ヘルプとマニュアルではテキストファイルからのものを含めることができますが、それはCHM出力に対してのみ機能し、PDFに対しては機能しません。

代わりに一意のプレースホルダー文字列を生成し、何らかのツール(作成する必要がある場合があります)を使用してその一意の文字列を検索し、最新の情報テキストファイルの内容に置き換えることでそれを実行できるかどうか疑問に思っています。

これは実行可能ですか?それとも、ある種の内部構造を壊すのでしょうか?

6
rossmcm

"場合によります。"

おそらくいくつかのことが必要になります。まず、テキストをラスタライズすることはできません。その場合、すべての賭けは無効になります。次に、フォント全体が埋め込まれている必要があります。フォントがサブセット化されている場合(ほとんどの場合)、必要なグリフがない可能性があります。最後に、大量のリフローを処理する必要がないように、変更するテキスト領域のサイズをできるだけ小さく制限することをお勧めします。 plcaeholderの周りにできるだけ多くの空白が必要です。

さて、これはおそらくあなたが単純なテキストエディタでできることではないでしょう、しかしあなたのために代用をすることができるいくつかのPDF操作ツールがあるかもしれません。

5
afrazier

(オープンソース)qpdfユーティリティ(Linux、Windows、MacOS Xで利用可能)を使用して、PDFをより読みやすい形式に解凍できます。そこから、試してみることができます。他の回答からの他のアドバイスのいくつか:

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

ファイルoUtput.pdfには、圧縮されていないオブジェクトストリーム、すべてのオブジェクトの番号が付け直され、昇順で並べ替えられ、役立つコメントがファイルに散りばめられています。ファイルはテキストエディタで編集できます(残りのバイナリセクションを混乱させない場合)。

6
Kurt Pfeifle

手を汚しても構わないと思っているなら; iText は機能するはずです。

examples があり、幅広いトピックをカバーしており、正しい方向に向けられるはずです。

以下の例に注意してください。 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
Aaron McIver

pdfedit トリックを行うかもしれません-sourceforgeサイトの宣伝文句を引用する

PDFドキュメント用の無料エディター。PDFドキュメントの完全な編集はPDFeditで可能です。生のpdfオブジェクトを変更するか(上級ユーザー向け)、多くのGUI関数を使用できます。 。機能は、スクリプト言語(ECMAScript)を使用して簡単に拡張できます。

2013年6月の時点で、* nixバージョンとWindowsバージョンがあります。

2
Journeyman Geek

Foxit PDF Reader Enterprise EditionではPDFを編集できます。マスターPDFもありますが、無料版では透かしが追加されています(これは不要だと思います)。

または、マスターコピーをWordとして保持することもできます(.docx)またはOOライター(.odt)文書化し、プリンターエミュレーター( CutePDF Writer など)を使用してPDFに「印刷」します。 Office365とOO Writerは、「PDFにエクスポート」機能も提供します。これにより、最初からPDFを編集する必要がなくなります。

0
Agi Hammerthief