Przejdź do treści stopki
KORZYSTANIE Z IRONPDF

Jak scalać pliki PDF w C# .NET?

.NET PDF Merge Tasks with IronPDF: A Complete C# Guide: Obraz 1 - Łączenie plików PDF za pomocą IronPDF

Łączenie wielu plików PDF w jeden dokument jest częstym wymaganiem w aplikacjach biznesowych. Niezależnie od tego, czy generujesz skonsolidowane raporty finansowe, łączysz umowy prawne do archiwizacji, czy tworzysz wieloczęściowe faktury, programowe scalanie plików PDF pozwala zaoszczędzić czas i wyeliminować ręczne czynności. IronPDF zapewnia proste API, które obsługuje to za pomocą zaledwie kilku wierszy kodu C#, bez konieczności korzystania z zewnętrznych narzędzi lub programów z wiersza poleceń.

Ten przewodnik obejmuje wszystkie praktyczne scenariusze: scalanie dwóch plików, scalanie list wielu plików, przetwarzanie w pamięci za pomocą MemoryStream oraz operacje po scaleniu, takie jak ochrona hasłem i kompresja.

Zacznij od bezpłatnej wersji próbnej, aby już dziś dodać funkcje łączenia plików PDF do swojej aplikacji .NET.

Jak rozpocząć pracę z IronPDF?

Przed napisaniem jakiegokolwiek kodu scalającego zainstaluj IronPDF z NuGet. Pakiet jest przeznaczony dla platform .NET Framework 4.6.2+ oraz .NET 5/6/7/8/9/10, dzięki czemu działa w aplikacjach konsolowych, usługach ASP.NET Core, Azure Functions oraz projektach Windows Forms bez żadnych dodatkowych zależności środowiskowych.

Otwórz konsolę NuGet Package Manager Console i uruchom:

Install-Package IronPdf
Install-Package IronPdf
SHELL

Lub użyj interfejsu CLI platformy .NET:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Aby zapoznać się z instrukcją konfiguracji krok po kroku, w tym z wnioskiem o klucz licencyjny, zobacz przegląd instalacji IronPDF. Po zainstalowaniu pakietu i zastosowaniu klucza licencyjnego wszystkie przykłady zawarte w tym przewodniku będą działać bez modyfikacji.

Jak programowo łączyć dokumenty PDF?

Metoda PdfDocument.Merge zapewnia najbardziej bezpośredni sposób połączenia dwóch plików PDF w jeden plik PDF. Załaduj każdy dokument źródłowy za pomocą PdfDocument.FromFile, przekaż oba obiekty do Merge i zapisz wynik.

Faktura wejściowa nr 1

.NET PDF Merge Tasks with IronPDF: A Complete C# Guide: Image 2 - Input Invoice One

Faktura wejściowa nr 2

.NET PDF Merge Tasks with IronPDF: A Complete C# Guide: Image 3 - Input Invoice Two

using IronPdf;

// Load two input PDF files from disk
PdfDocument pdfA = PdfDocument.FromFile("invoice_one.pdf");
PdfDocument pdfB = PdfDocument.FromFile("invoice_two.pdf");

// Merge PDF documents into a single PDF
PdfDocument merged = PdfDocument.Merge(pdfA, pdfB);

// Save the merged document
merged.SaveAs("combined_invoices.pdf");
using IronPdf;

// Load two input PDF files from disk
PdfDocument pdfA = PdfDocument.FromFile("invoice_one.pdf");
PdfDocument pdfB = PdfDocument.FromFile("invoice_two.pdf");

// Merge PDF documents into a single PDF
PdfDocument merged = PdfDocument.Merge(pdfA, pdfB);

// Save the merged document
merged.SaveAs("combined_invoices.pdf");
Imports IronPdf

' Load two input PDF files from disk
Dim pdfA As PdfDocument = PdfDocument.FromFile("invoice_one.pdf")
Dim pdfB As PdfDocument = PdfDocument.FromFile("invoice_two.pdf")

