尽管我有解决此问题的方法,但我更愿意按照遇到此问题的方式进行操作。让我在解决问题之前先解释一下上下文:
我正在使用扫描仪获取虚拟图像,我想使用这些虚拟图像来创建PDF,而每个页面都是一个图像。使用PDFsharp创建PDF时,我的工作正常。
但是;如果我尝试重新保存PDFsharp文档,它将最终使所有先前的页面空白,然后添加新图像。
对于更多情况,我使用的是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);
我通过将图像保存到列表而不是保存为新页面来使其工作,并在每次要显示它时重新制作了文档。但是,这个问题确实很奇怪。
任何帮助您理解为什么这样做的人都会受到赞赏。
答案 0 :(得分:1)
这是实现的状态:建议的方法是创建一个PdfDocument
或从文件中打开它,进行所需的更改,然后一次保存。< br />
这是您在适合自己的实现中所做的事情。
保存文档,打开文档,添加更多页面,再次保存也将起作用。这样,您将不需要所有图像的列表。但是恕我直言,使用列表并在每次保存时创建一个新的PdfDocument
是最干净的方法。
在进一步更改后再次保存时,出现意外结果。这是一个已知的问题。随时调查并解决此问题。也许这只是一个简单的变化,也许是复杂的。