Jelizaveta

На Пикабу
204 рейтинг 12 подписчиков 0 подписок 43 поста 0 в горячем
8

Учебник по Python: Легко конвертируйте DOCX в TXT и TXT в DOCX

Конвертация между DOCX (документы Word) и TXT (простые текстовые файлы) — это обычная задача в обработке документов, извлечении данных и автоматизации рабочих процессов. В этом посте блога мы рассмотрим, как конвертировать DOCX в TXT и TXT в DOCX, используя библиотеку Free Spire.Doc для Python .

Зачем конвертировать между DOCX и TXT?

DOCX файлы богаты форматированием и поддерживают различные функции, такие как изображения, стили и гиперссылки. Однако они могут быть громоздкими, когда вам нужен только простой текст для быстрых правок или извлечения данных. С другой стороны, TXT файлы лёгкие и универсально совместимы, но не имеют форматирования.

Конвертация между этими форматами предоставляет гибкость в обработке документов, позволяя вам:

  • Извлекать чистый текст из отформатированных документов

  • Превращать простой текст в профессионально оформленные документы

  • Упрощать рабочие процессы обработки документов

Предварительные требования

Перед тем, как погрузиться в код, убедитесь, что у вас есть следующее:

  1. Установленный Python на вашем компьютере.

  2. Библиотека Free Spire.Doc для Python . Вы можете установить её с помощью pip:
    bash

    pip install spire.doc.free

  3. Текстовый редактор или IDE для написания кода на Python.

  4. Примерные файлы DOCX и TXT для тестирования.

Конвертация DOCX в TXT на Python

Следующий код читает документ Word (Sample.docx) и сохраняет его содержимое в качестве простого текстового файла (DocxToTxt.txt).

from spire.doc import *

from spire.doc.common import *

# Создать объект Document

document = Document()

# Загрузить файл docx

document.LoadFromFile("C:/Users/Administrator/Desktop/Sample.docx")

# Сохранить файл docx в формате txt

document.SaveToFile("DocxToTxt.txt", FileFormat.Txt)

document.Close()

В этом коде:

  • Создаётся объект Document для работы.

  • Метод LoadFromFile используется для загрузки файла DOCX из указанного пути.

  • Документ сохраняется в формате TXT с использованием метода SaveToFile.

Конвертация TXT в DOCX на Python

В зависимости от того, хотите ли вы применить форматирование программно, вы можете конвертировать текстовый файл (TXT) в файл DOCX, используя один из следующих двух методов:

Метод 1: Простое решение (без форматирования)

Этот базовый подход создаёт документ Word с содержимым TXT, но без специального форматирования.

from spire.doc import *

from spire.doc.common import *

# Создать объект Document

document = Document()

# Загрузить файл txt

document.LoadFromFile("C:/Users/Administrator/Desktop/Sample.txt")

# Сохранить файл txt как файл docx

document.SaveToFile("TxtToDocx.docx", FileFormat.Docx2016)

document.Close()

В этом коде:

  • Создаётся объект Document.

  • Файл TXT загружается с помощью метода LoadFromFile.

  • Документ затем сохраняется в формате DOCX.

Метод 2: Расширенное решение (с форматированием)

Для более профессиональных результатов вы можете применить форматирование во время конвертации:

from spire.doc import *

# Функция для форматирования textRange

defformat_textRange(textRange, font_name, font_size, color):

# Установить свойства шрифта

textRange.CharacterFormat.FontName = font_name

textRange.CharacterFormat.FontSize = font_size

textRange.CharacterFormat.TextColor = color

# Чтение файла TXT и разделение на абзацы

withopen("C:/Users/Administrator/Desktop/Sample.txt", "r") as file:

content = file.read()

# Разделение содержимого на абзацы с помощью пустых строк

paragraphs = content.split('\n\n')

# Создать новый объект Document

document = Document()

section = document.AddSection()

section.PageSetup.Margins.All = 40

# Обработка каждого абзаца и добавление его в документ

for idx, para inenumerate(paragraphs):

# Удалить пробелы и пропустить пустые абзацы

para = para.strip()

ifnot para:

continue

# Создать новый абзац в документе

new_paragraph = section.AddParagraph()

text_range = new_paragraph.AppendText(para)

# Применить разные форматы в зависимости от индекса абзаца

if idx % 2 == 0: # Пример: четные абзацы

format_textRange(text_range, font_name="Times New Roman", font_size=18, color=Color.get_Red())

else: # Нечётные абзацы

format_textRange(text_range, font_name="Times New Roman", font_size=13, color=Color.get_Blue())

# Добавить пустой абзац после каждого форматированного абзаца

section.AddParagraph()

# Сохранить документ как DOCX

document.SaveToFile("TxtToFormattedDocx.docx", FileFormat.Docx2016)

document.Dispose()

В этом коде:

  • Определена функция format_textRange для применения определённых свойств шрифта (название шрифта, размер и цвет) к объекту TextRange.

  • Файл TXT открывается, его содержимое читается и разделяется на абзацы на основе пустых строк.

  • Создаётся объект Document, и добавляется секция с указанными полями.

  • Каждый абзац обрабатывается, форматируется и добавляется в документ. Чётные абзацы оформляются красным цветом и большим размером, а нечётные — синим и меньшим размером.

  • Пустой абзац создаётся после каждого форматированного абзаца для улучшения читаемости.

  • Наконец, документ сохраняется как файл DOCX.

Заключение

В этом посте блога мы продемонстрировали, как конвертировать DOCX в TXT для извлечения содержимого обычного текста, что делает работу с текстовыми данными более удобной без отвлекающего форматирования.

Кроме того, мы показали, как конвертировать TXT в DOCX, предлагая как базовые, так и расширенные варианты форматирования для улучшения общего представления вашего текста.

Показать полностью 3
5

Краткое руководство по извлечению таблиц из PDF с помощью Python

В работе с анализом данных мы часто сталкиваемся с необходимостью извлечения табличных данных из PDF-файлов. Однако прямое копирование таблиц из PDF часто приводит к хаосу в форматировании и смещению данных. Эта статья шаг за шагом покажет вам, как использовать библиотеку Free Spire.PDF for Python для быстрого и точного распознавания и извлечения таблиц из PDF, а также сохранения данных в распространённых форматах, таких как CSV и Excel.

1. Подготовка: Установка необходимых библиотек

Сначала вам нужно установить библиотеку Spire.PDF. Откройте терминал или командную строку и выполните следующую команду:

pip install spire.pdf.free

Если вы планируете экспортировать извлечённые данные в формат Excel, рекомендуется также установить pandas и openpyxl:

pip install pandas openpyxl

2. Основной код: Извлечение таблиц из PDF

Следующий код демонстрирует, как извлечь таблицы с первой страницы PDF и вывести содержимое ячеек построчно:

from spire.pdf import PdfDocument, PdfTableExtractor

# 1. Загрузить PDF-файл

pdf = PdfDocument()

pdf.LoadFromFile("sample.pdf")

# 2. Создать экстрактор таблиц

table_extractor = PdfTableExtractor(pdf)

# 3. Извлечь все таблицы с первой страницы

tables = table_extractor.ExtractTable(0)

# 4. Пройтись по каждой таблице

for table in tables:

row_count = table.GetRowCount()

column_count = table.GetColumnCount()

# Извлечь содержимое ячеек построчно

for i in range(row_count):

row_data = []

for j in range(column_count):

cell_text = table.GetText(i, j)

row_data.append(cell_text)

print(row_data)

Пояснение к коду

  • LoadFromFile(): Загружает PDF-файл из указанного пути

  • PdfTableExtractor(): Создаёт экземпляр экстрактора таблиц

  • ExtractTable(номер страницы): Извлекает все таблицы с указанной страницы, нумерация страниц начинается с 0

  • GetRowCount() / GetColumnCount(): Получает количество строк и столбцов таблицы

  • GetText(строка, столбец): Получает текстовое содержимое указанной ячейки

3. Расширенная обработка: Пакетное извлечение из многостраничного PDF

Если PDF содержит несколько страниц, вы можете использовать цикл для пакетного извлечения всех таблиц:

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()

pdf.LoadFromFile("multi_page_report.pdf")

# Пройтись по всем страницам

for page_index in range(pdf.Pages.Count):

extractor = PdfTableExtractor(pdf)

tables = extractor.ExtractTable(page_index)

print(f"\n=== Страница {page_index + 1} найдено {len(tables)} таблиц ===")

for t, table in enumerate(tables):

print(f"--- Таблица {t+1} ---")

rows = table.GetRowCount()

cols = table.GetColumnCount()

for i in range(rows):

row = [table.GetText(i, j) for j in range(cols)]

print(row)

4. Экспорт данных: Сохранение в файлы CSV или Excel

Извлечённые табличные данные можно легко преобразовать в другие форматы. Следующий пример сохраняет данные в CSV-файл:

import csv

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()

pdf.LoadFromFile("sample.pdf")

extractor = PdfTableExtractor(pdf)

tables = extractor.ExtractTable(0)

if tables:

table = tables[0]

rows = table.GetRowCount()

cols = table.GetColumnCount()

# Собрать все данные

data = []

for i in range(rows):

row_data = [table.GetText(i, j) for j in range(cols)]

data.append(row_data)

# Записать в CSV-файл

with open("output.csv", "w", newline="", encoding="utf-8") as f:

writer = csv.writer(f)

writer.writerows(data)

print(f"Успешно экспортировано {rows} строк × {cols} столбцов данных в output.csv")

Чтобы экспортировать данные в Excel-файл, вы можете использовать pandas:

import pandas as pd

# Предположим, что data — это извлечённый выше двумерный список

df = pd.DataFrame(data[1:], columns=data[0]) # Первая строка как заголовки столбцов

df.to_excel("output.xlsx", index=False)

print("Данные сохранены как output.xlsx")

5. Часто возникающие проблемы и советы

  1. Неполное распознавание таблицы? Проверьте, имеет ли таблица в PDF чёткие границы. Для отсканированных документов или PDF на основе изображений требуется технология OCR; Spire.PDF в основном подходит для текстовых PDF.

  2. Обработка объединённых ячеек: Spire.PDF автоматически обрабатывает объединённые ячейки. GetText() возвращает содержимое ячейки в верхнем левом углу объединённой области, а для остальных позиций возвращает пустую строку.

  3. Оптимизация производительности: При обработке больших PDF-файлов рекомендуется извлекать и сохранять данные постранично, чтобы избежать загрузки всех таблиц в память одновременно.

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

Показать полностью
1

Работа с водяными знаками в Word на C#: добавление, водяной знак-изображение и удаление — всё в одной статье

В процессе разработки программных систем функции обработки документов часто являются важной частью корпоративных приложений. Документы Word, как один из самых популярных офисных форматов, нередко требуют защиты содержимого и маркировки статуса. Водяные знаки, как визуальные элементы, не мешающие чтению основного текста, но при этом чётко передающие свойства документа (например, уровень конфиденциальности, принадлежность авторских прав или статус черновика), играют важную роль в управлении документами.

В этой статье подробно рассматривается, как с помощью компонента Free Spire.Doc for .NET реализовать на C# добавление текстовых водяных знаков, добавление водяных знаков-изображений и удаление существующих водяных знаков из документов Word.

1. Обзор компонента Spire.Doc for .NET

Free Spire.Doc for .NET — это профессиональный компонент для работы с документами Word, который позволяет разработчикам создавать, читать, изменять и конвертировать документы Word напрямую через код без установки Microsoft Office. Компонент предоставляет полный набор возможностей для работы с водяными знаками и поддерживает два основных типа:

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

Настройка окружения

Перед началом кодирования необходимо установить Free Spire.Doc в проект через диспетчер пакетов NuGet. Выполните следующую команду в «Консоли диспетчера пакетов» Visual Studio:

Install-Package FreeSpire.Doc

После установки необходимо подключить следующие пространства имён в файле кода:

using Spire.Doc;

using Spire.Doc.Documents;

using System.Drawing; // Для работы с цветами и изображениями

2. Добавление текстового водяного знака

Текстовый водяной знак — это самая базовая и наиболее часто используемая форма водяных знаков. По сути, это строка текста, отображаемая на фоне каждой страницы документа в полупрозрачном или заданном цвете. Обычно используется крупный шрифт с диагональным или горизонтальным расположением, чтобы визуально отличаться от основного содержимого.

Описание основных свойств

Класс TextWatermark предоставляет следующие настраиваемые свойства:

Реализация кода

using System;

using System.Drawing;

using Spire.Doc;

using Spire.Doc.Documents;

namespace InsertTextWatermark