' Merge PDF documents into a single PDF
Dim merged As PdfDocument = PdfDocument.Merge(pdfA, pdfB)

' Save the merged document
merged.SaveAs("combined_invoices.pdf")
$vbLabelText   $csharpLabel

Wynik

.NET PDF Merge Tasks with IronPDF: A Complete C# Guide: Obraz 4 – Połączone dokumenty PDF

Metoda Merge przyjmuje dwie instancje PdfDocument i zwraca nowy dokument zawierający wszystkie strony z obu źródeł w kolejności. Plik wynikowy zachowuje oryginalne formatowanie, obrazy, czcionki i treści osadzone z każdego pliku wejściowego. Po utworzeniu scalonego dokumentu można go zapisać na dysku, zwrócić z punktu końcowego sieci Web lub dodać nagłówki i stopki przed dostarczeniem go użytkownikom.

Należy pamiętać, że PdfDocument.FromFile działa zarówno ze ścieżkami plików, jak i ciągami URI, więc dokumenty przechowywane w chmurze typu blob storage mogą być ładowane bezpośrednio przez adres URL. Operacja scalania jest nieniszcząca: po wywołaniu oba obiekty źródłowe pozostają niezmienione.

Jak połączyć wiele plików PDF jednocześnie?

Jeśli chcesz połączyć więcej niż dwa dokumenty, przekaż List<PdfDocument> (lub dowolny IEnumerable<PdfDocument>) do przeciążonej metody Merge. To podejście pozwala skalować projekt od trzech plików do setek bez zmiany struktury kodu.

using IronPdf;

// Build a list of quarterly reports
List<PdfDocument> pdfsToMerge = new()
{
    PdfDocument.FromFile("report_q1.pdf"),
    PdfDocument.FromFile("report_q2.pdf"),
    PdfDocument.FromFile("report_q3.pdf"),
    PdfDocument.FromFile("report_q4.pdf")
};

// Combine into one annual report
PdfDocument merged = PdfDocument.Merge(pdfsToMerge);

// Save the final document
merged.SaveAs("annual_report.pdf");
using IronPdf;

// Build a list of quarterly reports
List<PdfDocument> pdfsToMerge = new()
{
    PdfDocument.FromFile("report_q1.pdf"),
    PdfDocument.FromFile("report_q2.pdf"),
    PdfDocument.FromFile("report_q3.pdf"),
    PdfDocument.FromFile("report_q4.pdf")
};

// Combine into one annual report
PdfDocument merged = PdfDocument.Merge(pdfsToMerge);

// Save the final document
merged.SaveAs("annual_report.pdf");
Imports IronPdf

' Build a list of quarterly reports
Dim pdfsToMerge As New List(Of PdfDocument) From {
    PdfDocument.FromFile("report_q1.pdf"),
    PdfDocument.FromFile("report_q2.pdf"),
    PdfDocument.FromFile("report_q3.pdf"),
    PdfDocument.FromFile("report_q4.pdf")
}

' Combine into one annual report
Dim merged As PdfDocument = PdfDocument.Merge(pdfsToMerge)

' Save the final document
merged.SaveAs("annual_report.pdf")
$vbLabelText   $csharpLabel

Połączony dokument PDF

.NET PDF Merge Tasks with IronPDF: A Complete C# Guide: Obraz 5 – Nowo scalony plik PDF

IronPDF przetwarza strony w kolejności z listy, więc kolejność dokumentów w pliku List<PdfDocument> bezpośrednio wpływa na kolejność stron w pliku wyjściowym. Jeśli po scaleniu konieczne jest zmiana kolejności stron, interfejs API do zarządzania stronami umożliwia kopiowanie, przenoszenie lub usuwanie poszczególnych stron z dowolnego PdfDocument.

Ten wzorzec działa również w przypadku dokumentów generowanych w czasie wykonywania. Na przykład można przekonwertować HTML na PDF dla każdej sekcji raportu i scalić wynikowe obiekty PdfDocument bez zapisywania plików pośrednich na dysku. To samo dotyczy konwersji plików DOCX do formatu PDF, gdy treść źródłowa pochodzi z dokumentów programu WORD.

