Изменить PDF - Репозиция текста - PullRequest
4 голосов
/ 05 февраля 2012

Есть ли способ сместить / переместить текст внутри существующей pdf-страницы в другую позицию ?

Как будто в области x = 100 есть какой-то текст, у = 100, ш = 100, ч = 100, и я хочу переместить его в х = 50, у = 200, ш = 100, ч = 100.

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

Один из способов - сделать растровое изображение определенной области текста, который я хочу сместить, нарисовать белый прямоугольник над этой областью и вставить растровое изображениена новом месте.Я не хочу использовать это решение, так как я работаю с большими файлами PDF с более чем 1 КБ страниц, где каждая страница должна быть изменена.

Я обнаружил, что мне нужно найти способ изменить текстоператоры размещения (текстовая матрица и параметры состояния текста), что не так просто.

У кого-нибудь есть идеи?

Ответы [ 4 ]

6 голосов
/ 06 февраля 2012

Я думаю, что это можно сделать, если все файлы PDF простые (не сложные), поступающие из одного и того же приложения.
Если вам это нужно, например, веб-сайт, куда пользователи могут загружать файлы, а потом лучше забыть об этом: вы никогда не получите решение, которое будет идеально работать с любым файлом PDF.

PDFsharp может помочь - но AFAIK PDFsharp делает только половину того, что вам нужно. PDFsharp даст вам блоки, которые составляют PDF-файл. Вы должны проанализировать блоки, чтобы найти инструкции по рисованию, проверить позиции и переместить их.
Некоторые приложения даже не рисуют слова, поэтому простое слово, такое как «Hello», может быть нарисовано за 3 части (возможно, «Он», «ll» и «o»). Возможно, вам придется обратить на это внимание; возможно нет, если все файлы принадлежат одному приложению.

Я думаю, что приведенный здесь код для извлечения текста может быть полезен:
http://forum.pdfsharp.net/viewtopic.php?p=4010#p4010
Для того, чтобы переместить текст, вы должны найти его в первую очередь - много дополнительной работы все еще необходимо ...

1 голос
/ 25 апреля 2013

Вы можете удалить объект, используя Page.Contents.Elements.RemoveAt (8) Проверить количество элементов, проверив Page.Contents.Elements.Count.

Вы можете получить строковое значение каждого элемента (длявыполнить некоторую проверку строки) вы можете получить данные, как показано ниже.

public static string GetElementStream(PdfPage page, int elementIndex)
    {
        string strStreamValue;
        byte[] streamValue;
        strStreamValue = "";

        if (page.Contents.Elements.Count >= elementIndex)
        {
            PdfDictionary.PdfStream stream = page.Contents.Elements.GetDictionary(elementIndex).Stream;
            streamValue = stream.Value;

            foreach (byte b in streamValue)
            {
                strStreamValue += (char)b;
            }
        }
        return strStreamValue;
    }
0 голосов
/ 08 февраля 2012

Если вам нужна коммерческая библиотека вместо PDFSharp, вы можете попробовать Amyuni PDF Creator .Net или Amyuni PDF Creator ActiveX .Метод IacDocument.GetObjectsInRectangle позволяет получить все «графические объекты» указанного прямоугольника, затем вы можете добавить определенное значение к каждой координате x и / или y, чтобы переместить эти объекты вокругстр.Из документации:

IacDocument.GetObjectsInRectangle Method

The GetObjectsInRectangle method gets all the objects that are in the specified rectangle.

Применяется обычный отказ от ответственности.

0 голосов
/ 05 февраля 2012

Или вы можете нарисовать и создать текстовую форму только для чтения в новом месте

...