{

internal class Program

{

static void Main(string[] args)

{

// Создание экземпляра объекта Document

Document document = new Document();

// Загрузка документа Word с диска

document.LoadFromFile("input.docx");

// Вставка текстового водяного знака

InsertTextWatermark(document);

// Сохранение документа

document.SaveToFile("TextWatermark.docx", FileFormat.Docx);

}

private static void InsertTextWatermark(Document document)

{

TextWatermark txtWatermark = new TextWatermark();

txtWatermark.Text = "НЕ КОПИРОВАТЬ"; // Текст водяного знака

txtWatermark.FontSize = 50; // Размер шрифта

txtWatermark.Color = Color.Blue; // Цвет текста

txtWatermark.Layout = WatermarkLayout.Diagonal; // Диагональное расположение

document.Watermark = txtWatermark;

}

}

}

Ключевые моменты

  • Водяной знак связан со всем объектом документа, а не с отдельной страницей или разделом. Это означает, что после добавления водяной знак автоматически применяется ко всем страницам документа.

  • При сохранении необходимо явно указать формат FileFormat.Docx, чтобы информация о водяном знаке была корректно записана в структуру файла Word.

  • Если требуется горизонтальное центрированное отображение водяного знака, установите свойство Layout в WatermarkLayout.Horizontal.

3. Добавление водяного знака-изображения

По сравнению с текстовыми водяными знаками, водяные знаки-изображения подходят для более широкого круга сценариев:

  • Добавление логотипа компании в качестве водяного знака во внутренние документы

  • Наложение изображений с авторскими правами на дизайнерские макеты

  • Использование изображения подписи как утверждающего водяного знака документа

Описание основных свойств

Класс PictureWatermark предоставляет следующие настраиваемые свойства:

Реализация кода

using System;

using System.Drawing;

using Spire.Doc;

using Spire.Doc.Documents;

namespace InsertImageWatermark

{

internal class Program

{

static void Main(string[] args)

{

// Создание экземпляра объекта Document

Document document = new Document();

// Загрузка документа Word

document.LoadFromFile("Input.docx");

// Вставка водяного знака-изображения

InsertImageWatermark(document);

// Сохранение документа

document.SaveToFile("InsertImageWatermark.docx", FileFormat.Docx);

}

private static void InsertImageWatermark(Document document)

{

PictureWatermark picture = new PictureWatermark();

picture.Picture = Image.FromFile("watermark.png"); // Загрузка изображения

picture.Scaling = 200; // Масштаб (%)

picture.IsWashout = false; // Использовать ли эффект выцветания

document.Watermark = picture;

}

}

}

Два визуальных эффекта для водяного знака-изображения

4. Удаление водяного знака

Жизненный цикл документа обычно включает несколько этапов, и необходимость в водяных знаках не всегда постоянна. Например, документ на стадии проверки может требовать заметного водяного знака «Конфиденциально», но после завершения проверки и официальной публикации водяной знак может стать лишним и потребовать удаления.

Принцип работы

В Spire.Doc удаление водяного знака реализовано очень просто: свойство Document.Watermark по сути является ссылкой на объект. Когда оно указывает на экземпляр TextWatermark или PictureWatermark, это означает, что водяной знак активен. Если же присвоить этому свойству пустую ссылку, водяной знак будет удалён из документа.

Реализация кода

using Spire.Doc;

namespace RemoveWatermark

{

class Program

{

static void Main(string[] args)

{

// Создание экземпляра Document

Document doc = new Document();

// Загрузка документа Word с водяным знаком

doc.LoadFromFile("Input.docx");

// Удаление водяного знака

doc.Watermark = null;

// Сохранение результата

doc.SaveToFile("RemoveWatermark.docx", FileFormat.Docx2013);

}

}

}

⚠️ Важные замечания

Этот способ удаления работает только для стандартных водяных знаков, добавленных через Spire.Doc. Если «водяной знак» реализован нестандартным способом (например, полупрозрачная фигура в колонтитуле или встроенное фоновое изображение), данный метод не сработает — потребуется использовать другие стратегии удаления содержимого документа.

5. Заключение

С помощью Spire.Doc for .NET разработчики могут легко и стандартизированно добавлять и удалять водяные знаки в документах Word с использованием C#. Основные операции, рассмотренные в статье:

Рекомендации по применению

  • Текстовые водяные знаки : подходят для сценариев с динамической генерацией текста, например отображения различных уровней конфиденциальности в зависимости от прав пользователя

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

  • Удаление водяных знаков : подходит для документооборота, например когда документы содержат водяной знак на этапе внутреннего согласования и очищаются перед внешней публикацией

Это решение не зависит от среды Microsoft Office и подходит для развёртывания в серверных приложениях и фоновых службах, обеспечивая хорошую стабильность и масштабируемость.

Показать полностью 6
3

Добавление нумерации страниц в PDF через Python (подробное руководство)

При работе с контрактами, отчетами, научными работами и техническими документами PDF добавление нумерации страниц является обязательной функцией. Традиционные инструменты для редактирования PDF часто имеют сложную настройку разметки. С помощью библиотеки Free Spire.PDF for Python на языке Python можно легко прописать код и разместить нумерацию страниц в нижнем колонтитуле PDF файла по центру, слева или справа.

В данном руководстве рассказывается, как при помощи мощной библиотеки Spire.PDF for Python автоматически добавить русскую нумерацию страниц в PDF-документы. Представлены готовые варианты кода для трех вариантов выравнивания, которые можно использовать под любые задачи.

I. Подготовка к работе

Сначала установите библиотеку Free Spire.PDF for Python:

pip install spire.pdf.free

После установки импортируйте необходимые модули в код проекта:python

from spire.pdf.common import * from spire.pdf import *

II. Разбор основных компонентов

Перед написанием кода разберем назначение ключевых классов библиотеки:

Проще говоря: PdfPageNumberField и PdfPageCountField являются переменными с числовыми значениями, а PdfCompositeField формирует итоговый текст по заданному шаблону.

III. Готовый код (нумерация по центру)

Ниже представлен полный код для добавления русской нумерации страниц по центру с подробными комментариями:

from spire.pdf.common import *

from spire.pdf import *

# Загрузка PDF-документа

doc = PdfDocument()

doc.LoadFromFile("Input.pdf")

# Установка шрифта Times New Roman (поддержка кириллицы)

font = PdfTrueTypeFont("Times New Roman", 12.0, PdfFontStyle.Regular, True)

brush = PdfBrushes.get_Black()

pen = PdfPen(brush, 1.0)

# Инициализация полей номера и общего количества страниц