Jak połączyć pliki PDF za pomocą MemoryStream?

Przetwarzanie w pamięci jest wymagane w przypadku usług internetowych i funkcji bezserwerowych, gdzie zapis na dysku nie jest możliwy lub jest zbyt wolny. IronPDF obsługuje ładowanie dokumentów PDF z tablic bajtów i udostępnia scalony wynik jako MemoryStream za pośrednictwem właściwości Stream.

using IronPdf;
using System.IO;

// Load PDF content as byte arrays (e.g., from database or HTTP response)
byte[] firstFileBytes = File.ReadAllBytes("contract_part1.pdf");
byte[] secondFileBytes = File.ReadAllBytes("contract_part2.pdf");

// Create PdfDocument objects from byte arrays
PdfDocument doc1 = new PdfDocument(firstFileBytes);
PdfDocument doc2 = new PdfDocument(secondFileBytes);

// Merge and access the result as a stream
PdfDocument merged = PdfDocument.Merge(doc1, doc2);
MemoryStream outputStream = merged.Stream;

// Optionally save to disk as well
merged.SaveAs("merged_contract.pdf");
using IronPdf;
using System.IO;

// Load PDF content as byte arrays (e.g., from database or HTTP response)
byte[] firstFileBytes = File.ReadAllBytes("contract_part1.pdf");
byte[] secondFileBytes = File.ReadAllBytes("contract_part2.pdf");

// Create PdfDocument objects from byte arrays
PdfDocument doc1 = new PdfDocument(firstFileBytes);
PdfDocument doc2 = new PdfDocument(secondFileBytes);

// Merge and access the result as a stream
PdfDocument merged = PdfDocument.Merge(doc1, doc2);
MemoryStream outputStream = merged.Stream;

// Optionally save to disk as well
merged.SaveAs("merged_contract.pdf");
Imports IronPdf
Imports System.IO

' Load PDF content as byte arrays (e.g., from database or HTTP response)
Dim firstFileBytes As Byte() = File.ReadAllBytes("contract_part1.pdf")
Dim secondFileBytes As Byte() = File.ReadAllBytes("contract_part2.pdf")

' Create PdfDocument objects from byte arrays
Dim doc1 As New PdfDocument(firstFileBytes)
Dim doc2 As New PdfDocument(secondFileBytes)

' Merge and access the result as a stream
Dim merged As PdfDocument = PdfDocument.Merge(doc1, doc2)
Dim outputStream As MemoryStream = merged.Stream

' Optionally save to disk as well
merged.SaveAs("merged_contract.pdf")
$vbLabelText   $csharpLabel

Połączony plik umowy

.NET PDF Merge Tasks with IronPDF: A Complete C# Guide: Obraz 6 – Połączony dokument PDF umowy

Właściwość Stream zwraca MemoryStream umieszczony na początku, gotowy do zapisania w odpowiedzi HTTP lub przekazania do kolejnego etapu przetwarzania. W kontrolerze .NET Core można zwrócić File(outputStream, "application/pdf", "merged.pdf") bezpośrednio. Nie są tworzone żadne pliki tymczasowe, co upraszcza czyszczenie i zmniejsza obciążenie dysku w scenariuszach o dużej przepustowości.

IronPDF akceptuje jako źródła wejściowe zarówno ścieżki plików, tablice bajtów, jak i strumienie, dzięki czemu można je dowolnie łączyć w ramach tego samego wywołania scalania. Dokument załadowany z obiektu BLOB w bazie danych można połączyć z dokumentem pobranym z adresu URL bez żadnego pośredniego etapu konwersji.

W jaki sposób zachowane są zakładki i nawigacja w połączonych plikach?

