2011-12-12 48 views
6

我正在創建一個Web應用程序,用於在我們的數據庫中維護PDF文檔,該文檔通過自動系統在我們接收傳真時進入。用戶需要能夠查看這些文檔,他們需要能夠處理這些文檔的更常見的事情之一就是翻轉/旋轉各個頁面,當他們以錯誤的方式放入傳真機時。這幾乎總是頁面旋轉180度。我創建了一個函數來做到這一點,這似乎工作,但只有第一次被調用。對這個函數的任何後續調用似乎都不再起作用。與這個函數相關的另一個奇怪的事情是,我還得到了另一個被調用的方法,它將在選定位置向文檔添加一些文本。我傳入文本和一些座標,並將文本寫入文檔中的這些座標,並且一切都很好。這裏的問題是,文檔旋轉後(有一段時間,旋轉),如果用戶試圖將文本添加到某個文檔,似乎扭轉它放置在文字的座標,文字是顛倒的。PdfSharp:旋轉文檔中的頁面

所有這一切告訴我,最終,我以某種方式做錯了頁面旋轉。我似乎無法找到任何如何在PdfSharp文檔中正確旋轉頁面的好例子,所以一些指導將非常有用,並且非常感謝。提前致謝。

這裏是我目前使用的代碼,旋轉頁面,並添加文本到頁面:

// 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

選中此項:graphics.RotateTransform(180) –

+0

編譯併成功,但對頁面沒有任何影響。 –

回答

6

這不是我的專業領域,但不是「page.Rotate = 180;」我想嘗試類似的東西:

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

(代碼沒有測試,可能需要強制)

當添加文本,您可以測試「page.Rotate == 180」,並使用不同的代碼,然後(如「graphics.RotateTransform(180)」)。

+0

Aahhh ...我沒有考慮過在後續更新中檢查*屬性的想法。我會給你一個鏡頭,看看它是如何工作的。如果按預期工作,將其標記爲正確。非常感謝。 –