PDFsharp PdfDocument. Сохранять пустые страницы при любом дополнительном сохранении - PullRequest
0 голосов
/ 21 сентября 2018

Хотя у меня есть обходной путь для этой проблемы, я бы предпочел сделать это так, как я столкнулся с этой проблемой.Позвольте мне объяснить контекст, прежде чем приступить к проблеме:

Я использую сканер для получения виртуальных изображений, которые я хочу использовать для создания PDF-файла, где каждая страница представляет собой одно изображение.Я отлично работал, используя PDFsharp для создания PDF.display of PDF

Однако;если я попытаюсь повторно сохранить документ PDFsharp, он завершает очистку всех предыдущих страниц, а затем добавляет новое изображение.display of broken PDF

Для большего контекста я использую ASP.NET Windows Forms, NTwain для программного обеспечения для сканирования, PDFsharp для создания PDF и PdfiumViewer для просмотра PDF в форме Windows.

У меня есть переменная уровня класса для документа 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 голосов
/ 22 сентября 2018

AFAIK - это состояние реализации: рекомендуемый способ - создать PdfDocument или открыть его из файла, внести необходимые изменения, а затем сохранить его один раз .
Этоэто то, что вы делаете в реализации, которая работает для вас.

Сохранение документа, его открытие, добавление дополнительных страниц, повторное сохранение также будет работать.Таким образом, вам не нужен список всех изображений.Но ИМХО использование списка и создание нового PdfDocument каждый раз, когда вы сохраняете, - самый чистый способ.

Неожиданные результаты возникают при повторном сохранении после дальнейших изменений.Это известная проблема.Не стесняйтесь исследовать эту проблему и исправить ее.Может быть, это просто простое изменение, может быть, это сложно.

...