Podczas scalania plików PDF IronPDF przenosi strukturę zakładek z każdego dokumentu źródłowego. Czytelnicy widzą pełny spis treści ze wszystkich połączonych plików w panelu nawigacyjnym scalonego pliku wyjściowego, co ułatwia użytkownikom przechodzenie między sekcjami pochodzącymi z różnych dokumentów źródłowych. Zakładki w specyfikacji PDF są przechowywane w słowniku struktury dokumentu, a IronPDF poprawnie odtwarza tę strukturę dla wszystkich scalanych źródeł.

Zachowanie zakładek odbywa się automatycznie, bez dodatkowej konfiguracji. Jeśli pliki źródłowe zawierają zagnieżdżone zakładki (rozdziały i podrozdziały), hierarchia ta jest zachowana w scalonym pliku wyjściowym. W przypadku połączonych dokumentów, które wymagają ujednoliconego spisu treści zamiast oddzielnych drzew zakładek dla każdego dokumentu, interfejs API spisu treści pozwala na zbudowanie niestandardowej struktury nawigacyjnej po połączeniu.

Jeśli dokument źródłowy został utworzony bez metadanych zakładek, scalony wynik nie będzie zawierał żadnych wpisów konspektu dla tej sekcji. Przed dostarczeniem połączonego pliku w kontekście zgodności lub archiwizacji należy sprawdzić, które zakładki zostały przeniesione, sprawdzając właściwość OutlineManager w wynikowym pliku PdfDocument. Można programowo zmieniać nazwy etykiet zakładek, zmieniać kolejność wpisów lub dodawać nowe elementy, które łączą treści z różnych dokumentów źródłowych w logiczną hierarchię. W przypadku procesów, które wymagają również konwersji do formatu PDF/A w celu długoterminowej archiwizacji, należy zastosować etap konwersji zapewniający zgodność po scaleniu, a nie do każdego źródła z osobna. Konwersja ostatecznego, scalonego dokumentu w jednym przejściu jest bardziej wydajna i pozwala uniknąć ponownej konwersji wyników, które mogą wymagać dalszych zmian.

Po połączeniu dokumentów można również dodać numery stron do połączonego dokumentu, korzystając z funkcji numeracji stron, co jest przydatne, gdy wynik obejmuje dziesiątki stron z wielu źródeł.

Jak zastosować ochronę hasłem do połączonego pliku PDF?

Po scaleniu wynikowy PdfDocument udostępnia SecuritySettings do stosowania haseł użytkownika i właściciela, ograniczających uprawnienia do drukowania, kopiowania i edycji.

using IronPdf;

PdfDocument pdfA = PdfDocument.FromFile("part1.pdf");
PdfDocument pdfB = PdfDocument.FromFile("part2.pdf");

PdfDocument merged = PdfDocument.Merge(pdfA, pdfB);

// Require a password to open the document
merged.SecuritySettings.UserPassword = "reader123";

// Owner password controls permissions such as printing and editing
merged.SecuritySettings.OwnerPassword = "admin456";

merged.SaveAs("secured_merged.pdf");
using IronPdf;

PdfDocument pdfA = PdfDocument.FromFile("part1.pdf");
PdfDocument pdfB = PdfDocument.FromFile("part2.pdf");

PdfDocument merged = PdfDocument.Merge(pdfA, pdfB);

// Require a password to open the document
merged.SecuritySettings.UserPassword = "reader123";

// Owner password controls permissions such as printing and editing
merged.SecuritySettings.OwnerPassword = "admin456";

merged.SaveAs("secured_merged.pdf");
Imports IronPdf

Dim pdfA As PdfDocument = PdfDocument.FromFile("part1.pdf")
Dim pdfB As PdfDocument = PdfDocument.FromFile("part2.pdf")

Dim merged As PdfDocument = PdfDocument.Merge(pdfA, pdfB)

' Require a password to open the document
merged.SecuritySettings.UserPassword = "reader123"

' Owner password controls permissions such as printing and editing
merged.SecuritySettings.OwnerPassword = "admin456"

merged.SaveAs("secured_merged.pdf")
$vbLabelText   $csharpLabel

