pdfsharp - 在导入的 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 内容在该页面上的现有内容(付款单)“后面”呈现,所以它被遮挡了?如何解决这个问题呢?
解决方案
我找到了解决方案。在第 4 行,我XGraphics
从导入的 PDF 页面创建对象,我需要做
XGraphics.FromPdfPage(pdfDoc.Pages[0], XGraphicsPdfPageOptions.Prepend)
代替
XGraphics.FromPdfPage(pdfDoc.Pages[0])
推荐阅读
- xamarin.uwp - UWP VLC.MediaElement 在导航回当前页面时播放视频流
- php - 将数据库中的动态项目中的所见即所得编辑器显示为类
- r - 从全局环境中获取对象并将其像数据框一样切片
- couchdb - couchdb 节点集群节点计数与副本大小/计数
- javascript - json数据中的迭代问题,一遍又一遍地迭代相同的数据
- clockify - 如何通过 API 锁定 timeEntrys?
- php - 我可以同时定义 slick、bootstrap 和 corusel 吗?
- angular - Angular Datatable-在角度 5 中第二次更新表时没有刷新
- javascript - 如何在jquery中从表行和列中获取所有值到数组
- javascript - 如何在我用 nextjs 编写的主页中添加 html 和 css