pageNumberField = PdfPageNumberField()

pageCountField = PdfPageCountField()

# Шаблон русской нумерации страниц

compositeField = PdfCompositeField(

font,

brush,

"Страница {0} из {1}",

[pageNumberField, pageCountField]

)

# Задание отступов (единица измерения: пункты)

leftMargin = 54.0

rightMargin = 54.0

bottomMargin = 72.0

# Добавление нумерации на все страницы

for i in range(doc.Pages.Count):

page = doc.Pages.get_Item(i)

pageSize = page.Size

# Отрисовка разделительной линии

lineY = pageSize.Height - bottomMargin + 15.0

page.Canvas.DrawLine(pen, leftMargin, lineY, pageSize.Width - rightMargin, lineY)

# Определение размера текста для корректного выравнивания

pageNumberSize = font.MeasureString(f"Страница {i + 1} из {doc.Pages.Count}")

# Координаты расположения нумерации по центру

compositeField.Location = PointF(

(pageSize.Width - pageNumberSize.Width) / 2,

pageSize.Height - bottomMargin + 18.0

)

# Отрисовка нумерации на странице

compositeField.Draw(page.Canvas, 0.0, 0.0)

# Сохранение готового файла и закрытие ресурсов

doc.SaveToFile("Output.pdf")

doc.Dispose()

IV. Реализация выравнивания слева и справа

Для смены положения достаточно изменить координату X в параметре compositeField.Location.

4.1 Выравнивание по левому краю

# Координата X равна левому отступу

compositeField.Location = PointF(

leftMargin,

pageSize.Height - bottomMargin + 18.0

)

Результат: надпись «Страница 1 из 10» отображается в левом нижнем углу страницы.

4.2 Выравнивание по правому краю

# Расчет координаты для расположения в правой части

compositeField.Location = PointF(

pageSize.Width - pageNumberSize.Width - rightMargin,

pageSize.Height - bottomMargin + 18.0

)

Результат: надпись «Страница 1 из 10» отображается в правом нижнем углу страницы.

V. Разные варианты оформления русской нумерации

Помимо стандартного варианта «Страница X из Y» можно использовать другие форматы:

5.1 Компактный вариант

compositeField = PdfCompositeField(

font, brush, "{0} / {1}",

[pageNumberField, pageCountField]

)

# Отображение: 1 / 10

5.2 Вариант с декоративными знаками

compositeField = PdfCompositeField(

font, brush, "- {0} / {1} -",

[pageNumberField, pageCountField]

)

# Отображение: - 1 / 10 -

5.3 Только номер страницы (без общего количества)

compositeField = PdfCompositeField(

font, brush, "{0}",

[pageNumberField]

)

# Отображение: 1

VI. Рекомендуемые шрифты для кириллицы

Пример установки шрифта:

font = PdfTrueTypeFont("Arial", 12.0, PdfFontStyle.Regular, True)

VII. Настройка рабочих параметров

7.1 Изменение отступов

Корректируйте значения для изменения расположения нумерации:

leftMargin = 54.0 # Увеличение смещает текст вправо

rightMargin = 54.0 # Увеличение смещает текст влево

bottomMargin = 72.0 # Увеличение смещает нумерацию выше, уменьшение – ниже

7.2 Корректировка вертикального положения

# Положение разделительной линии

lineY = pageSize.Height - bottomMargin + 15.0

# Положение текста нумерации

compositeField.Location = PointF(x, pageSize.Height - bottomMargin + 18.0)

Увеличение числовых значений опускает элементы вниз, уменьшение – поднимает вверх.

7.3 Изменение размера шрифта

# Установка размера шрифта 14 пунктов

font = PdfTrueTypeFont("Times New Roman", 14.0, PdfFontStyle.Regular, True)

После смены размера система автоматически пересчитывает габариты текста и подстраивает расположение.

VIII. Решение распространенных проблем

Вопрос 1: Кириллические символы отображаются некорректно

Ответ: Используйте шрифты с полной поддержкой кириллицы (Times New Roman, Arial, PT Sans).

Вопрос 2: Нумерация отображается в верхнем колонтитуле

Ответ: Проверьте формулу расчета координаты Y, чем выше значение, тем ближе элемент к нижнему краю страницы.

Вопрос 3: Нумерация перекрывается основным текстом документа

Ответ: Увеличьте значение bottomMargin, чтобы выделить свободное место в нижней части страницы.

Вопрос 4: Пропустить нумерацию для титульного листа

Ответ: Измените начало цикла, чтобы нумерация начиналась со второй страницы:

for i in range(1, doc.Pages.Count):

Вопрос 5: Добавить нумерацию только на определенные страницы

Ответ: Добавьте условие проверки в цикл перебора страниц:

for i in range(doc.Pages.Count):

if 2 <= i <= 10:

# Код добавления нумерации

IX. Итог

С помощью библиотеки Free Spire.PDF for Python можно быстро добавить русскую нумерацию страниц в массовом режиме, поддерживая три варианта выравнивания.

Основная последовательность действий:

  1. Загрузка исходного PDF-документа

  2. Инициализация шрифта и полей нумерации

  3. Формирование текстового шаблона на русском языке

  4. Перебор страниц и расчет координат для размещения текста

  5. Сохранение готового документа

Данный способ отличается высокой скоростью работы и универсальностью, подходит для документов любого объёма.

Показать полностью 3
4

Добавление или чтение формул Excel с помощью C#: Полное руководство

В повседневных задачах обработки офисных данных формулы и функции Excel являются основой автоматизированных вычислений и анализа данных. Для .NET разработчиков распространённой и практичной задачей является программное добавление формул в файлы Excel или извлечение логики формул из существующих таблиц. В этой статье мы используем легковесную и бесплатную библиотеку Free Spire.XLS for .NET, чтобы подробно продемонстрировать, как добавлять и читать формулы Excel с помощью C#.

Добавление или чтение формул Excel с помощью C#: Полное руководство

Подготовка: подключение Free Spire.XLS

Перед началом кодирования нам нужно добавить Free Spire.XLS for .NET в проект. Этот компонент легко устанавливается через менеджер пакетов NuGet. Выполните следующую команду в консоли диспетчера пакетов:

Install-Package FreeSpire.XLS

После установки мы можем использовать пространство имён using Spire.Xls; для доступа ко всем классам и методам, связанным с операциями Excel.

1. Добавление формул в Excel

