2012-02-04 1 views
3

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

Как есть текст в области x = 100, y = 100, w = 100, h = 100, и я хочу переместить его на x = 50, y = 200, w = 100, h = 100.

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

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

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

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

+0

это для одного pdf-файла, или вам нужно что-то, что будет перемещать текст для произвольных PDF-файлов? – Jimmy

+0

Пользователь может выбрать область (прямоугольник) текста, который он хочет сдвинуть. Это для одного PDF-документа и всех его страниц. – HABJAN

ответ

5

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

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

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

0

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

+1

Мне нужно сохранить тип шрифта, размер и форматирование текста. – HABJAN

0

Если коммерческая библиотека вместо 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. 

Обычная оговорка применяется.

1

Вы можете удалить объект, используя страницу. 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; 
    }