2013-09-19 4 views
1

У меня есть новая задача создания веб-приложения (я буду использовать Asp.net + C#): • Клиент дает нам X количество PDF-файлов каждый день (x будет отличаться от дня к дню) • Моему приложению необходимо будет взять эти файлы PDF и вставить пустую страницу после страницы № 3 (не каждые 3 страницы, сразу после страницы 3) каждого файла PDF, а затем объединить все из этих файлов PDF их в один большой PDF-файл. Я думал об использовании Aspose, так как кажется, что он может объединить файлы PDF, но мне нужно будет проверить, может ли он также вставить страницу в файл pdf.Объединить файлы PDF и вставить страницу в файл PDF

Есть ли какие-либо другие плагины, веб-сервисы, код или даже техника, которую вы знаете, что делает именно это?

+0

iTextSharp является отличным инструментом с открытым исходным кодом для этого. Я использую его практически для того же самого в нашей среде. В частности, вы должны посмотреть классы «PdfReader» и «PdfConcatenate». [Получить его на Source Forge] (http://sourceforge.net/projects/itextsharp/) –

+0

Спасибо @Evanlewis ... То, что мне не нравится в iText, это то, что у них нет хороших примеров ... вам нужно купить их книга, чтобы понять все, что она может сделать ... и даже простые вещи, такие как split и concatenate, у них есть некоторые странные примеры ... – Nathan

+0

Нет проблем. Я знаю, что на веб-сайте iText отсутствуют хорошие документы и примеры, но Stack Overflow - это ПОЛНЫЕ отличные примеры. Поиск PDF Concatenate с iTextSharp, и вы увидите много хороших примеров. Вы должны достаточно хорошо понимать C#, чтобы правильно использовать библиотеку. Как правило, вы будете работать с файлами ввода/вывода и в конечном итоге удалять то, что вам не нужно, после того, как вы разделите/объедините документы. Есть много хороших библиотек PDF, но функциональность iText - это, безусловно, лучший бесплатный вариант, который я знаю. Если вы хотите заплатить деньги, перейдите в Quick PDF. –

ответ

1

Задачу можно выполнить довольно легко с помощью Docotic.Pdf library.

Вот код, который объединяет файлы при добавлении пустых страниц после третьей страницы в каждом файле.

public static void insertBlanksAndMerge() 
{ 
    string[] filesToMerge = { "file1.pdf", "file2.pdf" }; 

    // open first file 
    int pagesBefore = 0; 
    using (PdfDocument pdf = new PdfDocument(filesToMerge[0])) 
    { 
     pdf.InsertPage(pagesBefore + 3); 

     // append all other documents 
     for (int i = 1; i < filesToMerge.Length; i++) 
     { 
      pagesBefore = pdf.PageCount; 

      pdf.Append(filesToMerge[i]); 
      pdf.InsertPage(pagesBefore + 3); 
     } 

     pdf.Save(@"out.pdf"); 
    } 
} 

Пожалуйста, обратите внимание, что PdfDocument конструктор и Append метод можно использовать не только имена файлов, но и потоки и байтовые буфера.

Имеющиеся образцы продуктов on site.

Отказ от ответственности: Я один из разработчиков библиотеки.

+0

Могу ли я использовать его для бесплатного приложения бесплатно. – Foreever

+0

@Foreever К сожалению, нет. Библиотека больше не бесплатна даже для бесплатных приложений. – Bobrovsky

+0

PdfDocument не содержит конструктор, который принимает 1 аргумент. Кроме того, «InsertPage» не существует в PdfDocument ... Я использую неверную ссылку? Это не iTextSharp? – Hill

1

Я использовал iTextsharp для объединения файлов PDF. Это код, который я использовал.

string[] lstFiles=new string[3]; 
    lstFiles[0][email protected]"C:/pdf/1.pdf"; 
    lstFiles[1][email protected]"C:/pdf/2.pdf"; 
    lstFiles[2][email protected]"C:/pdf/3.pdf"; 

    PdfReader reader = null; 
    Document sourceDocument = null; 
    PdfCopy pdfCopyProvider = null; 
    PdfImportedPage importedPage; 
    string [email protected]"C:/pdf/new.pdf"; 


    sourceDocument = new Document(); 
    pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create)); 

    //Open the output file 
    sourceDocument.Open(); 

    try 
    { 
     //Loop through the files list 
     for (int f = 0; f < lstFiles.Length-1; f++) 
     { 
      int pages =get_pageCcount(lstFiles[f]); 

      reader = new PdfReader(lstFiles[f]); 
      //Add pages of current file 
      for (int i = 1; i <= pages; i++) 
      { 
       importedPage = pdfCopyProvider.GetImportedPage(reader, i); 
       pdfCopyProvider.AddPage(importedPage); 
      } 

      reader.Close(); 
     } 
     //At the end save the output file 
     sourceDocument.Close(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 


private int get_pageCcount(string file) 
{ 
    using (StreamReader sr = new StreamReader(File.OpenRead(file))) 
    { 
     Regex regex = new Regex(@"/Type\s*/Page[^s]"); 
     MatchCollection matches = regex.Matches(sr.ReadToEnd()); 

     return matches.Count; 
    } 
} 

EDIT: Ссылка, что вам нужно, это

using iTextSharp.text; 
using iTextSharp.text.pdf; 
+0

Не говорите нам, какие ссылки из iTextSharp нам могут понадобиться. – Hill

Смежные вопросы