PDFsharp无法读取正确的页面大小

时间:2017-03-06 16:08:14

标签: vb.net pdf pdfsharp

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

我注意到拉入的某些文档会将页面大小视为一件事,但是当我去保存文档时,它会被截断。例如,我有一个以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,并在继续之前确认这些是正确的。

2 个答案:

答案 0 :(得分:1)

在处理横向格式的页面时,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,可以尝试从第一篇文章中解决方法:
http://forum.pdfsharp.net/viewtopic.php?p=9587#p9587

答案 1 :(得分:0)

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

代码:

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