UserPassword wyświetla monit przed wyświetleniem dokumentu, natomiast OwnerPassword kontroluje zmiany uprawnień. Można połączyć ochronę hasłem z ograniczeniami drukowania, flagami zapobiegającymi kopiowaniu oraz podpisami cyfrowymi. Pełny opis opcji uprawnień znajduje się w samouczku dotyczącym zabezpieczeń plików PDF, który obejmuje wszystkie dostępne ustawienia.

Jeśli dokumenty źródłowe są chronione hasłem, IronPDF może odszyfrować zaszyfrowane pliki PDF przed scaleniem, pod warunkiem posiadania danych uwierzytelniających właściciela. Oznacza to, że można połączyć zabezpieczone dokumenty od różnych dostawców lub z różnych systemów w jeden, ponownie zabezpieczony plik wyjściowy bez konieczności ręcznego odblokowywania.

Jak zmniejszyć rozmiar połączonego pliku PDF?

Łączenie dużych dokumentów zawierających wiele obrazów może skutkować plikami wyjściowymi, które zajmują dużo miejsca podczas przechowywania lub wysyłania. API kompresji plików PDF firmy IronPDF może znacznie zmniejszyć rozmiar pliku poprzez ponowną kompresję osadzonych obrazów przy niższym ustawieniu jakości, zachowując jednocześnie ostrość tekstu.

using IronPdf;

PdfDocument pdfA = PdfDocument.FromFile("report_section1.pdf");
PdfDocument pdfB = PdfDocument.FromFile("report_section2.pdf");

PdfDocument merged = PdfDocument.Merge(pdfA, pdfB);

// Compress embedded images to reduce output file size
merged.CompressImages(60); // quality 0–100

merged.SaveAs("compressed_merged.pdf");
using IronPdf;

PdfDocument pdfA = PdfDocument.FromFile("report_section1.pdf");
PdfDocument pdfB = PdfDocument.FromFile("report_section2.pdf");

PdfDocument merged = PdfDocument.Merge(pdfA, pdfB);

// Compress embedded images to reduce output file size
merged.CompressImages(60); // quality 0–100

merged.SaveAs("compressed_merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Argumentem całkowitoliczbowym dla CompressImages jest procent jakości: wartości między 50 a 75 zazwyczaj zmniejszają rozmiar pliku o 40–70% w przypadku dokumentów zawierających dużo obrazów, bez widocznego pogorszenia jakości treści tekstowej. W przypadku dokumentów zawierających grafikę wektorową i minimalną ilość obrazów rastrowych oszczędności są mniejsze, ale mimo to można bezpiecznie uwzględnić to wywołanie.

Jakie są typowe zastosowania łączenia plików PDF?

Interfejs API PdfDocument.Merge pasuje do szerokiego zakresu przepływów pracy z dokumentami w produkcyjnych aplikacjach .NET:

Typowe scenariusze łączenia plików PDF i podejście IronPDF do każdego z nich
Przykład zastosowaniaŹródła danych wejściowychZalecane podejście
Roczne sprawozdanie finansoweCztery kwartalne pliki PDF na dyskuScalenie listy za pomocą Merge(List)
Wieloczęściowa umowa prawnaUmowa podstawowa + poprawki z bazy danychWczytywanie tablicy bajtów + scalanie w pamięci
Konsolidacja fakturFaktury renderowane w HTML dla poszczególnych pozycjiHTML do PDF dla każdego elementu, a następnie scalanie listy
Automatyczne dostarczanie raportówMieszane pliki źródłowe w formatach DOCX i PDFKonwersja plików DOCX do formatu PDF, a następnie scalanie
Bezpieczne archiwum dokumentówRaporty z wielu działówScalanie list + SecuritySettings

W przypadku procesów, w których dokumenty muszą być selektywnie wyodrębniane przed scaleniem, interfejs API split PDF umożliwia wyodrębnienie określonych zakresów stron z dokumentu źródłowego. Można bezpośrednio kopiować strony między plikami PDF, co jest przydatne, gdy w połączonym pliku docelowym mają się znaleźć tylko niektóre sekcje dużego dokumentu.

IronPDF obsługuje również wyodrębnianie tekstu i obrazów ze scalanych dokumentów do dalszego przetwarzania, dzięki czemu nadaje się jako centralny etap tworzenia dokumentów w większych potokach danych.

Jakie są Twoje kolejne kroki?

Metoda PdfDocument.Merge firmy IronPDF obejmuje pełen zakres scenariuszy łączenia plików PDF w środowisku .NET przy minimalnym nakładzie kodu: łączenie dwóch plików, łączenie listy wielu plików, przetwarzanie w pamięci, pliki wyjściowe chronione hasłem oraz kompresja po połączeniu. Każde podejście wykorzystuje ten sam, spójny interfejs API, niezależnie od typu źródła danych wejściowych.

Rozpocznij bezpłatny okres próbny, aby uruchomić te przykłady we własnym projekcie. W celu wdrożenia produkcyjnego zapoznaj się z opcjami licencyjnymi dostosowanymi do wielkości Twojego zespołu i sposobu użytkowania.

Po dodaniu obsługi scalania zapoznaj się z powiązanymi operacjami na dokumentach: dziel plik PDF na osobne pliki, dodawaj numery stron do wielostronicowych wyników lub nakładaj znaki wodne na wszystkie strony w scalonym dokumencie.

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101000101111101010011010101000100000101010010010101000100010101000100010111110101011101001001010100010010000101111101010000010100100100111101000100010101010100001101010100010111110101010001010010010010010100000101001100010111110100001001001100010011110100001101001011--}

