PDFsharp 未以正确的页面大小读取

PDFsharp Not Reading in Correct Page Size

我正在尝试开发一个为 PDF 加水印的应用程序。我在以正确格式保存 PDF 文档时遇到问题。

我注意到有些文档在拉入时会将页面大小作为一回事读取,但当我去保存文档时,它的一部分会被截掉。例如,我有一个文档以 792x612 pts 横向保存,这与字母大小相关。但是,当以字母形式保存时,它会切掉部分页面。我注意到,如果我将文档保存在 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 并在继续之前确认它们是正确的。

在处理横向格式的页面时,PDFsharp 中存在一个已知错误。此错误存在于 PDFsharp 1.50 beta 3b,​​但应在下一个版本中修复。

查看 PDFsharp 论坛中的讨论:
http://forum.pdfsharp.net/viewtopic.php?p=9591#p9591

PdfPage.cs 中的建议修复:

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,可以尝试从第一个 post 开始的解决方法:
http://forum.pdfsharp.net/viewtopic.php?p=9587#p9587

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

代码:

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