Сценарии добавления формул очень разнообразны: например, массовый расчёт общего объёма продаж, вычисление среднего балла студентов, создание динамических отчётов и т.д. Пример ниже показывает, как создать новую книгу Excel, записать в неё базовые данные и добавить формулы в определённые ячейки.

using Spire.Xls;

Workbook workbook = new Workbook();

Worksheet sheet = workbook.Worksheets[0];

// Добавление базовых числовых данных

sheet.Range[1, 1].NumberValue = 1;

sheet.Range[1, 2].NumberValue = 2;

sheet.Range[1, 3].NumberValue = 3;

sheet.Range[1, 4].NumberValue = 4;

sheet.Range[1, 5].NumberValue = 5;

sheet.Range[1, 6].NumberValue = 6;

// Добавление функции: среднее значение (AVERAGE)

string averageFormula = "=AVERAGE(Sheet1!$A$1:A$6)";

sheet.Range[2, 1].Formula = averageFormula;

// Добавление арифметической формулы

string calcFormula = "=1+2+3+4+5-6-7+8-9";

sheet.Range[3, 1].Formula = calcFormula;

workbook.SaveToFile("AddFormulasAndFunctions.xlsx", ExcelVersion.Version2016);

workbook.Dispose();

Пояснение ключевых моментов кода:

  • Свойство sheet.Range[строка, столбец].Formula напрямую присваивает строку формулы ячейке. Синтаксис полностью совпадает с родными формулами Excel.

  • В формулах поддерживаются абсолютные ссылки (например, $D$2) и относительные ссылки (например, F$2), как и в Excel.

  • Можно добавлять не только простые арифметические операции, но и встроенные функции, такие как AVERAGE, SUM, IF.

2. Чтение существующих формул из Excel

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

using Spire.Xls;

using System.IO;

using System.Text;

Workbook workbook = new Workbook();

workbook.LoadFromFile("Formulas.xlsx");

Worksheet sheet = workbook.Worksheets[0];

StringBuilder sb = new StringBuilder();

CellRange usedRange = sheet.AllocatedRange;

foreach (CellRange cell in usedRange)

{

if (cell.HasFormula)

{

string cellName = cell.RangeAddressLocal;

string formula = cell.Formula;

sb.AppendLine($"{cellName} содержит формулу: {formula}");

}

}

File.WriteAllText("ReadFormulasAndFunctions.txt", sb.ToString());

Пояснение ключевых моментов кода:

  • Свойство cell.HasFormula возвращает булево значение для быстрой проверки, содержит ли ячейка формулу.

  • cell.Formula возвращает строковое представление формулы, например =AVERAGE(D2:F2).

  • AllocatedRange позволяет получить диапазон использованных данных на листе, избегая перебора всех пустых ячеек и повышая эффективность.

  • Извлечённая информация о формулах записывается в текстовый файл для последующего анализа или архивации.

3. Практические сценарии использования

Освоив добавление и чтение формул, можно создать множество полезных инструментов автоматизации:

  1. Генератор отчётов : автоматическая запись исходных данных в шаблон Excel и динамическое добавление статистических формул, таких как SUM, COUNTIF.

  2. Инструмент аудита формул : массовое чтение сложных формул в финансовых отчётах и проверка их логики для предотвращения ошибок.

  3. Помощник миграции формул : извлечение формул из старых файлов Excel и массовое применение их в соответствующих местах новых шаблонов.

  4. Учебная вспомогательная система : автоматическая проверка заданий Excel, сданных студентами, чтение формул для определения правильности шагов решения.

4. Примечания и рекомендации

  • Строка формулы должна начинаться со знака равенства =, иначе компонент будет обрабатывать её как обычный текст.

  • Диапазон ячеек, на который ссылается формула, должен быть корректным. Ссылка на несуществующие данные может вызвать ошибку #REF! при открытии файла в Excel.

  • Free Spire.XLS — бесплатная версия, но имеет ограничение по количеству страниц (не более 5 страниц на рабочий лист). Для большинства небольших и средних проектов этого вполне достаточно.

  • Для работы с очень большими файлами или снятия ограничения на количество страниц можно рассмотреть переход на коммерческую версию Spire.XLS.

Заключение

Из примеров кода в этой статье мы ясно видим, что использование Free Spire.XLS for .NET для работы с формулами Excel в C# является интуитивно понятным и эффективным. Будь то добавление сложной логики вычислений в таблицы или обратный анализ существующих формул, этот компонент предоставляет полноценный и простой в использовании API. Надеемся, что эта статья поможет вам более уверенно решать задачи разработки, связанные с формулами Excel, в ваших реальных проектах.

Показать полностью 1
15

Преобразование отсканированных PDF в PDF с возможностью поиска с помощью Python

Отсканированные PDF-файлы по сути представляют собой изображения, помещённые в контейнер PDF. Это означает, что вы можете их просматривать — но не можете искать текст, копировать его или извлекать данные. Если вы когда-либо пытались скопировать содержимое из отсканированного счёта или документа и у вас ничего не получилось, значит, вы столкнулись именно с этим ограничением.

Решение? OCR (оптическое распознавание символов) .

В этом руководстве вы узнаете, как преобразовать отсканированные PDF-файлы в полностью searchable PDF с помощью Python. Мы рассмотрим установку, зависимости, настройку языков и приведём чистый, готовый к использованию пример кода.

Что потребуется

Для выполнения OCR над PDF в Python мы будем использовать два основных компонента:

1. ocrmypdf (Python-библиотека)

Мощная оболочка, объединяющая OCR и обработку PDF в одной команде.

2. OCR-движок Tesseract

Основной OCR-движок, который использует ocrmypdf.

Установка

Шаг 1: Установка ocrmypdf

pip install ocrmypdf

Шаг 2: Установка Tesseract OCR

Windows

Скачайте и установите из официального репозитория Tesseract.

Во время установки обязательно обратите внимание на следующие параметры :

  • Additional language data (download)

  • Additional script data (download)

Преобразование отсканированных PDF в PDF с возможностью поиска с помощью Python

Если вы не отметите эти пункты , по умолчанию будет установлен только английский языковой модуль .

Это одна из самых распространённых ошибок — позже пользователи пытаются запускать OCR для китайского или японского языка и получают ошибки, потому что языковые данные просто не установлены.

macOS (Homebrew)

brew install tesseract

Linux (Ubuntu/Debian)

sudo apt install tesseract-ocr

Настройка Tessdata (важно)

Tesseract должен знать, где расположены файлы языковых данных (.traineddata).

