У меня есть утилита, которая преобразует пакеты изображений TIFF в PDF-файлы с помощью библиотеки PDFSharp.Следующий код выполняет фактическое преобразование.Когда я открываю полученные PDF-файлы в Acrobat Reader, я получаю сообщение об ошибке, в котором указано «Недостаточно данных для изображения».Другие в порядке.
Что может быть причиной этого?Чего-то не хватает в коде, который мог бы предотвратить это?
Public Shared Function ConvertImageToPDF(ByVal img As Image) As Byte()
Using ms As New MemoryStream()
Using pdf As New PdfDocument()
Dim pageCount = GetPageCount(img)
For index = 0 To (pageCount - 1)
Dim page = New PdfPage()
Using sourceImage = GetPage(img, index)
Using pageImage = XImage.FromGdiPlusImage(sourceImage)
page.Width = pageImage.PointWidth
page.Height = pageImage.PointHeight
pdf.Pages.Add(page)
Using xgr = XGraphics.FromPdfPage(pdf.Pages(index))
xgr.DrawImage(pageImage, 0, 0)
End Using
End Using
End Using
Next
pdf.Save(ms, False)
pdf.Close()
End Using
Return ms.ToArray()
End Using
End Function
Public Shared Function GetPageCount(ByVal img As Image) As Integer
If (img Is Nothing) Then
Return -1
End If
Return img.GetFrameCount(FrameDimension.Page)
End Function
Public Shared Function GetPage(ByVal img As Image, ByVal pageNumber As Integer) As Image
img.SelectActiveFrame(FrameDimension.Page, pageNumber)
Dim ms = New MemoryStream()
img.Save(ms, ImageFormat.Tiff)
Return Image.FromStream(ms)
End Function
ОБНОВЛЕНИЕ:
Если я запускаю один и тот же код для тех же файлов TIFF, то файлы PDF, которые былиповрежденные ранее - теперь все в порядке, а те, которые были исправлены - теперь повреждены.
ОБНОВЛЕНИЕ 2:
После рассмотрения этой проблемы подключения (https://connect.microsoft.com/VisualStudio/feedback/details/584681/system-drawing-image-flags-has-different-value-in-vista-and-windows-7) и комментариев сообщества к этому MSDNстраница (http://msdn.microsoft.com/en-us/library/system.drawing.image.save.aspx), кажется, что проблема связана с ошибкой уровня операционной системы в Windows 7. Может кто-нибудь подтвердить это или предложить обходной путь?