Как создать PDF с помощью C#

Мы всегда ищем способы создавать PDF-документы и работать с ними в проектах на C# более точно, аккуратно и эффективно. Наличие простых в использовании функций из библиотеки позволяет нам сосредоточиться больше на работе, а меньше на трудоемких деталях создания PDF, будь то в .NET.

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Создание (или генерация) PDF документа на языке C#

API Aspose.PDF для .NET позволяет создавать и читать PDF-файлы с использованием C# и VB.NET. API может использоваться в различных приложениях .NET, включая WinForms, ASP.NET и многие другие. В этой статье мы покажем, как использовать API Aspose.PDF для .NET для легкого создания и чтения PDF-файлов в приложениях .NET.

Как создать простой PDF файл

Для создания PDF файла на C# можно использовать следующие шаги.

  1. Создайте объект класса Document
  2. Добавьте TextFragment в коллекцию Paragraphs страницы
  3. Сохраните результатирующий PDF документ
// Путь к директории с документами.
string dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();

// Инициализация объекта документа
Document document = new Document();
// Добавление страницы
Page page = document.Pages.Add();
// Добавление текста на новую страницу
page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("Hello World!"));
// Сохранение обновленного PDF
document.Save(dataDir + "HelloWorld_out.pdf");

Как создать поисковый PDF документ

Aspose.PDF для .NET предоставляет возможность создавать и модифицировать существующие PDF документы. Aspose.PDF для .NET предоставляет возможность создавать и манипулировать существующими PDF-документами.

Нижеуказанная логика позволяет распознавать текст в изображениях PDF. Для распознавания вы можете использовать внешнюю поддержку OCR, соответствующую стандарту HOCR. Для тестирования мы использовали бесплатный OCR Google tesseract. Поэтому первым делом вам нужно установить Tesseract-OCR на вашу систему, и у вас будет консольное приложение tesseract.

Ниже приведен полный код для выполнения этой задачи:


using System;

namespace Aspose.Pdf.Examples.Advanced.WorkingWithDocuments
{
    class ExampleCreateDocument
    {
        private const string _dataDir = "C:\\Samples";
        public static void CreateSearchableDocuments(string file)
        {
            Aspose.Pdf.Document doc = new Aspose.Pdf.Document(file);
            bool convertResult = false;
            try
            {
                convertResult = doc.Convert(CallBackGetHocr);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            doc.Save(file);
            doc.Dispose();
        }

        static string CallBackGetHocr(System.Drawing.Image img)
        {
            string tmpFile = System.IO.Path.GetTempFileName();
            try
            {
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(img);

                bmp.Save(tmpFile, System.Drawing.Imaging.ImageFormat.Bmp);
                string inputFile = string.Concat('"', tmpFile, '"');
                string outputFile = string.Concat('"', tmpFile, '"');
                string arguments = string.Concat(inputFile, " ", outputFile, " -l eng hocr");
                string tesseractProcessName = @"C:\Program Files\Tesseract-OCR\Tesseract.exe";

                System.Diagnostics.ProcessStartInfo psi =
                    new System.Diagnostics.ProcessStartInfo(tesseractProcessName, arguments)
                    {
                        UseShellExecute = true,
                        CreateNoWindow = true,
                        WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
                        WorkingDirectory = System.IO.Path.GetDirectoryName(tesseractProcessName)
                    };

                System.Diagnostics.Process p = new System.Diagnostics.Process
                {
                    StartInfo = psi
                };
                p.Start();
                p.WaitForExit();

                System.IO.StreamReader streamReader = new System.IO.StreamReader(tmpFile + ".hocr");
                string text = streamReader.ReadToEnd();
                streamReader.Close();

                return text;
            }
            finally
            {
                if (System.IO.File.Exists(tmpFile))
                    System.IO.File.Delete(tmpFile);
                if (System.IO.File.Exists(tmpFile + ".hocr"))
                    System.IO.File.Delete(tmpFile + ".hocr");
            }
        }
    }
}