В Windows обычно необходимо вручную задать переменную окружения:

os.environ["TESSDATA_PREFIX"] = r"C:\Program Files\Tesseract-OCR\tessdata"

Если путь указан неверно или отсутствует, OCR завершится ошибкой, связанной с языковыми файлами.

Поддерживаемые языки и использование Enum

Чтобы сделать выбор языка безопаснее и удобнее для разработчиков, в коде используется Enum:

class OcrLanguage(Enum):

"""Поддерживаемые OCR-языки с использованием кодов ISO 639-2."""

ENGLISH = "eng"

SIMPLIFIED_CHINESE = "chi_sim"

TRADITIONAL_CHINESE = "chi_tra"

CHINESE_ENGLISH = "chi_sim+eng"

JAPANESE = "jpn"

KOREAN = "kor"

Зачем использовать Enum?

  • Исключает опечатки вроде "engg" или "chn"

  • Поддерживает автодополнение в IDE

  • Делает код более понятным и самодокументируемым

Как добавить новые языки

Вы можете легко расширить enum OcrLanguage.

Шаг 1: Установите языковые данные

Убедитесь, что соответствующий файл .traineddata находится в папке tessdata.

Примеры:

  • fra.traineddata → французский

  • deu.traineddata → немецкий

  • spa.traineddata → испанский

Шаг 2: Расширьте Enum

class OcrLanguage(Enum):

ENGLISH = "eng"

FRENCH = "fra"

GERMAN = "deu"

SPANISH = "spa"

Шаг 3: Используйте язык

language=OcrLanguage.FRENCH

OCR для нескольких языков

Можно комбинировать несколько языков:

CHINESE_ENGLISH = "chi_sim+eng"

Это особенно полезно для:

  • двуязычных документов

  • счетов с несколькими языками

  • научных статей

Полный пример кода

Ниже приведён полностью рабочий скрипт:

import ocrmypdf

from enum import Enum

import os

# ==============================================

# Указываем каталог данных Tesseract (только Windows)

# ==============================================

os.environ["TESSDATA_PREFIX"] = r"C:\Program Files\Tesseract-OCR\tessdata"

# ==============================================

# Enum языков OCR (без опечаток, удобно выбирать)

# ==============================================

class OcrLanguage(Enum):

"""Поддерживаемые OCR-языки с использованием кодов ISO 639-2."""

ENGLISH = "eng"

SIMPLIFIED_CHINESE = "chi_sim"

TRADITIONAL_CHINESE = "chi_tra"

CHINESE_ENGLISH = "chi_sim+eng"

JAPANESE = "jpn"

KOREAN = "kor"

# ==============================================

# Основная функция конвертации

# ==============================================

def convert_scanned_pdf_to_searchable(

input_pdf_path: str,

output_pdf_path: str,

language: OcrLanguage

):

"""

Преобразует PDF на основе изображений (сканированный PDF)

в PDF с возможностью поиска с помощью OCR.

Args:

input_pdf_path: Путь к исходному сканированному PDF

output_pdf_path: Путь для сохранения searchable PDF

language: OCR-язык, выбранный из enum OcrLanguage

"""

try:

# Выполняем OCR и создаём оптимизированный searchable PDF

ocrmypdf.ocr(

input_file=input_pdf_path,

output_file=output_pdf_path,

language=language.value,

optimize=1,

force_ocr=True

)

print(f"✅ Готово! PDF с поиском сохранён в: {output_pdf_path}")

except Exception as error:

print(f"❌ Ошибка при конвертации: {str(error)}")

# ==============================================

# Запуск конвертера

# ==============================================

if __name__ == "__main__":

# Укажите пути к файлам

INPUT_FILE = "ScannedPDF.pdf"

OUTPUT_FILE = "searchable.pdf"

# Выбор языка через Enum (безопасно и удобно)

convert_scanned_pdf_to_searchable(

input_pdf_path=INPUT_FILE,

output_pdf_path=OUTPUT_FILE,

language=OcrLanguage.ENGLISH

)

Результат:

Отсканированный PDF становится доступным для выделения и поиска текста.

Отсканированный PDF становится доступным для выделения и поиска текста.

Объяснение ключевых параметров

  • language → определяет язык(и) OCR

  • optimize=1 → уменьшает размер файла без потери качества

  • force_ocr=True → принудительно запускает OCR, даже если текст уже обнаружен

Распространённые ошибки

1. Отсутствуют языковые данные

Если вы видите ошибку вида:

Error opening data file...

→ Скорее всего, не установлен языковой пакет.

2. Неверный путь Tessdata

Проверьте переменную:

TESSDATA_PREFIX

3. Низкая точность OCR

Качество OCR сильно зависит от:

  • разрешения изображения (рекомендуется 300 DPI)

  • шумов и размытия

  • чёткости шрифта

Полезные советы

Повышение точности OCR

  • Выполняйте предварительную обработку PDF (выравнивание, удаление шумов)

  • Перед OCR переводите изображения в оттенки серого

  • Используйте корректный DPI

Пакетная обработка

Оберните функцию в цикл:

for file in os.listdir("input_folder"):

if file.endswith(".pdf"):

convert_scanned_pdf_to_searchable(...)

Сохранение исходного внешнего вида

ocrmypdf добавляет скрытый текстовый слой без изменения визуальной структуры документа , поэтому внешний вид исходного PDF полностью сохраняется.

Заключение

Всего несколькими строками Python-кода вы можете превратить бесполезные отсканированные PDF-файлы в полностью searchable, копируемые и индексируемые документы.

Комбинация:

  • ocrmypdf

  • Tesseract

  • структурированного управления языками через Enum

…позволяет создать надёжный и масштабируемый OCR-конвейер, подходящий как для личного использования, так и для корпоративных задач.

Если вам приходится работать с большими объёмами сканированных файлов, этот подход способен сэкономить часы ручной работы — и мгновенно открыть доступ к вашим данным.

Показать полностью 2
1

Как скачать PDF по URL в C#

В повседневной разработке нам часто нужно получать ресурсы из интернета, особенно PDF-документы. Будь то автоматическое резервное копирование онлайн-отчётов, пакетная загрузка электронных инвойсов или получение динамически сгенерированных файлов контрактов — умение эффективно и надёжно сохранять удалённые PDF-файлы локально является очень практичным навыком.

В этой статье объясняется, как использовать библиотеку Spire.PDF для .NET с C#, чтобы скачать PDF-документ по заданному URL и сохранить его локально. Spire.PDF предоставляет богатый набор возможностей обработки PDF, выходящий далеко за рамки простого скачивания и сохранения файлов.

Предварительные требования

Сначала нужно установить Spire.PDF для .NET в вашем проекте. Это можно сделать через консоль диспетчера пакетов NuGet:

Install-Package Spire.PDF

Или через .NET CLI:

dotnet add package Spire.PDF

Библиотека поддерживает .NET Framework 4.0 и выше, .NET Core 3.1, .NET 5.0 и более поздние версии.

Код реализации

Ниже приведён полный пример кода:

using System.IO;

using System.Net;

using Spire.Pdf;

namespace DownloadPdfFromUrl

{

class Program

{

static void Main(string[] args)

{

// Создаём объект PdfDocument

PdfDocument doc = new PdfDocument();

// Создаём объект WebClient для загрузки веб-ресурсов

WebClient webClient = new WebClient();

// Скачиваем данные PDF по URL в поток памяти (MemoryStream)

using (MemoryStream ms = new MemoryStream(

webClient.DownloadData("http://www.example.com/sample.pdf")))

{

// Загружаем данные PDF из потока в объект PdfDocument

doc.LoadFromStream(ms);

}

// Сохраняем PDF-документ в локальный файл

doc.SaveToFile("result.pdf", FileFormat.PDF);

// Освобождаем ресурсы

webClient.Dispose();

doc.Close();

}

}

}

Пояснение к коду

1. Создание объекта PdfDocument

PdfDocument — это основной класс Spire.PDF, представляющий экземпляр PDF-документа. Он используется для хранения и обработки PDF-данных, загруженных из интернета.

2. Использование WebClient для скачивания данных

WebClient — это простой класс загрузки по HTTP в .NET. Метод DownloadData возвращает byte[], который представляет собой исходное бинарное содержимое PDF-файла.

3. Использование MemoryStream как “моста”

Обёртка массива байт в MemoryStream позволяет использовать метод doc.LoadFromStream(ms). Это избавляет от неэффективного процесса сохранения файла на диск, а затем чтения его обратно — и даёт возможность обрабатывать данные в памяти.

4. Загрузка и сохранение PDF

Метод LoadFromStream анализирует поток памяти и формирует пригодный для использования PDF-документ. Затем метод SaveToFile сохраняет документ в локальное хранилище под именем файла result.pdf.

Примечания

  • Обработка исключений : В производственных средах рекомендуется добавлять блоки try-catch для обработки сетевых таймаутов, недействительных URL, ошибок формата PDF и других исключений.

  • Управление памятью : И WebClient, и PdfDocument реализуют интерфейс IDisposable, поэтому ресурсы должны быть корректно освобождены. В примере MemoryStream обрабатывается через using, но также рекомендуется явно освобождать webClient и doc или оборачивать их в блоки using .

  • Асинхронная версия : Для больших файлов рассмотрите использование WebClient.DownloadDataTaskAsync или переход на HttpClient с асинхронными методами, чтобы не блокировать UI-поток.

  • Корректность URL : Убедитесь, что URL напрямую указывает на PDF-файл, а не на страницу перенаправления.

Расширенные сценарии

С помощью Spire.PDF вы можете выполнять дополнительные операции сразу после загрузки PDF, например:

  • Извлечение текста или изображений

  • Объединение нескольких PDF-файлов

  • Добавление водяных знаков или колонтитулов (верхний/нижний)

  • Конвертация PDF в изображения или формат Word

Итог

В этой статье показано, как скачать PDF по URL и сохранить его локально с помощью C# и Spire.PDF для .NET. Весь процесс простой и эффективный — требуется всего несколько строк ключевого кода.

Spire.PDF — это не только инструмент для загрузки и сохранения документов, но и мощная библиотека для обработки PDF, которую стоит изучить дальше.

Показать полностью
2

Не удаётся скопировать текст из PDF? Вот 3 способа это исправить

Случалось ли вам попадать в такую неприятную ситуацию: вы наконец находите важный PDF-отчёт или научную статью, но обнаруживаете, что файл «защищён» — курсор превращается в значок запрета, контекстное меню недоступно, и вы не можете скопировать даже пару слов.

Это ощущение «вроде бы рядом, но недоступно» действительно раздражает. Хорошая новость в том, что защита PDF не всегда так надёжна, как кажется. Сегодня разберём три практичных способа — и поделимся несколькими инсайтами, о которых вы могли не знать.

Способ 1: Google Docs — бесплатный «ледокол»

Этот метод может показаться обходным путём, но идея за ним довольно умная: когда Google Docs открывает PDF, он пытается воссоздать структуру документа — и при этом часто игнорирует ограничения на копирование.

Шаги:

  1. Откройте Google Drive и войдите в аккаунт

  2. Загрузите защищённый PDF-файл

  3. Щёлкните по файлу правой кнопкой мыши и выберите Открыть с помощью → Google Docs

  4. Дождитесь завершения конвертации и скопируйте текст

Это работает потому, что «защита» большинства PDF — это лишь флаг разрешений, а не настоящее шифрование. При конвертации Google Docs создаёт новую структуру документа, поэтому исходные ограничения не сохраняются.

Однако имейте в виду: этот способ не сработает, если PDF представляет собой отсканированное изображение, а не текстовый документ.

Способ 2: PDF24 Online Converter — просто, но учитывайте приватность

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

Шаги:

  1. Перейдите на сайт PDF24 и откройте инструмент PDF в TXT

  2. Загрузите защищённый PDF-файл

  3. Нажмите «Конвертировать» и дождитесь обработки

  4. Скачайте TXT-файл и свободно копируйте текст

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

Практический совет: сначала загрузите безопасный тестовый файл, чтобы оценить скорость обработки и ознакомиться с политикой конфиденциальности сервиса.

Способ 3: Автоматизация с Python — «двигатель» для пакетной обработки

Если вам нужно работать с десятками или сотнями защищённых PDF, ручные методы становятся неэффективными. Здесь на помощь приходят скрипты на Python.

Установите необходимую библиотеку:

pip install spire.pdf.free

Пример кода:

from spire.pdf import *

doc = PdfDocument()

doc.LoadFromFile("Secured.pdf")

for i in range(doc.Pages.Count):

page = doc.Pages[i]

textExtractor = PdfTextExtractor(page)

extractOptions = PdfTextExtractOptions()

extractOptions.IsExtractAllText = True

