Kết hợp các tệp HTML thành một tệp PDF

Có hai câu trả lời cho câu hỏi này. Câu trả lời số 2 thường tốt hơn câu trả lời số 1, nhưng tôi đưa ra cả hai lựa chọn vì có thể có những trường hợp cụ thể mà câu trả lời số 1 được ưu tiên hơn

dữ liệu thử nghiệm. trong cả hai câu trả lời, chúng tôi sẽ sử dụng lại các tệp HTML mà chúng tôi đã sử dụng trong các ví dụ trước

  • Thư mời. html,

  • sxsw. html và

  • phim. html

Chúng tôi đặt đường dẫn đến các tệp này trong một mảng

public static final String[] SRC = {
    String.format("%sinvitation.html", BASEURI),
    String.format("%ssxsw.html", BASEURI),
    String.format("%smovies.html", BASEURI)
};

Chúng tôi sẽ sử dụng tiện ích bổ sung pdfHTML để phân tích cú pháp ba tệp này và kết quả là chúng tôi muốn có một tệp PDF duy nhất

Trả lời 1. trong ví dụ C07E01_CombineHtml, chúng tôi chuyển đổi từng HTML thành một tệp PDF riêng biệt trong bộ nhớ. Chúng tôi hợp nhất các tệp này thành một tệp PDF bằng cách sử dụng PdfMerger

public void createPdf(String baseUri, String[] src, String dest) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    properties.setBaseUri(baseUri);
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);
    for (String html : src) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfDocument temp = new PdfDocument(new PdfWriter(baos));
        HtmlConverter.convertToPdf(new FileInputStream(html), temp, properties);
        temp = new PdfDocument(
            new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
        merger.merge(temp, 1, temp.getNumberOfPages());
        temp.close();
    }
    pdf.close();
}

Trong ví dụ này, chúng tôi giới thiệu lớp PdfMerger. Lớp này có thể hợp nhất các tệp PDF khác nhau trên một trang trên cơ sở mỗi trang thành một PdfDocument chính, trong trường hợp này là pdf. Nếu bạn có ba tài liệu PDF một trang, PdfMerger có thể hợp nhất chúng thành một tệp PDF duy nhất có ba trang, lấy các trang như hiện tại, bất kể lượng nội dung chứa trong đó là bao nhiêu. Một trang đầy một nửa trong PDF gốc sẽ đầy một nửa trong PDF được hợp nhất


Bạn có thể tìm thêm thông tin về lớp PdfMerger trong Chương 6 (Java/. NET) của iText 7. Hướng dẫn khởi động (Java/. NET)


Chúng tôi lặp lại các đường dẫn đến các tài liệu HTML khác nhau. Chúng tôi chuyển đổi chúng thành PDF trong bộ nhớ bằng cách sử dụng ByteArrayOutputStream. Chúng tôi đọc các byte của ByteArrayOutputStream này thành một phiên bản

public void createPdf(String baseUri, String[] src, String dest) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    properties.setBaseUri(baseUri);
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);
    for (String html : src) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfDocument temp = new PdfDocument(new PdfWriter(baos));
        HtmlConverter.convertToPdf(new FileInputStream(html), temp, properties);
        temp = new PdfDocument(
            new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
        merger.merge(temp, 1, temp.getNumberOfPages());
        temp.close();
    }
    pdf.close();
}
1 và chúng tôi đã sử dụng
public void createPdf(String baseUri, String[] src, String dest) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    properties.setBaseUri(baseUri);
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdf = new PdfDocument(writer);
    PdfMerger merger = new PdfMerger(pdf);
    for (String html : src) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfDocument temp = new PdfDocument(new PdfWriter(baos));
        HtmlConverter.convertToPdf(new FileInputStream(html), temp, properties);
        temp = new PdfDocument(
            new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
        merger.merge(temp, 1, temp.getNumberOfPages());
        temp.close();
    }
    pdf.close();
}
1 này để tạo một PdfDocument tạm thời. Chúng tôi hợp nhất PdfDocument tạm thời này vào phiên bản PdfMerger. Khi chúng tôi đã tạo và hợp nhất tất cả các tệp PDF, chúng tôi sẽ đóng bản gốc PdfDocument

Trong trường hợp này, kết quả là một tài liệu PDF gồm 9 trang. 1 trang có nội dung thư mời. html, 2 trang có nội dung sxsw. html, và 6 trang có nội dung phim. html

Kết hợp các tệp HTML thành một tệp PDF

Sử dụng PdfMerger để kết hợp các tệp PDF khác nhau

Nếu bạn muốn tránh có quá nhiều khoảng trắng, như trường hợp ở trang 1 trong ví dụ của chúng tôi, bạn cần xem câu trả lời thứ hai cho câu hỏi này

Câu trả lời số 2. Trong ví dụ C07E02_CombineHtml2, chúng tôi phân tích cú pháp các tệp HTML khác nhau thành một loạt các phần tử iText. Chúng tôi thêm tất cả các yếu tố này vào một tài liệu PDF duy nhất

public void createPdf(String baseUri, String[] src, String dest) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    properties.setBaseUri(baseUri);
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdf = new PdfDocument(writer);
    Document document = new Document(pdf);
    for (String html : src) {
        List elements =
            HtmlConverter.convertToElements(new FileInputStream(html), properties);
        for (IElement element : elements) {
            document.add((IBlockElement)element);
        }
    }
    document.close();
}

Trong ví dụ này, chúng tôi sử dụng một kỹ thuật từ chương 1, nhưng thay vì thêm các phần tử được tạo từ một tệp HTML vào một tệp PDF, chúng tôi lặp qua ba tệp HTML khác nhau, phân tích các tệp này thành danh sách phần tử và chúng tôi thêm các phần tử này

Điều này dẫn đến một tài liệu PDF chỉ có 8 trang thay vì 9 trang mà chúng tôi có trước đây

Kết hợp các tệp HTML thành một tệp PDF

Phân tích các tệp HTML khác nhau thành các phần tử iText

Nội dung thư mời. html ngay sau đó là nội dung của sxsw. html trên trang đầu tiên. các sxsw. nội dung html tiếp tục trên trang thứ hai và ngay sau đó là nội dung phim. html

Làm cách nào để kết hợp các tệp HTML thành một?

Cách hợp nhất tệp HTML trực tuyến .
Chọn hoặc thả tài liệu HTML của bạn để tải lên để hợp nhất
Sau khi tải lên hoàn tất, hãy kéo hình thu nhỏ của tài liệu HTML để sắp xếp lại chúng (nếu cần)
Nhấp vào nút Hợp nhất ngay để bắt đầu quá trình hợp nhất
Khi các tài liệu HTML của bạn được hợp nhất, hãy nhấp vào nút Tải xuống ngay

Bạn có thể chuyển đổi nhiều tệp sang PDF cùng một lúc không?

Chuyển đổi nhiều tệp thành một tệp PDF duy nhất. Nếu các tệp của bạn đã ở định dạng PDF, bạn có thể sử dụng công cụ Hợp nhất các tệp PDF miễn phí từ các dịch vụ trực tuyến của Acrobat . Nếu các tệp của bạn chưa ở định dạng PDF, bạn có thể sử dụng đăng ký chỉnh sửa Adobe Acrobat Pro PDF để chuyển đổi và hợp nhất các tệp đồng thời.

Trình chuyển đổi HTML sang PDF tốt nhất là gì?

5 công cụ chuyển đổi HTML sang PDF miễn phí hàng đầu .
#1 Đám mâyChuyển đổi. CloudConvert là trình chuyển đổi tài liệu trực tuyến hỗ trợ PDF, DOCX, PPTX và XLSX. .
#2 Chuyển đổi trực tuyến. Online-Convert là một công cụ chuyển đổi trang web trực tuyến khác hỗ trợ HTML-PDF. .
#3 Chuyển đổi. Convertio là trình chuyển đổi HTML/URL sang PDF trực tuyến dành cho Windows và Mac. .
#4 Sejda