2016-04-21 3 views
0

У меня есть 2 Pdfs, не всегда одинаковое количество страниц. Можно ли объединить 2 файла бок о бок в 1. Под этим я подразумеваю, что страница 1 из обоих PDF-файлов будет отображаться на одной странице, странице 2 и далее. Если один из Pdfs недостаточно длинный, я планирую оставить эту сторону объединенного Pdf-бланка.Сочетание 2 Pdfs бок о бок

Я искал библиотеки, такие как iTextSharp, но не имел никакой удачи. Предпочтительным языком для этого является C#. Вывод может даже не быть Pdf, изображения может быть достаточно. Спасибо.

+0

Это должно быть возможно с использованием любой библиотеки PDF общего назначения. В частности, это возможно с iTextSharp. – mkl

ответ

0

Вы можете создать так называемый объект формы XObject с каждой страницы, а затем нарисовать эти объекты XObject на странице бок о бок.

Это возможно с помощью Docotic.Pdf library. Вот пример, который показывает, как ставить две страницы бок о бок на странице в другом документе.

Create XObject from page

образец использует две страницы из одного документа, а также весы их. Вам, вероятно, не нужно масштабировать страницы. Во всяком случае, образец должен дать вам некоторую информацию для начала.

Отказ от ответственности: Я работаю в компании, которая разрабатывает библиотеку Docotic.Pdf.

1

Приведенный ниже код показывает, как объединить 2 PDF файлы бок о бок с помощью XFINIUM.PDF библиотеки:

FileStream input1 = File.OpenRead("input1.pdf"); 
PdfFile file1 = new PdfFile(input1); 
PdfPageContent[] fileContent1 = file1.ExtractPageContent(0, file1.PageCount - 1); 
file1 = null; 
input1.Close(); 

FileStream input2 = File.OpenRead("input2.pdf"); 
PdfFile file2 = new PdfFile(input2); 
PdfPageContent[] fileContent2 = file2.ExtractPageContent(0, file2.PageCount - 1); 
file2 = null; 
input2.Close(); 

PdfFixedDocument document = new PdfFixedDocument(); 

int maxPageCount = Math.Max(fileContent1.Length, fileContent2.Length); 

for (int i = 0; i < maxPageCount; i++) 
{ 
    PdfPage page = document.Pages.Add(); 
    // Make the destination page landscape so that 2 portrait pages fit side by side 
    page.Rotation = 90; 

    if (i < fileContent1.Length) 
    { 
     // Draw the first file in the first half of the page 
     page.Graphics.DrawFormXObject(fileContent1[i], 0, 0, page.Width/2, page.Height); 
    } 
    if (i < fileContent2.Length) 
    { 
     // Draw the second file in the second half (x coordinate is half page) of the page 
     page.Graphics.DrawFormXObject(fileContent2[i], page.Width/2, 0, page.Width/2, page.Height); 
    } 
} 

document.Save("SideBySide.pdf"); 

Отказ от ответственности: Я работаю в компании, которая разрабатывает эту библиотеку.