Вопрос или проблема
Я знаю, что этот вопрос уже задавался, но предыдущие ответы кажутся слишком старыми, чтобы быть актуальными или релевантными.
Организация, в которой я работаю, в настоящее время использует два лицензированных продукта для работы с PDF. Поскольку лицензионные сборы становятся очень высокими, мне поручили найти одно решение, предпочтительно бесплатное или с открытым исходным кодом, на которое мы могли бы перейти, чтобы удовлетворить наши потребности.
Решение должно обеспечивать следующую функциональность:
- Конвертировать входящий поток байтов в кодировке Base64 в PDF.
- Объединять несколько потоков байтов в один документ.
- Добавлять произвольный штамп к PDF (например, как печать, которую использует клерк для обозначения того, что документы обработаны. Штамп должен быть настраиваемым, чтобы дату и имя клерка можно было добавлять на лету).
Я рассматривал PDFSharp. Похоже, что он может справиться с тем, что нам нужно. Проблема в том, что документация настолько плоха, что я даже не могу заставить работать примеры. Я не знаю, связано ли это с тем, что API не совместимы с .NET 8 или по какой-то другой причине, которую я не вижу. Я не нашел никаких учебников, которые могли бы помочь мне понять, если я делал какие-либо ошибки.
Кто-нибудь знает о решении, которое могло бы мне помочь? Это может быть платное решение, но лицензирование должно быть простым и не на основе каждого проекта.
Спасибо!
Библиотека Spire.PDF для .NET предоставляет функции, о которых вы говорили. Вы можете запросить бесплатную лицензию для пробного использования и тщательно протестировать её.
Вот документация библиотеки для вашего ознакомления:
Библиотека PDF4NET поддерживает все ваши требования.
Оценочная версия доступна для скачивания.
Примеры доступны на GitHub: https://github.com/o2solutions/pdf4net
Наша служба поддержки ответит на любые вопросы, которые у вас могут возникнуть по поводу библиотеки.
Примечание: я работаю в компании, которая разрабатывает PDF4NET
Вы можете попробовать фреймворк PDF от Syncfusion.
- Создавайте, читайте и редактируйте PDF-файлы всего несколькими строками кода.
- Конвертируйте более 20 самых распространенных и популярных форматов документов в PDF.
- Просматривайте и проверяйте PDF-файлы без проблем в ваших приложениях.
https://www.syncfusion.com/document-processing/pdf-framework/net
Syncfusion также предлагает бесплатную лицензию для сообщества. https://www.syncfusion.com/products/communitylicense
Примечание: я работаю в компании Syncfusion
Windows CMD с несколькими файлами будет (вам нужно будет использовать tar.exe для распаковки zip-файлов)
- декодировать поток файлов base64 (
b64.exe -d input output
)
может выглядеть устаревшим, но вполне рабочий 10 лет спустя (один из любимых) https://sourceforge.net/projects/base64/files/ - объединить несколько PDF в один (
pdfunite [options] <PDF-sourcefile-1>..<PDF-sourcefile-n> <PDF-destfile>
)
https://github.com/oschwartz10612/poppler-windows/releases/tag/v24.07.0-0
или смотрите следующую, она также может объединять. - Добавить произвольный штамп к PDF
pdfcpu stamp options
https://pdfcpu.io/core/stamp
Сделано, это всего 2 или 3 строки кода в оболочке CMD
или они все предоставляют открытые решения для “собери свое собственное”
Ответ или решение
Ваша задача по созданию, объединению и изменению PDF-документов может быть решена с использованием нескольких бесплатных и открытых библиотек. Я предложу несколько вариантов, которые соответствуют вашим требованиям, и рассмотрю их функциональность.
-
PdfSharp: Это популярная библиотека для работы с PDF в .NET, но, как вы заметили, документация может быть недостаточно подробной. Хотя PdfSharp позволяет создавать PDF-документы, объединение и добавление печатей может потребовать дополнительных усилий, например, интеграции с библиотеками, такими как MigraDoc.
-
iText 7 Community: Эта библиотека является мощным инструментом для обработки PDF-документов и предоставляет возможность работы с Base64, объединения документов и добавления кастомных печатей. iText имеет хорошую документацию и множество примеров. Однако, учитывайте, что лицензия AGPL требует, чтобы ваше программное обеспечение также было открытым, если вы планируете его распространение.
-
PDF4NET: Эта библиотека поддерживает все ваши требования. Она позволяет конвертировать Base64 в PDF, объединять документы и добавлять кастомные печати. Вы можете скачать оценочную версию PDF4NET и ознакомиться с примерами на GitHub. Моя рекомендация — воспользоваться поддержкой от команды разработчиков для получения дополнительных знаний.
-
Syncfusion PDF Framework: Эта библиотека также подходит под ваши критерии и предлагает возможность создания, чтения и редактирования PDF-файлов с минимальным количеством кода. Syncfusion предоставляет бесплатную сообщественную лицензию для малых предприятий и стартапов, что может быть полезно для вашей организации. Лицензия проста и не требует дополнительных затрат за проект. Подробности можно найти здесь.
-
PDFCPU и Poppler: Если вы ищете более низкоуровневые и командные решения, можете использовать PDFCPU для добавления печатей и Poppler для объединения PDF-документов. Эти инструменты могут быть вызваны из командной строки и предоставляют мощные возможности обработки PDF без сложной интеграции кода.
Пример использования некоторых из этих библиотек для выполнения ваших задач:
-
Конвертация Base64 в PDF:
byte[] pdfBytes = Convert.FromBase64String(base64String); File.WriteAllBytes("output.pdf", pdfBytes);
-
Объединение документов (например, с использованием PDF4NET):
PdfDocument document = new PdfDocument(); foreach (string file in filesToMerge) { PdfDocument srcDoc = PdfReader.Open(file, PdfDocumentOpenMode.Import); document.AddPages(srcDoc.Pages); } document.Save("merged.pdf");
-
Добавление печати (с использованием iText):
PdfDocument pdfDoc = new PdfDocument(new PdfReader("original.pdf"), new PdfWriter("stamped.pdf")); PdfCanvas canvas = new PdfCanvas(pdfDoc.GetPage(1)); canvas.SaveState(); canvas.BeginText(); canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 12); canvas.ShowTextAligned("Отметка: " + clerkName + " " + date.ToShortDateString(), x, y, TextAlignment.LEFT); canvas.EndText(); canvas.RestoreState(); pdfDoc.Close();
Надеюсь, эти советы помогут вам найти подходящее решение для вашего проекта. Если у вас будут дополнительные вопросы, не стесняйтесь обращаться!