Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menghapuskan Ruang Putih Berlebihan Apabila Menggabungkan PDF?

Bagaimana untuk Menghapuskan Ruang Putih Berlebihan Apabila Menggabungkan PDF?

Mary-Kate Olsen
Lepaskan: 2024-12-26 00:48:16
asal
914 orang telah melayarinya

How to Eliminate Excessive Whitespace When Merging PDFs?

Mengalih keluar Ruang Putih semasa Penggabungan

Masalah:

Apabila menggabungkan berbilang PDF, setiap halaman dianggap sebagai halaman penuh, malah jika ia hanya mempunyai sedikit kandungan, menghasilkan warna putih yang banyak ruang.

Penyelesaian:

private void Merge(MemoryStream outputStream, List<PdfReader> inputs) {
    try {
        this.OpenDocument(outputStream);

        foreach (PdfReader reader in inputs) {
            this.Merge(reader);
        } // foreach of the PDF files to merge
    } finally {
        this.CloseDocument();
    } // try-catch-finally
} // Merge
Salin selepas log masuk

Kod ini menyediakan proses penggabungan dengan membuka dan memulakan struktur yang diperlukan.

public void Merge(PdfReader reader) {
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);

    for (int pageIndex = 1; pageIndex <= reader.NumberOfPages; pageIndex++) {
        this.Merge(reader, parser, pageIndex);
    } // foreach of the pages of the current PDF
} // Merge
Salin selepas log masuk

Di sini, setiap halaman PdfReader yang ditentukan dianalisis untuk digabungkan.

public void Merge(PdfReader reader, PdfReaderContentParser parser, int pageIndex) {
    PdfImportedPage importedPage = Writer.GetImportedPage(reader, pageIndex);
    PdfContentByte directContent = Writer.DirectContent;

    PageVerticalAnalyzer finder = parser.ProcessContent(pageIndex, new PageVerticalAnalyzer());

    if (finder.VerticalFlips.Count < 2)
        return;

    Rectangle pageSizeToImport = reader.GetPageSize(pageIndex);

    int startFlip = finder.VerticalFlips.Count - 1;
    bool first = true;

    while (startFlip > 0) {
        if (!first)
            this.NewPage();

        float freeSpace = this.YPosition - PageSize.GetBottom(BottomMargin);
        int endFlip = startFlip + 1;

        while ((endFlip > 1) && (finder.VerticalFlips[startFlip] - finder.VerticalFlips[endFlip - 2] < freeSpace))
            endFlip -= 2;

        if (endFlip < startFlip) {
            float height = finder.VerticalFlips[startFlip] - finder.VerticalFlips[endFlip];

            directContent.SaveState();
            directContent.Rectangle(0, this.YPosition - height, pageSizeToImport.Width, height);
            directContent.Clip();
            directContent.NewPath();

            this.Writer.DirectContent.AddTemplate(importedPage, 0, this.YPosition - (finder.VerticalFlips[startFlip] - pageSizeToImport.Bottom));

            directContent.RestoreState();
            this.YPosition -= height + this.Gap;
            startFlip = endFlip - 1;
        } else if (!first) {
            throw new ArgumentException(string.Format("Page {0} content too large", pageIndex));
        } // if

        first = false;
    } // while
} // Merge
Salin selepas log masuk

The Kaedah gabungan kemudian menganalisis kandungan menegak setiap halaman menggunakan kelas PageVerticalAnalyzer. Ia mengenal pasti bahagian menegak yang boleh digabungkan, menghapuskan ruang putih sambil mengekalkan kandungan.

Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan Ruang Putih Berlebihan Apabila Menggabungkan PDF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan