Câu hỏi Có thể chỉnh sửa tệp PDF trực tiếp không?


Tôi có một tập tin PDF được tạo ra như một phần của tập tin trợ giúp. Luôn có những công cụ phá vỡ trễ đi vào một tệp văn bản (ví dụ: "Có gì mới trong phiên bản này") và trong khi Trợ giúp và Thủ công cho phép bạn đưa nội dung từ tệp văn bản, nó chỉ hoạt động cho đầu ra CHM chứ không phải cho PDF.

Tôi tự hỏi nếu tôi có thể làm điều đó bằng cách tạo một chuỗi giữ chỗ duy nhất thay thế và sau đó sử dụng một số công cụ (tôi có thể cần phải viết một) để thực hiện tìm kiếm và thay thế chuỗi duy nhất đó bằng nội dung của tệp văn bản thông tin phá vỡ muộn.

Điều này có khả thi không? Hoặc nó sẽ phá vỡ một số loại cấu trúc nội bộ?


4
2018-06-22 00:00


gốc


Khi bạn thay thế chuỗi văn bản bằng một chuỗi khác, bạn phải theo dõi độ dài văn bản thay đổi. Điều này ảnh hưởng đến ít nhất hai thuộc tính và cấu trúc khóa PDF nội bộ: (1) xref bảng đại diện cho ToC bên trong của các đối tượng, chú ý đến độ lệch byte của các điểm bắt đầu đối tượng; (2) /Length cho luồng bao gồm văn bản đã thay đổi. Nếu không thì tệp sẽ bị coi là bị hỏng. Ngoài ra, để chỉnh sửa văn bản, phông chữ đầy đủ (không được subsetted) phải được nhúng vào PDF. - Kurt Pfeifle
Có lẽ đã đến lúc xem xét một sản phẩm khác, như HelpNDoc hoặc Precision Helper. Ngoài ra còn có các thành phần Delphi để xử lý các tệp PDF có thể làm những gì bạn cần, như PowerPDF hoặc một trong số các mục từ Danh sách của About.com - afrazier


Các câu trả lời:


"Nó phụ thuộc."

Có thể bạn sẽ cần một vài điều: Trước hết, văn bản không thể bị rasterized. Nếu đó là trường hợp, thì tất cả mọi phiên cược đều bị tắt. Thứ hai, toàn bộ phông chữ phải được nhúng. Nếu phông chữ được subsetted (mà thường là trường hợp) thì bạn có thể không có glyphs yêu cầu. Cuối cùng, bạn có thể muốn giới hạn kích thước của vùng văn bản đang được sửa đổi để càng nhỏ càng tốt, chỉ để tránh phải đối phó với một lượng lớn reflow. Bạn sẽ muốn có nhiều khoảng trắng xung quanh plcaeholder càng tốt.

Bây giờ, điều này có thể sẽ không phải là thứ mà bạn sẽ có thể làm với một trình soạn thảo văn bản đơn giản, nhưng có thể có một số công cụ quản lý PDF có thể thực hiện việc thay thế cho bạn.


5
2018-06-22 01:00



Hmmmm .... Reflow chính xác là những gì tôi không muốn. Có 2 thứ tôi muốn nhúng - một trong số đó là phiên bản (1.2.3.456) - đó không phải là vấn đề lớn. Khác là một tập tin văn bản - tức là định dạng với ngắt dòng - Tôi đoán tôi sẽ cần phải thêm một số \ n. Thật không may với việc sử dụng trình soạn thảo văn bản, tôi không thể nhìn thấy bất kỳ khối văn bản nào. Tôi chắc rằng tập tin không bị rasterized - tôi có thể chọn văn bản bằng chuột chẳng hạn. - rossmcm
Nội dung gần như chắc chắn được nén, vì vậy bạn sẽ không thể tìm thấy văn bản của bạn khá dễ dàng. - afrazier
vâng, tôi đoán vậy. Có các khối nhị phân lớn trong tệp. Tôi đoán tôi đang bối rối. - rossmcm


Nếu bạn sẵn sàng để có được bàn tay của bạn bẩn; iText nên làm việc.

ví dụ trong đó bao gồm một loạt các chủ đề và sẽ giúp bạn chỉ đúng hướng.

Lưu ý ví dụ dưới đây; sử dụng document.add phương pháp để thêm một Paragraph vào một tài liệu PDF hiện có.

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



Tôi sẵn sàng để có được bàn tay của tôi bẩn, nhưng không hoàn toàn bẩn ... Tôi đang sử dụng Delphi. Đó là một sự xấu hổ không có cổng - nó trông khá toàn diện. - rossmcm
Nhận một freelancer. Hoạt động trong Java, có thể gọi nó là một quá trình - tgkprog


Bạn có thể sử dụng (Mã nguồn mở) qpdf tiện ích (có sẵn cho Linux, Windows và MacOS X) để giải nén tệp PDF thành định dạng dễ đọc hơn. Từ đó bạn có thể đi và thử một số lời khuyên khác từ các câu trả lời khác:

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

Tệp oUtput.pdf sẽ có luồng đối tượng không nén, tất cả các đối tượng được đánh số lại và sắp xếp lại theo thứ tự tăng dần và một số nhận xét hữu ích được nhúng vào tệp. Các tập tin có thể được chỉnh sửa trong một trình soạn thảo văn bản (nếu nó không gây rối với các phần nhị phân còn lại).


3
2018-06-22 06:00





pdfedit có thể thực hiện thủ thuật này - để báo cáo sự xáo trộn trên trang web sourceforge của họ

Biên tập miễn phí cho các tài liệu PDF. Có thể chỉnh sửa hoàn toàn các tài liệu PDF bằng PDFedit. Bạn có thể thay đổi các đối tượng pdf thô (dành cho người dùng nâng cao) hoặc sử dụng nhiều chức năng gui. Chức năng có thể dễ dàng mở rộng bằng cách sử dụng một ngôn ngữ kịch bản (ECMAScript)

Kể từ tháng 6 năm 2013, có các phiên bản * nix và Windows.


1
2018-06-22 01:19



Windows thật không may - rossmcm
nó bị cáo buộc hoạt động trong Cygwin hoặc Colinux / andlinux nhưng tôi chưa bao giờ làm việc đó, - Journeyman Geek♦