2011-12-12 26 views
6

Estoy creando una aplicación web que se utilizará para mantener documentos PDF en nuestra base de datos que se reciben a través de un sistema automático cuando recibimos faxes. Los usuarios necesitan poder revisar estos documentos, y una de las cosas más comunes que necesitan para poder hacer con estos documentos es voltear/rotar páginas individuales cuando se colocaron en la máquina de fax de la manera incorrecta. Esto es casi siempre una rotación de 180 grados de la página. Creé una función para hacer esto, que parece funcionar, pero solo la primera vez que se llama. Cualquier llamada posterior a esta función ya no parece funcionar. Otra cosa extraña asociada con esta función, es que también tengo otro método que se llama que agregará algo de texto al documento en las ubicaciones seleccionadas. Paso el texto y algunas coordenadas, y escribe el texto en esas coordenadas en el documento, y todo está bien. El problema con esto es después de rotar el documento (la única vez que girará), si un usuario intenta agregar texto al documento en alguna parte, parece invertir las coordenadas en las que coloca el texto, y el el texto está al revésPdfSharp: Rotar una página en un documento

Todo esto me dice que, en última instancia, estoy haciendo la rotación de página mal de alguna manera. Parece que no puedo encontrar ninguna buena muestra de cómo rotar una página en un documento PdfSharp correcta manera, por lo que alguna orientación sería tremendamente útil y muy apreciada. Gracias por adelantado.

Aquí está el código que estoy usando actualmente para rotar páginas, y añadir texto a las páginas:

// This is how I'm rotating the page... 
public PdfDocument FlipPage(byte[] documentSource, int pageNumber) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     stream.Write(documentSource, 0, documentSource.Length); 
     var document = PdfReader.Open(stream); 
     var page = document.Pages[pageNumber - 1]; 
     page.Rotate = 180; 

     return document; 
    } 
} 

// This is how I'm adding text to a page... 
public static void AddTextToPage(this PdfDocument document, int pageNumber, Annotation annotation) 
{ 
    var page = document.Pages[pageNumber - 1]; 
    annotation.TargetHeight = page.Height.Value; 
    annotation.TargetWidth = page.Width.Value; 

    var graphics = XGraphics.FromPdfPage(page); 
    var textFormatter = new XTextFormatter(graphics); 
    var font = new XFont("Arial", 10, XFontStyle.Regular); 
    graphics.DrawString(annotation.Text, font, XBrushes.Red, new PointF((float)annotation.TargetX, (float)annotation.TargetY)); 
} 
+0

comprobar esto: graphics.RotateTransform (180) –

+0

Eso compila y tiene éxito, pero no le hace nada a la página. –

Respuesta

6

Eso no es mi área de especialización, pero en lugar de "page.Rotate = 180;" Me gustaría probar algo así:

page.Rotate = (page.Rotate + 180) % 360; 

(código no probado, puede requerir un elenco)

Al añadir texto, puede probar la "== page.Rotate 180" y el código utilizado entonces (como "graphics.RotateTransform (180)").

+0

Aahhh ... No había considerado la idea de * verificar * esa propiedad en actualizaciones posteriores. Voy a dar una oportunidad y ver cómo funciona. Lo marcará como correcto si funciona como se espera. Muchas gracias. –

Cuestiones relacionadas