2016-09-08 3 views
-1

Im редактирование pdf. Клиент хочет, чтобы изображение внутри pdf было изменено и изменено.Как получить ориентацию изображения в формате pdf с использованием itextsharp

так, что я сделал это, чтобы извлечь изображение внутри PDF, чтобы иметь возможность манипулировать изображение, а затем вставить его снова в Ф (замена старый)

здесь кода, где я получил код для извлечения изображения

https://psycodedeveloper.wordpress.com/2013/01/10/how-to-extract-images-from-pdf-files-using-c-and-itextsharp/

но когда я извлечь изображение на изображение поворачиваются на 180 градусов

я даже использовал свободную spire.PDF, чтобы извлечь изображение, но извлеченное изображение spire.pdf я с повернутой на 90 градусов. так как я могу получить ориентацию изображения в формате pdf. так что я могу сделать изображение исходным. Благодарю вас

+0

@BradLarson * Изображение было чувствительного характера и ненужным. * - «Чувствительная природа» ** да **, «лишний» ** нет **. Без образца я мог бы не упомянуть о вращении страницы, а просто матрицу преобразования, которая бы не помогла ОП. (Но из-за характера pdf я действительно воздержался от добавления скриншотов в ответ.) – mkl

+0

@ mkl - Все, что я могу сказать, это то, что люди протестуют против его включения через флаги, и это не показалось критическим. –

ответ

2

Существует два важных фактора, определяющих эффективное вращение изображения, текущую матрицу преобразования во время рисования изображения (которая также фиксирует размеры изображения) и поворот страницы.

Вы можете определить эти значения, как показано ниже в коде вы ссылаетесь:

... 

public static Dictionary<string, System.Drawing.Image> ExtractImages(string filename) 
{ 
    var images = new Dictionary<string, System.Drawing.Image>(); 

    using (var reader = new PdfReader(filename)) 
    { 
     var parser = new PdfReaderContentParser(reader); 
     ImageRenderListener listener = null; 

     for (var i = 1; i <= reader.NumberOfPages; i++) 
     { 
      // v-- Determine clockwise rotation of page 
      Console.WriteLine("Page {1} is rotated by {0}°.\n", reader.GetPageRotation(i), i); 
      // ^-- Determine clockwise rotation of page 

      parser.ProcessContent(i, (listener = new ImageRenderListener())); 
      var index = 1; 
      [...] 
     } 
     return images; 
    } 
} 

... 

public void RenderImage(ImageRenderInfo renderInfo) 
{ 
    // v-- Determine transformation matrix of image 
    Matrix ctm = renderInfo.GetImageCTM(); 
    Console.WriteLine("Found image with transformation matrix:\n{0}\n", ctm); 
    // ^-- Determine transformation matrix of image 

    PdfImageObject image = renderInfo.GetImage(); 
    PdfName filter = (PdfName)image.Get(PdfName.FILTER); 
    [...] 
} 

... 

Выход в вашем случае:

Page 1 is rotated by 270°. 

Found image with transformation matrix: 
792,0001 0 0 
    0  612 0 
    0  0 1 

Found 1 images on page 1. 

Таким образом, матрица преобразования, очевидно, только масштабирует изображение, чтобы соответствующие размеры без поворота, но сама страница определяется как показанная на 270 °.

Это соответствует моим наблюдениям. В частности, в отличие от того, что вы сказали:

но когда я извлечь изображение в изображение поворачивается на 180 градусов

Я получаю изображение из вашего кода, который должен быть повернут на 270 ° по часовой стрелке быть в вертикальном положении.

Если вы действительно получили изображение, повернутое на 180 °, вам следует проверить версию iTextSharp, которую вы используете. Архив на веб-сайте, на который вы ссылаетесь, содержит довольно старую версию, 5.3.5.0, и ошибки могут быть исправлены за это время.

+0

Спасибо. Это сработало. Спасибо за ваше время –

Смежные вопросы