【问题标题】:PDFsharp Not Reading in Correct Page SizePDFsharp 没有以正确的页面大小阅读
【发布时间】:2017-03-23 22:51:55
【问题描述】:

我正在尝试开发一个为 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 并确认它们是正确的,然后再继续。

【问题讨论】:

  • 请不要将解决方案编辑到问题中,而是将其作为答案本身并在您接受时立即接受允许。

标签: vb.net pdf pdfsharp


【解决方案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

【讨论】:

  • 谢谢。似乎在一定程度上解决了保存问题。好奇您是否知道但 PDFpage.size 和 PDFpage.width 是否存在错误?我认为一旦页面方向固定,我就可以读取页面大小,但是有些文档显示为横向尺寸,并且具有清晰的纵向尺寸,并且我保存它们的能力在知道它是纵向还是景观。或许您知道另一种了解文本方向的方法?
  • @user2823955 SizeOrientation 在创建新页面时有效,但在打开现有页面时无效。 SizeOrientation 确定页面的大小,但只有 WidthHeight 保留在 PDF 文件中。
【解决方案2】:

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

代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多