Рендеринг страницы MigraDoc на импортированной странице PDFsharp не работает

Я пытаюсь создать счет-фактуру из своего кода. Внизу страницы счет-фактура должен содержать квитанцию ​​об оплате.

Я нашел какую-то стороннюю библиотеку (не связанную с PDFsharp), которая создает PDF-файл с квитанцией об оплате внизу страницы в виде массива байтов. Теперь я пытаюсь загрузить этот PDF-файл с помощью PDFsharp и использовать 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 отображается «за» существующим содержимым (платежным чеком) на этой странице, поэтому оно перекрывается? Как решить эту проблему?


person Robert Hegner    schedule 30.01.2020    source источник
comment
Большинство PDF-документов имеют черный текст на прозрачном фоне. Вы можете проверить это, активировав сетку прозрачности в Adobe Reader. Некоторые PDF-файлы отображаются черным на белом, и в этом случае выходные данные MigraDoc могут быть скрыты.   -  person I liked the old Stack Overflow    schedule 30.01.2020
comment
Платежная квитанция в формате pdf кажется черной на прозрачном фоне, поэтому приведенное выше поведение еще более странное. Однако передача параметра XGraphicsPdfPageOptions.Prepend при создании объекта XGraphics действительно помогла (см. мой собственный ответ ниже).   -  person Robert Hegner    schedule 30.01.2020


Ответы (1)


Я нашел решение. В строке 4, где я создаю объект XGraphics из импортированной страницы PDF, мне нужно сделать

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

вместо

XGraphics.FromPdfPage(pdfDoc.Pages[0])
person Robert Hegner    schedule 30.01.2020