text = textExtractor.ExtractText(extractOptions)

with open(f'output/TextOfPage-{i+1}.txt', 'w', encoding='utf-8') as file:

lines = text.split("\n")

for line in lines:

if line != '':

file.write(line)

doc.Close()

Главная ценность этого подхода — не только в извлечении текста, но и в интеграции. Вы можете встроить этот скрипт в конвейер обработки данных — например, автоматически отслеживать папку и извлекать текст из новых защищённых PDF в базу данных.

Обратите внимание на параметр, который легко упустить: IsExtractAllText = True. Он принудительно извлекает текст, помеченный как «некопируемый», фактически обходя ограничения, установленные PDF-просмотрщиками.

Примечание:

Бесплатная версия Spire.PDF для Python поддерживает документы объёмом до 10 страниц. Для больших файлов можно разбить их на части или использовать альтернативные библиотеки.

Заключение

Эти три метода подходят для разных задач:

  • Для разового использования проще всего воспользоваться Google Docs

  • Для быстрого результата (если приватность не критична) подойдут онлайн-инструменты

  • Для пакетной обработки и автоматизации лучше всего использовать Python

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

Показать полностью
3

C#: Быстрая генерация документов Word с помощью шаблона

В повседневной разработке часто возникают сценарии, требующие массовой генерации договоров, уведомлений, отчётов и других документов Word. Самый элегантный способ — подготовить файл шаблона и через код заменить в нём плейсхолдеры, быстро получив итоговый документ. Сегодня поделимся, как легко реализовать эту задачу с помощью Free Spire.Doc for .NET.

Почему Free Spire.Doc?

Free Spire.Doc — это бесплатный и простой в использовании компонент для работы с Word, не требующий установки Microsoft Office. Он позволяет создавать, читать, редактировать и сохранять документы. Поддерживает .NET Framework и .NET Core, что идеально подходит для пакетной обработки на сервере.

Установка через NuGet:

PM> Install-Package FreeSpire.Doc

Реализация подхода

  1. Заранее разработать шаблон Word (например, template.docx), отметив специальными плейсхолдерами места для заполнения

  2. В коде загрузить шаблон и заменить плейсхолдеры на реальные данные

  3. Поддерживается замена текста и вставка изображений (например, фотографий)

  4. Сохранить результат как новый документ Word

Полный код

using Spire.Doc;

using Spire.Doc.Documents;

using Spire.Doc.Fields;

using System.Drawing;

namespace CreateWordByReplacingPlaceholders

{

class Program

{

static void Main(string[] args)

{

// Инициализация нового объекта Document

Document document = new Document();

// Загрузка файла шаблона Word

document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\template.docx");

// Словарь для хранения плейсхолдеров и их замен

Dictionary<string, string> replaceDict = new Dictionary<string, string>

{

{ "#name#", "Ли Сы" },

{ "#gender#", "Мужской" },

{ "#birthdate#", "20 марта 1990 г." },

{ "#address#", "Улица Северного Сианя" },

{ "#city#", "Чэнду" },

{ "#province#", "Сычуань" },

{ "#postal#", "610000" },

{ "#country#", "Китай" }

};

// Замена плейсхолдеров в документе соответствующими значениями

foreach (KeyValuePair<string, string> kvp in replaceDict)

{

document.Replace(kvp.Key, kvp.Value, true, true);

}

// Путь к файлу изображения

String imagePath = "C:\\Users\\Administrator\\Desktop\\portrait.png";

// Замена плейсхолдера для фотографии на изображение

ReplaceTextWithImage(document, "#photo#", imagePath);

// Сохранение изменённого документа

document.SaveToFile("ReplacePlaceholders.docx", FileFormat.Docx);

// Освобождение ресурсов

document.Dispose();

}

// Метод для замены плейсхолдера в документе на изображение

static void ReplaceTextWithImage(Document document, String stringToReplace, String imagePath)

{

// Загрузка изображения по указанному пути

Image image = Image.FromFile(imagePath);

DocPicture pic = new DocPicture(document);

pic.LoadImage(image);

pic.Width = 130;

// Поиск плейсхолдера в документе

TextSelection selection = document.FindString(stringToReplace, false, true);

// Получение диапазона найденного текста

TextRange range = selection.GetAsOneRange();

int index = range.OwnerParagraph.ChildObjects.IndexOf(range);

// Вставка изображения и удаление текста-плейсхолдера

range.OwnerParagraph.ChildObjects.Insert(index, pic);

range.OwnerParagraph.ChildObjects.Remove(range);

}

}

}

Подробное объяснение кода

1. Замена текста

Сначала подготавливается словарь, хранящий соответствие между плейсхолдерами и заменяющим текстом:

Dictionary<string, string> replaceDict = new Dictionary<string, string>

{

{ "#name#", "Ли Сы" },

{ "#gender#", "Мужской" },

// ... остальные поля

};

Затем происходит перебор словаря и вызов метода document.Replace. Последние два параметра указывают, учитывать ли регистр и заменять ли только целые слова.

2. Замена на изображение

Замена на изображение немного сложнее. Основные шаги:

  • Загрузка изображения с помощью Image.FromFile

  • Создание объекта DocPicture, загрузка в него изображения и установка ширины

  • Поиск плейсхолдера через FindString

  • Получение абзаца и индекса, где находится плейсхолдер

  • Вставка изображения в ту же позицию и удаление текста-плейсхолдера

3. Сохранение документа

В конце вызывается метод SaveToFile для сохранения нового документа и освобождаются ресурсы.

Рекомендации по подготовке шаблона

В шаблоне Word отметьте места для динамической замены с помощью плейсхолдеров, например:

Важные замечания при использовании

  1. Убедитесь, что пути к файлу шаблона и изображению указаны верно

  2. Для плейсхолдеров рекомендуется использовать уникальные метки (например, #имя_поля#), чтобы избежать случайной замены

  3. При замене на изображение можно настроить свойства Width и Height для контроля размера отображения

  4. После обработки не забудьте вызвать Dispose() для освобождения ресурсов

Заключение

С помощью Free Spire.Doc достаточно поддерживать один набор шаблонных файлов, чтобы быстро генерировать тысячи персонализированных документов, значительно повышая эффективность работы. Этот компонент также поддерживает объединение ячеек, настройку стилей шрифта, добавление колонтитулов и другие расширенные функции. Заинтересовавшиеся могут глубже изучить его возможности!

Показать полностью 2
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества