【问题标题】:MigraDoc: Can I draw lines crossing out a section?MigraDoc:我可以画线跨越一个部分吗?
【发布时间】:2018-02-26 14:35:20
【问题描述】:

我正在使用 PDFsharp/MigraDoc 创建 MigraDoc 文档发票,以便使用热敏打印机进行打印。我基本上使用 MigraDoc,因为我只需要带有文本和图像的段落。现在的问题是,在某些情况下,我必须指出该法案被取消并带有划线。恐怕我不能用 MigraDoc 但用 PDFsharp 来做。 我可以将两者混合并仍将其打印为 MigraDoc 文档吗?

更新 显然没有办法将 PDFsharp 文档翻译成 MigraDoc 文档。 由于我需要同时使用这两种方法,因此我必须以另一种方式构建 MigraDoc 并将其转换为 PDFsharp 格式。完成此操作后,我需要使用 PDFSharp 的库进行预览和打印,目前我无法...

我在 [Design] 中添加了一个 PagePreview(我正在使用 WinForms),但我不知道如何使用 de PDFSharp 文档填充它...

代码sn-p:

//Render a pdf
        PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(false);
        pdfRenderer.Document = document;
        pdfRenderer.RenderDocument();

        //Draw some lines
        var page = pdfRenderer.PdfDocument.Pages[0];

        PageInfo pageInfo = pdfRenderer.DocumentRenderer.FormattedDocument.GetPageInfo(1);
        page.Width = pageInfo.Width;
        page.Height = pageInfo.Height;
        page.Orientation = pageInfo.Orientation;

        XGraphics gfx = XGraphics.FromPdfPage(page);
        {
            gfx.DrawLine(XPens.Black, 15, page.Height / 2, page.Width -15, 2 * page.Height / 3);
            gfx.DrawLine(XPens.Black, page.Width - 15, page.Height / 2, 15, 2 * page.Height / 3);
        }

        string filename = "Invoice.pdf";
        pdfRenderer.PdfDocument.Save(filename);

        //this.pagePreview1 ...

documentMigraDoc 文档。最后,我得到了正确格式的 Invoice.pdf。现在,如何在我添加到表单的 PdfSharp.Forms.PagePreview 中显示此 pdf

然后,我应该如何打印?

【问题讨论】:

  • PDFsharp 不在预览中预览 PDF 文件,也不打印 PDF 文件。我在第二个答案中建议了“仅 MigraDoc”方法。

标签: c# winforms pdfsharp migradoc


【解决方案1】:

要回答更新后的问题:我会尝试采用“仅 MigraDoc”的方法。

我会创建一个带有十字的图像 - 否则图像应该是透明的。
我会将此图像添加到页脚,并给它一个绝对位置和绝对大小,以便它填满整个页面。

通过将其作为页脚的一部分,MigraDoc 将在每个页面上重复该图像。

光栅图像的对角线不会完全平滑,但如果您使图像的十字足够大(1000x1000 像素或 2000x2000 像素左右),对于热敏打印机来说应该没问题。

【讨论】:

  • 谢谢。虽然生成的 pdf 看起来很完美......如果没有办法,我将不得不尝试你的方法。完成后我会回来的。
  • 效果很好。我做的有点不同,因为我没有看到十字架覆盖整个页面,所以我将图像添加到一个部分,并根据我想要覆盖的 Margins 和段落给它相对定位。再次感谢!
【解决方案2】:

您只能混合使用 MigraDoc 和 PDFsharp 来创建 PDF 文件。

由于您创建了 PDF 发票,因此将它们混合以创建带有交叉的页面是没有问题的。

以下是使用自己的 XGraphics 对象从 MigraDoc 绘制页面的示例代码: http://forum.pdfsharp.net/viewtopic.php?f=8&t=3172

在该循环中调用pdfRenderer.DocumentRenderer.RenderPage(gfx, i); 后,您可以使用gfx 对象在页面上绘制线条或其他对象。

【讨论】:

  • 再次感谢 Bally!现在我可以在 pdf 呈现的文档中画线,但是,在绘图之后有没有办法将其转回“MigraDoc”文档?因为 DocumentPreview 和 Printing 方法是基于 MigraDoc 格式的......我正在使用的那些。
  • 另外,我避免将其打印为 pdf,因为我已经阅读过,这样做时 Acrobat 会弹出打印。也许不完全一样,但有一些不良的副作用。抱歉还没试过,只是道听途说……
  • @Joster 如果您使用MigraDocPrintDocument 类进行打印(这与您提出的问题相矛盾),那么我的回答对您没有帮助,并且需要一种不同的方法来添加十字架。您是否使用 MigraDocPrintDocument 直接从 MigraDoc 打印?
  • 就是这样,我将编辑我的问题以使其清楚。由于这些原因,我最终需要它成为 MigraDoc 文档。我正在寻找反之亦然,首先创建一个带有十字的 pdf 文档,然后将其呈现给 MigraDoc(我可以预测十字的位置,因为它总是具有相同的格式)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多