PDFsharp没有阅读正确的页面大小

问题描述:

我想开发一个应用程序来加密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

在处理横向格式的页面时,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文件中。 –

对于遇到与我相同问题的其他人,答案是简单地设置方向肖像。这由于某种原因会触发文档保存正确。 PDFsharp新手的答案将允许您在一定程度上修复您的代码,但如果您像我一样,并且需要知道方向以处理页面,则解决方案将方向设置回肖像。您可能还需要重置页面宽度和高度。

代码:

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