PDFSharp ライブラリを使用して、TIFF 画像のバッチを PDF に変換するユーティリティがあります。次のコードは、実際の変換を実行します。生成された 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 のオペレーティング システム レベルのバグに関連しているようです。誰でもこれを確認したり、回避策を提供したりできますか?