2017-03-06 52 views
0

我想開發一個應用程序來加密PDF的。我遇到了以正確格式保存PDF文檔的問題。PDFsharp沒有閱讀正確的頁面大小

我注意到一些文檔在拉入時會將頁面大小讀爲一件事,但是當我去保存文檔時,它的一部分會被截斷。例如,我在792x612點的橫向上保存了一個與字母大小相關的文檔。但是,當以字母保存時,會將部分頁面切斷。我注意到,如果我將文檔保存在A1中,整個文檔就會出現。這裏是我的代碼:

  Dim gfx As XGraphics = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append) 
      gfx.RotateTransform(-90) 
      Dim font As XFont = New XFont("Times New Romans", 6, XFontStyle.Bold) 
      Dim tf As XTextFormatter = New XTextFormatter(gfx) 
      Dim rect As XRect = New XRect(-550, 500, 250, 150) 
      gfx.DrawRectangle(XBrushes.Transparent, rect) 
      tf.DrawString(Text, font, XBrushes.Red, rect) 
      page.Size = PdfSharp.PageSize.A1 
      page.Orientation = PdfSharp.PageOrientation.Landscape 
      Doc.save(strFileSaveLocation) 

是否有任何理由可能會發生這種情況?我正在閱讀page.height和page.width,並在繼續之前確認這些是正確的。

+0

請不要編輯溶液注入* *的問題,而是讓它在自己的權利的*答案*,當你被允許儘快接受它。 – mkl

回答

1

在處理橫向格式的頁面時,PDFsharp中存在一個已知的錯誤。此錯誤出現在PDFsharp 1.50 beta 3b中,但應在下一版本中解決。

看到PDFsharp論壇討論:在PdfPage.cs
http://forum.pdfsharp.net/viewtopic.php?p=9591#p9591

建議的修復:

internal PdfPage(PdfDictionary dict) 
    : base(dict) 
{ 
    // Set Orientation depending on /Rotate. 
    //int rotate = Elements.GetInteger(InheritablePageKeys.Rotate); 
    //if (Math.Abs((rotate/90)) % 2 == 1) 
    // _orientation = PageOrientation.Landscape; 
} 

如果你不想修改PDFsharp,也許嘗試從第一篇文章的解決方法:
http://forum.pdfsharp.net/viewtopic.php?p=9587#p9587

+0

謝謝。似乎在一定程度上解決了儲蓄問題。好奇,如果你知道,但有一個PDFpage.size和PDFpage.width錯誤?我認爲,一旦頁面方向被修復,我就可以閱讀頁面大小,但是一些文檔顯示爲具有清晰肖像尺寸的風景,並且我能夠保存它們的能力正在妨礙知道它是否是肖像或景觀。你可能知道另一種方法來了解文本的方向嗎? – user2823955

+0

@ user2823955在創建新頁面時,頁面的大小和方向可以工作,但在打開現有頁面時不起作用。 'Size'和'Orientation'確定一個頁面的大小,但只有'Width'和'Height'保留在PDF文件中。 –

0

對於遇到與我相同問題的其他人,答案是簡單地設置方向肖像。這由於某種原因會觸發文檔保存正確。 PDFsharp新手的答案將允許您在一定程度上修復您的代碼,但如果您像我一樣,並且需要知道方向以處理頁面,則解決方案將方向設置回肖像。您可能還需要重置頁面寬度和高度。

代碼:

page.Orientation = PdfSharp.PageOrientation.Portrait 
page.Width = dblPageWidth 
page.Height = dblPageHeight