【发布时间】:2012-01-25 15:12:59
【问题描述】:
我有一个实用程序,可以使用 PDFSharp 库将批量 TIFF 图像转换为 PDF。以下代码执行实际转换。当我在 Acrobat Reader 中打开生成的 PDF 文件时,我收到一条错误消息,指出某些文件显示“图像数据不足”。其他都很好。
这可能是什么原因造成的?我在代码中遗漏了什么可以防止这种情况发生吗?
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 文件现在可以正常工作,而之前正常的 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 中的操作系统级别错误有关。任何人都可以确认这一点或提供解决方法?
【问题讨论】:
-
哪个 PDFsharp 版本,哪个版本?如果您当前使用 WPF 构建,请尝试 GDI+ 构建(反之亦然)以检查问题是否在两个构建中都出现。哪个 Windows 版本?
-
@PDFsharpTeam 我在 Windows 7 上使用 PDFsharp 版本 1.31 GDI+。
-
@PDFsharpTeam 我也尝试过使用 WPF 构建,但遇到了同样的问题。
-
使用 PDFSharp 的过程是否必须对图像进行解码和重新编码?看起来可能是由于“绘制”功能。我编写了一个命令行实用程序来执行非常高效的相同操作(无需解码/重新编码,只需重新打包图像数据)。如果您想试一试,请与我联系;你可以成为代码的免费测试者。
-
解决 Windows 7 错误的最佳方法:使用 Windows XP。说真的:PDFsharp 使用操作系统读取图像文件(因此受益于 Windows 支持的各种格式),但在 Windows 7 中它们引入了错误(某些 JPEG 文件没有正确处理,现在 TIFF 文件似乎有问题,也)。
标签: pdf pdf-generation tiff pdfsharp