Często Zadawane Pytania

Jak połączyć dwa pliki PDF w języku C#?

Załaduj każdy plik za pomocą PdfDocument.FromFile, następnie wywołaj PdfDocument.Merge(pdfA, pdfB) i zapisz wynik za pomocą merged.SaveAs.

Jak połączyć więcej niż dwa pliki PDF w środowisku .NET?

Utwórz listę zawierającą wszystkie dokumenty źródłowe i przekaż ją do PdfDocument.Merge(list). Wynik zachowuje kolejność listy.

Czy można łączyć pliki PDF w pamięci bez zapisywania ich na dysku?

Tak. Załaduj dokumenty z tablic bajtów za pomocą new PdfDocument(bytes), scal je i uzyskaj dostęp do wyniku poprzez merged.Stream, aby uniknąć zapisów na dysku.

Czy IronPDF zachowuje zakładki podczas łączenia plików PDF?

Tak. IronPDF automatycznie przenosi strukturę zakładek (konspektu) z każdego dokumentu źródłowego do scalonego pliku wyjściowego, w tym zagnieżdżone hierarchie zakładek.

Jak zabezpieczyć hasłem połączony plik PDF w języku C#?

Po scaleniu ustaw merged.SecuritySettings.UserPassword jako hasło czytelnika i merged.SecuritySettings.OwnerPassword jako hasło uprawnień, a następnie wywołaj SaveAs.

Jak zmniejszyć rozmiar pliku połączonego PDF?

Przed zapisaniem wywołaj metodę merged.CompressImages(quality) z wartością jakości w zakresie od 50 do 75. Spowoduje to ponowną kompresję osadzonych obrazów rastrowych i zazwyczaj zmniejszy rozmiar pliku o 40–70% w przypadku dokumentów zawierających dużo obrazów.

Czy IronPDF może łączyć zaszyfrowane pliki PDF?

Tak. IronPDF może ładować i łączyć zaszyfrowane pliki PDF, jeśli posiadasz hasło właściciela. Użyj funkcji PdfDocument.FromFile(path, password), aby odblokować plik przed połączeniem.

Czy API scalania IronPDF działa w ASP.NET Core?

Tak. Wynik scalania można zwrócić jako File(merged.Stream, "application/pdf", "merged.pdf") z dowolnej akcji kontrolera ASP.NET Core.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie