PDFsharp PdfDocument.Save导致任何其他保存上出现空白页

时间:2018-09-21 20:10:04

标签: c# asp.net pdf webforms pdfsharp

尽管我有解决此问题的方法,但我更愿意按照遇到此问题的方式进行操作。让我在解决问题之前先解释一下上下文:

我正在使用扫描仪获取虚拟图像,我想使用这些虚拟图像来创建PDF,而每个页面都是一个图像。使用PDFsharp创建PDF时,我的工作正常。 display of PDF

但是;如果我尝试重新保存PDFsharp文档,它将最终使所有先前的页面空白,然后添加新图像。 display of broken PDF

对于更多情况,我使用的是ASP.NET Windows窗体,其中NTwain用于扫描软件,PDFsharp用于创建PDF,PdfiumViewer用于在Windows窗体上查看PDF。

我有一个文档的类级变量 PdfDocument document = new PdfDocument();

在保存图片时,我只是将图片保存到新页面

var img = pictureBox1.Image;
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XImage image = XImage.FromGdiPlusImage(img);
gfx.DrawImage(image, 0, 0);

要渲染文档,我将文档(这可能会解决问题)复制到新文档,将内容保存到新的内存流中,然后简单地查看PDF

var viewDocument = (PdfDocument)document.Clone();
MemoryStream ms = new MemoryStream();
viewDocument.Save(ms, false);
ms.Position = 0;
var pdf = PdfiumViewer.PdfDocument.Load(ms);
pdfRenderer1.Load(pdf);

我通过将图像保存到列表而不是保存为新页面来使其工作,并在每次要显示它时重新制作了文档。但是,这个问题确实很奇怪。

任何帮助您理解为什么这样做的人都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

这是实现的状态:建议的方法是创建一个PdfDocument或从文件中打开它,进行所需的更改,然后一次保存。< br /> 这是您在适合自己的实现中所做的事情。

保存文档,打开文档,添加更多页面,再次保存也将起作用。这样,您将不需要所有图像的列表。但是恕我直言,使用列表并在每次保存时创建一个新的PdfDocument是最干净的方法。

在进一步更改后再次保存时,出现意外结果。这是一个已知的问题。随时调查并解决此问题。也许这只是一个简单的变化,也许是复杂的。