Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
تشرح هذه المقالة كيفية دمج أو دمج مستندات PDF مختلفة في ملف PDF واحد باستخدام C#. تغطي المواضيع مثل:
PdfFileEditor هي الفئة في مساحة أسماء Aspose.Pdf.Facades التي تتيح لك دمج عدة ملفات PDF. يمكنك دمج الملفات باستخدام FileStreams وكذلك باستخدام MemoryStreams. في هذه المقالة، سيتم شرح عملية دمج الملفات باستخدام MemoryStreams ثم عرضها باستخدام مقتطف الشيفرة.
يمكن استخدام طريقة Concatenate من فئة PdfFileEditor لدمج ملفين PDF. تتيح لك طريقة Concatenate تمرير ثلاثة معلمات: ملف PDF المدخل الأول، ملف PDF المدخل الثاني، وملف PDF الناتج. يحتوي ملف PDF الناتج النهائي على كلا ملفي PDF المدخلين.
يوضح مقتطف الشيفرة C# التالي كيفية دمج ملفات PDF باستخدام مسارات الملفات.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenatePdfFilesUsingFilePaths()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Create PdfFileEditor object
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Concatenate files
pdfEditor.Concatenate(dataDir + "ConcatenatePdfFilesUsingFilePaths1.pdf", dataDir + "ConcatenatePdfFilesUsingFilePaths2.pdf", dataDir + "ConcatenateUsingPath_out.pdf");
}
في بعض الحالات، عندما يكون هناك الكثير من المخططات، قد يقوم المستخدمون بإيقاف تشغيلها عن طريق تعيين CopyOutlines إلى false وتحسين أداء الدمج.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenatePdfFilesUsingFilePaths_CopyOutlinesDisabled()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Create PdfFileEditor object
var pfe = new Aspose.Pdf.Facades.PdfFileEditor();
// Setting CopyOutlines to false
pfe.CopyOutlines = false;
// Concatenate files
pfe.Concatenate(dataDir + "ConcatenatePdfFilesUsingFilePaths_CopyOutlinesDisabled1.pdf", dataDir + "ConcatenatePdfFilesUsingFilePaths_CopyOutlinesDisabled2.pdf", dataDir + "ConcatenateUsingPath_CopyOutlinesDisabled_out.pdf");
}
تأخذ طريقة Concatenate من فئة PdfFileEditor ملفات PDF المصدر وملف PDF الوجهة كمعلمات. يمكن أن تكون هذه المعلمات إما مسارات إلى ملفات PDF على القرص أو يمكن أن تكون MemoryStreams. الآن، في هذا المثال، سنقوم أولاً بإنشاء تدفقين لقراءة ملفات PDF من القرص. ثم سنقوم بتحويل هذه الملفات إلى مصفوفات بايت. سيتم تحويل هذه المصفوفات البايتية من ملفات PDF إلى MemoryStreams. بمجرد أن نحصل على MemoryStreams من ملفات PDF، سنكون قادرين على تمريرها إلى طريقة الدمج ودمجها في ملف ناتج واحد.
يوضح مقتطف الشيفرة C# التالي كيفية دمج عدة ملفات PDF باستخدام MemoryStreams:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenateMultiplePdfFilesUsingMemoryStreams()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
string document1Path = dataDir + "ConcatenateMultiplePdfFilesUsingMemoryStreams1.pdf";
string document2Path = dataDir + "ConcatenateMultiplePdfFilesUsingMemoryStreams2.pdf";
string resultPdfPath = dataDir + "concatenated_out.pdf";
// Create two file streams to read PDF files
using (var fs1 = new FileStream(document1Path, FileMode.Open, FileAccess.Read))
{
using (var fs2 = new FileStream(document2Path, FileMode.Open, FileAccess.Read))
{
// Create byte arrays to keep the contents of PDF files
var buffer1 = new byte[Convert.ToInt32(fs1.Length)];
var buffer2 = new byte[Convert.ToInt32(fs2.Length)];
var i = 0;
// Read PDF file contents into byte arrays
i = fs1.Read(buffer1, 0, Convert.ToInt32(fs1.Length));
i = fs2.Read(buffer2, 0, Convert.ToInt32(fs2.Length));
// Now, first convert byte arrays into MemoryStreams and then concatenate those streams
using (var pdfStream = new MemoryStream())
{
using (var fileStream1 = new MemoryStream(buffer1))
{
using (var fileStream2 = new MemoryStream(buffer2))
{
// Create instance of PdfFileEditor class to concatenate streams
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Concatenate both input MemoryStreams and save to output MemoryStream
pdfEditor.Concatenate(fileStream1, fileStream2, pdfStream);
// Convert MemoryStream back to byte array
var data = pdfStream.ToArray();
// Create a FileStream to save the output PDF file
using (var output = new FileStream(resultPdfPath, FileMode.Create, FileAccess.Write))
{
// Write byte array contents in the output file stream
output.Write(data, 0, data.Length);
}
}
}
}
}
}
}
إذا كنت ترغب في دمج عدة ملفات PDF، يمكنك استخدام التحميل الزائد لطريقة Concatenate التي تتيح لك تمرير مصفوفة من ملفات PDF. يتم حفظ الناتج النهائي كملف مدمج تم إنشاؤه من جميع الملفات في المصفوفة. يوضح مقتطف الشيفرة C# التالي كيفية دمج مصفوفة من ملفات PDF باستخدام مسارات الملفات.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenateArrayOfPdfFilesUsingFilePaths()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Create PdfFileEditor
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Array of files
var filesArray = new string[2];
filesArray[0] = dataDir + "Concatenate1.pdf";
filesArray[1] = dataDir + "Concatenate2.pdf";
// Concatenate files
pdfEditor.Concatenate(filesArray, dataDir + "ConcatenateArrayOfPdfFilesUsingFilePaths_out.pdf");
}
لا يقتصر دمج مصفوفة من ملفات PDF على الملفات الموجودة فقط على القرص. يمكنك أيضًا دمج مصفوفة من ملفات PDF من التدفقات. إذا كنت ترغب في دمج عدة ملفات PDF، يمكنك استخدام التحميل الزائد المناسب لطريقة Concatenate. أولاً، تحتاج إلى إنشاء مصفوفة من التدفقات المدخلة وتدفق واحد لملف PDF الناتج ثم استدعاء طريقة Concatenate. سيتم حفظ الناتج في تدفق الناتج. يوضح مقتطف الشيفرة C# التالي كيفية دمج مصفوفة من ملفات PDF باستخدام التدفقات.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenateArrayOfPdfFilesUsingStreams()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
var document1Path = dataDir + "Concatenate1.pdf";
var document2Path = dataDir + "Concatenate2.pdf";
var resultPdfPath = dataDir + "ConcatenateArrayOfPdfUsingStreams_out.pdf";
// Create PdfFileEditor object
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Output stream
using (var outputStream = new FileStream(resultPdfPath, FileMode.Create))
{
using (var stream1 = new FileStream(document1Path, FileMode.Open))
{
using (var stream2 = new FileStream(document2Path, FileMode.Open))
{
// Array of streams
var inputStreams = new Stream[2];
inputStreams[0] = stream1;
inputStreams[1] = stream2;
// Concatenate file
pdfEditor.Concatenate(inputStreams, outputStream);
}
}
}
}
يمكنك حتى قراءة جميع ملفات PDF في مجلد معين في وقت التشغيل ودمجها، دون حتى معرفة أسماء الملفات. ببساطة قدم مسار الدليل الذي يحتوي على مستندات PDF التي ترغب في دمجها.
يرجى تجربة استخدام مقتطف الشيفرة C# التالي لتحقيق هذه الوظيفة.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenatingAllPdfFilesInParticularFolder()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Retrieve names of all the Pdf files in a particular Directory
var fileEntries = Directory.GetFiles(dataDir, "*.pdf");
var resultPdfPath = dataDir + "ConcatenatingAllPdfFilesInParticularFolder_out.pdf";
// Instantiate PdfFileEditor object
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Call Concatenate method of PdfFileEditor object to concatenate all input files
// Into a single output file
pdfEditor.Concatenate(fileEntries, resultPdfPath);
}
تقدم فئة PdfFileEditor في مساحة أسماء Aspose.Pdf.Facades القدرة على دمج ملفات PDF. الآن، إذا كانت ملفات PDF التي سيتم دمجها تحتوي على حقول نموذج بأسماء حقول مشابهة، توفر Aspose.PDF ميزة الحفاظ على الحقول في ملف PDF الناتج كفريدة، ويمكنك أيضًا تحديد اللاحقة لجعل أسماء الحقول فريدة. ستجعل خاصية KeepFieldsUnique من PdfFileEditor أسماء الحقول فريدة عند دمج نماذج PDF. أيضًا، يمكن استخدام خاصية UniqueSuffix من PdfFileEditor لتحديد تنسيق اللاحقة المحدد من قبل المستخدم الذي يضاف إلى اسم الحقل لجعله فريدًا عند دمج النماذج. يجب أن تحتوي هذه السلسلة على جزء %NUM%
الذي سيتم استبداله بأرقام في الملف الناتج.
يرجى الاطلاع على مقتطف الشيفرة البسيط التالي لتحقيق هذه الوظيفة.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenatePdfFormsAndKeepFieldsUnique()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Set input and output file paths
var inputFile1 = dataDir + "ConcatenatePdfFormsAndKeepFieldsUnique1.pdf";
var inputFile2 = dataDir + "ConcatenatePdfFormsAndKeepFieldsUnique2.pdf";
var outFile = dataDir + "ConcatenatePDFForms_out.pdf";
// Open PDF documents
var fileEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// To keep unique field Id for all the fields
fileEditor.KeepFieldsUnique = true;
// Format of the suffix which is added to field name to make it unique when forms are concatenated.
fileEditor.UniqueSuffix = "_%NUM%";
// Concatenate the files into a resultant Pdf file
fileEditor.Concatenate(inputFile1, inputFile2, outFile);
}
يرجى إلقاء نظرة على مقتطف الشيفرة التالي للحصول على معلومات حول كيفية دمج ملفات PDF.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenatePdfFiles()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Set input and output file paths
var inputFile1 = dataDir + "ConcatenateInput1.pdf";
var inputFile2 = dataDir + "ConcatenateInput2.pdf";
var outFile = dataDir + "ConcatenatePdfFilesAndCreateTOC_out.pdf";
// Create PdfFileEditor object
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Open PDF documents
using (var outputStream = new FileStream(outFile, FileMode.Create))
{
using (var stream1 = new FileStream(inputFile1, FileMode.Open))
{
using (var stream2 = new FileStream(inputFile2, FileMode.Open))
{
// Save concatenated output file
pdfEditor.Concatenate(stream1, stream2, outputStream);
}
}
}
}
بمجرد دمج ملفات PDF، يمكننا إدراج صفحة فارغة في بداية المستند التي يمكننا إنشاء جدول المحتويات عليها. لتحقيق هذا المتطلب، يمكننا تحميل الملف المدمج في كائن Document ونحتاج إلى استدعاء طريقة Page.Insert(…) لإدراج صفحة فارغة.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void InsertBlankPage()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Insert a blank page at the beginning of concatenated file to display Table of Contents
using (var document = new Aspose.Pdf.Document(dataDir + "ConcatenatePdfFilesAndCreateTOC_out.pdf"))
{
// Insert a blank page in a PDF
document.Pages.Insert(1);
}
}
لإنشاء جدول محتويات، نحتاج إلى إضافة طوابع نصية على الصفحة الأولى باستخدام PdfFileStamp وكائنات Stamp. توفر فئة Stamp طريقة BindLogo(...)
لإضافة FormattedText ويمكننا أيضًا تحديد الموقع لإضافة هذه الطوابع النصية باستخدام طريقة SetOrigin(..)
. في هذه المقالة، نقوم بدمج ملفين PDF، لذا نحتاج إلى إنشاء كائنين لطابع نصي يشيران إلى هذين المستندين الفرديين.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddTextStampForTableOfContents()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
var inputPdfFile = Path.Combine(dataDir, "ConcatenateInput1.pdf");
// Set Text Stamp to display string Table Of Contents
var stamp = new Aspose.Pdf.Facades.Stamp();
stamp.BindLogo(new Aspose.Pdf.Facades.FormattedText("Table Of Contents", System.Drawing.Color.Maroon, System.Drawing.Color.Transparent, Aspose.Pdf.Facades.FontStyle.Helvetica, Aspose.Pdf.Facades.EncodingType.Winansi, true, 18));
// Specify the origin of Stamp. We are getting the page width and specifying the X coordinate for stamp
stamp.SetOrigin(new Aspose.Pdf.Facades.PdfFileInfo(inputPdfFile).GetPageWidth(1) / 3, 700);
// Set particular pages
stamp.Pages = new[] { 1 };
}
الآن نحتاج إلى إضافة روابط نحو الصفحات داخل الملف المدمج. لتحقيق هذا المتطلب، يمكننا استخدام طريقة CreateLocalLink(..)
من فئة PdfContentEditor. في مقتطف الشيفرة التالي، قمنا بتمرير Transparent كوسيط رابع بحيث لا يكون المستطيل حول الرابط مرئيًا.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateLocalLinks()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Now we need to add Heading for Table Of Contents and links for documents
var contentEditor = new Aspose.Pdf.Facades.PdfContentEditor();
// Bind PDF document
contentEditor.BindPdf(dataDir + "ConcatenatePdfFilesAndCreateTOC_out.pdf");
// Create link for first document
contentEditor.CreateLocalLink(new System.Drawing.Rectangle(150, 650, 100, 20), 2, 1, System.Drawing.Color.Transparent);
}
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CompleteCode()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Create PdfFileEditor object
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Create a MemoryStream object to hold the resultant PDf file
using (var concatenatedStream = new MemoryStream())
{
using (var fs1 = new FileStream(dataDir + "ConcatenateInput1.pdf", FileMode.Open))
{
using (var fs2 = new FileStream(dataDir + "ConcatenateInput2.pdf", FileMode.Open))
{
// Save concatenated output file
pdfEditor.Concatenate(fs1, fs2, concatenatedStream);
}
}
using (var concatenatedPdfDocument = new Aspose.Pdf.Document(concatenatedStream))
{
// Insert a blank page at the beginning of concatenated file to display Table of Contents
concatenatedPdfDocument.Pages.Insert(1);
// Hold the result file with empty page added
using (var documentWithBlankPage = new MemoryStream())
{
// Save PDF document
concatenatedPdfDocument.Save(documentWithBlankPage);
using (var documentWithTocHeading = new MemoryStream())
{
// Add Table Of Contents logo as stamp to PDF file
var fileStamp = new Aspose.Pdf.Facades.PdfFileStamp();
// Bind PDF document
fileStamp.BindPdf(documentWithBlankPage);
// Set Text Stamp to display string Table Of Contents
var stamp = new Aspose.Pdf.Facades.Stamp();
stamp.BindLogo(new Aspose.Pdf.Facades.FormattedText("Table Of Contents", System.Drawing.Color.Maroon, System.Drawing.Color.Transparent,
Aspose.Pdf.Facades.FontStyle.Helvetica, Aspose.Pdf.Facades.EncodingType.Winansi, true, 18));
// Specify the origin of Stamp. We are getting the page width and specifying the X coordinate for stamp
stamp.SetOrigin(new Aspose.Pdf.Facades.PdfFileInfo(documentWithBlankPage).GetPageWidth(1) / 3, 700);
// Set particular pages
stamp.Pages = new[] { 1 };
// Add stamp to PDF file
fileStamp.AddStamp(stamp);
// Create stamp text for first item in Table Of Contents
var document1Link = new Aspose.Pdf.Facades.Stamp();
document1Link.BindLogo(new Aspose.Pdf.Facades.FormattedText("1 - Link to Document 1", System.Drawing.Color.Black, System.Drawing.Color.Transparent,
Aspose.Pdf.Facades.FontStyle.Helvetica, Aspose.Pdf.Facades.EncodingType.Winansi, true, 12));
// Specify the origin of Stamp. We are getting the page width and specifying the X coordinate for stamp
document1Link.SetOrigin(150, 650);
// Set particular pages on which stamp should be displayed
document1Link.Pages = new[] { 1 };
// Add stamp to PDF file
fileStamp.AddStamp(document1Link);
// Create stamp text for second item in Table Of Contents
var document2Link = new Aspose.Pdf.Facades.Stamp();
document2Link.BindLogo(new Aspose.Pdf.Facades.FormattedText("2 - Link to Document 2", System.Drawing.Color.Black, System.Drawing.Color.Transparent,
Aspose.Pdf.Facades.FontStyle.Helvetica, Aspose.Pdf.Facades.EncodingType.Winansi, true, 12));
// Specify the origin of Stamp. We are getting the page width and specifying the X coordinate for stamp
document2Link.SetOrigin(150, 620);
// Set particular pages on which stamp should be displayed
document2Link.Pages = new[] { 1 };
// Add stamp to PDF file
fileStamp.AddStamp(document2Link);
// Save PDF document
fileStamp.Save(documentWithTocHeading);
fileStamp.Close();
// Now we need to add Heading for Table Of Contents and links for documents
var contentEditor = new Aspose.Pdf.Facades.PdfContentEditor();
// Bind PDF document
contentEditor.BindPdf(documentWithTocHeading);
// Create link for first document
contentEditor.CreateLocalLink(new System.Drawing.Rectangle(150, 650, 100, 20), 2, 1, System.Drawing.Color.Transparent);
// Create link for Second document
// We have used new PdfFileInfo("d:/pdftest/Input1.pdf").NumberOfPages + 2 as PdfFileInfo.NumberOfPages(..) returns the page count for first document
// And 2 is because, second document will start at Input1+1 and 1 for the page containing Table Of Contents.
contentEditor.CreateLocalLink(new System.Drawing.Rectangle(150, 620, 100, 20),
new Aspose.Pdf.Facades.PdfFileInfo(dataDir + "ConcatenateInput1.pdf").NumberOfPages + 2, 1, System.Drawing.Color.Transparent);
// Save PDF document
contentEditor.Save(dataDir + "Concatenated_Table_Of_Contents_out.pdf");
}
}
}
}
}
تقدم فئة PdfFileEditor في مساحة أسماء Aspose.Pdf.Facades القدرة على دمج ملف PDF. يمكنك حتى قراءة جميع ملفات PDF في مجلد معين في وقت التشغيل ودمجها، دون حتى معرفة أسماء الملفات. ببساطة قدم مسار الدليل الذي يحتوي على مستندات PDF التي ترغب في دمجها.
يرجى تجربة استخدام مقتطف الشيفرة C# التالي لتحقيق هذه الوظيفة من Aspose.PDF:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConcatenatePdfFilesInFolder()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_Concatenate();
// Retrieve names of all the Pdf files in a particular Directory
string[] fileEntries = Directory.GetFiles(dataDir, "*.pdf");
// Create PdfFileEditor
var pdfEditor = new Aspose.Pdf.Facades.PdfFileEditor();
// Call Concatenate method of PdfFileEditor object to concatenate all input files
// Into a single output file
pdfEditor.Concatenate(fileEntries, dataDir + "ConcatenatePdfFilesInFolder_out.pdf");
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.