Я использую гибкий и удобный Apitron.PDF.Kit for .NET для редактирования, извлечения текста и создания PDF ( с возможностью добавления своего стиля каждому элементу ). Бесплатная книжка.
Для создания подобной таблицы:
// создали менеджер ресурсов и добавили картинки
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("Left", "left.png"));
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("Right", "right.png"));
// создали ПДФ документ со своим стилем
FlowDocument document = new FlowDocument { Margin = new Thickness(18) };
// общий стиль для данных в ячейках таблицы
document.StyleManager.RegisterStyle("grid#iApitron", new Style { InnerBorderColor = RgbColors.LightGray, Align = Align.Center, Font = new Font(StandardFonts.Helvetica, 12) });
// добавляем стиль для заголовка таблицы
document.StyleManager.RegisterStyle("textblock.h1", new Style { Font = new Font(StandardFonts.HelveticaBold, 20) });
// сам грид
Grid grid = new Grid(Length.FromPercentage(33), Length.FromPercentage(33), Length.FromPercentage(33)) { Id = "iApitron" };
// добавляем строки таблицы с данными
grid.Add(new GridRow(Section.Empty, new TextBlock("Ну, заяц!"){Class="h1"}, Section.Empty));
grid.Add(new GridRow(new TextBlock("Col 1 Row 1"),new TextBlock("Col 2 Row 1"),new TextBlock("Col 3 Row 1")));
grid.Add(new GridRow(new TextBlock("Col 1 Row 2"),new TextBlock("Col 2 Row 2"),new TextBlock("Col 3 Row 2")));
grid.Add(new GridRow(new Image("Left"),new TextBlock("Col 2 Row 3"),new Image("Right")));
document.Add(grid);
// сохраним документ
using (Stream stream = File.Create("Apitron_table.pdf"))
{
document.Write(stream, resourceManager, new PageBoundary(Boundaries.Ledger));
}
Для простого текстового формата, Adobe явно перемудрил. Bruno Lowagie конечно проделал большую работу, но зачем всё так усложнять? Мне проще понять структуру PDFa, чем изучить API iTexta которым она обёрнута.
Что делать когда поверх текста нарисована аннотация или буквы с наклоном или по спирали, или в документе несколько слоёв? Я тоже решал подобную задачу — найти текст в документе, и выделить его цветом. У меня, получилось как-то так, найденый текст выделен жёлтеньким.
Как поправляют меня японские коллеги, в примере использовался tate gumi (режим вертикальной записи иероглифов и соответствующие правила записи), а не Kinsoku Shori — правила переноса букв на новую строку, и случаи неразделимых последовательностей символов.
Мы Apitron.PDF.Kit сделали поддержку PDF2.0 но, почему то, среди пользователей данный формат не особо популярен.
Для создания подобной таблицы:
Что делать когда поверх текста нарисована аннотация или буквы с наклоном или по спирали, или в документе несколько слоёв? Я тоже решал подобную задачу — найти текст в документе, и выделить его цветом. У меня, получилось как-то так, найденый текст выделен жёлтеньким.