Объединитесь два (или больше) PDF

Фон: Я должен предоставить пакет еженедельного отчета своим сотрудникам отдела продаж. Этот пакет содержит несколько (5-10) кристаллические отчеты.

Проблема: Я хотел бы позволить пользователю выполнять все отчеты и также просто выполнять единственный отчет. Я думал, что мог сделать это путем создания отчетов и затем выполнения:

List<ReportClass> reports = new List<ReportClass>();
reports.Add(new WeeklyReport1());
reports.Add(new WeeklyReport2());
reports.Add(new WeeklyReport3());
<snip>

foreach (ReportClass report in reports)
{
    report.ExportToDisk(ExportFormatType.PortableDocFormat, @"c:\reports\" + report.ResourceName + ".pdf");
}

Это предоставило бы мне папку, полную отчетов, но я хотел бы послать всем по электронной почте единственный PDF со всеми еженедельными отчетами. Таким образом, я должен объединить их.

Существует ли простой способ делать это без установки еще сторонние средства управления? У меня уже есть DevExpress & CrystalReports, и я предпочел бы не добавлять еще много.

Было бы лучше объединить их в цикле foreach или в отдельном цикле? (или альтернативный путь)

53
задан Engineert 22 July 2019 в 23:42
поделиться

8 ответов

Мне пришлось решить аналогичную проблему, и в итоге я создал небольшую утилиту pdfmerge, в которой используется проект PDFSharp , который по существу лицензирован MIT.

код очень прост, мне понадобилась утилита cmdline, поэтому у меня больше кода, предназначенного для разбора аргументов, чем для слияния PDF:

using (PdfDocument one = PdfReader.Open("file1.pdf", PdfDocumentOpenMode.Import))
using (PdfDocument two = PdfReader.Open("file2.pdf", PdfDocumentOpenMode.Import))
using (PdfDocument outPdf = new PdfDocument())
{                
    CopyPages(one, outPdf);
    CopyPages(two, outPdf);

    outPdf.Save("file1and2.pdf");
}

void CopyPages(PdfDocument from, PdfDocument to)
{
    for (int i = 0; i < from.PageCount; i++)
    {
        to.AddPage(from.Pages[i]);
    }
}
84
ответ дан 7 November 2019 в 08:27
поделиться

Здесь уже есть несколько хороших ответов, но я подумал, что мог бы упомянуть, что pdftk может быть полезен для этой задачи. Вместо того, чтобы создавать один PDF-файл напрямую, вы можете создать каждый PDF-файл, который вам нужен, а затем объединить их вместе в качестве пост-процесса с pdftk. Это можно сделать даже изнутри вашей программы, используя вызов system () или ShellExecute ().

2
ответ дан 7 November 2019 в 08:27
поделиться

Я сделал это с помощью PDFBox. Я полагаю, он работает аналогично iTextSharp.

0
ответ дан 7 November 2019 в 08:27
поделиться

Вы можете попробовать pdf-shuffler gtk-apps.org

0
ответ дан 7 November 2019 в 08:27
поделиться

Я знаю, что многие люди рекомендовали PDF Sharp, однако похоже, что этот проект не обновлялся с июня 2008 года. Кроме того, источник недоступен.

Лично Я играл с iTextSharp, с которым было довольно легко работать.

0
ответ дан 7 November 2019 в 08:27
поделиться

Вот ссылка на пример с использованием PDFSharp и ConcatenateDocuments

1
ответ дан 7 November 2019 в 08:27
поделиться

PDFsharp , по-видимому, позволяет объединять несколько документов PDF в один.

И то же самое возможно с ITextSharp .

4
ответ дан 7 November 2019 в 08:27
поделиться

Здесь решение http: //www.wacdesigns .com / 2008/10/03 / слияния-PDF-файлы, используя-с Он использует бесплатную библиотеку iTextSharp с открытым исходным кодом http://sourceforge.net/projects/itextsharp

0
ответ дан 7 November 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: