首页 > 解决方案 > 在导入的 PDFsharp 页面上渲染 MigraDoc 页面不起作用

问题描述

我正在尝试使用我的代码生成发票。在页面底部,发票应包含付款单。

我找到了一些 3rd 方库(与 PDFsharp 无关),它生成一个 PDF,页面底部的付款单作为字节数组。现在我正在尝试使用 PDFsharp 加载该 PDF,并使用 MigraDoc 在同一页面上呈现发票的其余部分。

这是我的代码:

byte[] paymentSlipPdfBytes = GeneratePaymentSlipPdf();                      // payment slip generated by some other library
using (MemoryStream ms = new MemoryStream(paymentSlipPdfBytes))
using (PdfDocument pdfDoc = PdfReader.Open(ms, PdfDocumentOpenMode.Modify))
using (XGraphics graphics = XGraphics.FromPdfPage(pdfDoc.Pages[0]))
{
    Document invoiceDoc = GenerateInvoiceDocument();                        // other content of the invoice generated using MigraDoc
    DocumentRenderer docRenderer = new DocumentRenderer(invoiceDoc);
    docRenderer.PrepareDocument();
    docRenderer.RenderPage(graphics, 1, PageRenderOptions.All);             // trying to render MigraDoc content on the page imported from other library
    pdfDoc.Save("Invoice.pdf");
}

生成的 PDF 确实只包含付款单,但我没有看到 MigraDoc 文档中呈现的任何内容。

有趣的是,当我添加第二页pdfDoc并将 MigraDoc 文档渲染到第二页时,它工作正常。只有当我渲染到已经包含付款单的页面时,我才看不到 MigraDoc 内容。

会不会是 MigraDoc 内容在该页面上的现有内容(付款单)“后面”呈现,所以它被遮挡了?如何解决这个问题呢?

标签: pdfsharpmigradoc

解决方案


我找到了解决方案。在第 4 行,我XGraphics从导入的 PDF 页面创建对象,我需要做

XGraphics.FromPdfPage(pdfDoc.Pages[0], XGraphicsPdfPageOptions.Prepend)

代替

XGraphics.FromPdfPage(pdfDoc.Pages[0])

推荐阅读