【发布时间】:2019-12-26 21:34:16
【问题描述】:
我们正在使用PDFsharp 从一个文件夹中收集一组图像并将它们放入 PDF 文件中,每页一张图像。对于这组图像,在某些查看器中打开时,生成的 PDF 文档会出现损坏...Chrome 损坏,Adobe Reader 损坏,Edge 完全放弃,但 Firefox 实际上正确呈现它。
以下是相关代码:
public static List<string> ImageExtensions()
{
return new List<string>() { ".tif", ".tiff", ".png", ".jpg", ".jpeg", ".gif" };
}
public void Convert()
{
PdfDocument doc = new PdfDocument();
foreach(string fPath in FilePaths)
{
string ext = Path.GetExtension(fPath);
if (ImageExtensions().Contains(ext))
AddImageToPDF(fPath, ref doc);
}
try
{
doc.Save(OutputFilePath);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
doc.Close();
doc.Dispose();
}
private void AddImageToPDF(string imagePath, ref PdfDocument doc)
{
Image MyImage = Image.FromFile(imagePath);
AddImageToPDF(MyImage, ref doc);
}
private void AddImageToPDF(Image image, ref PdfDocument doc)
{
try
{
int numPages = doc.Pages.Count;
using (Image MyImage = image)
{
for (int _pageIndex = 0; _pageIndex < MyImage.GetFrameCount(FrameDimension.Page); _pageIndex++)
{
MyImage.SelectActiveFrame(FrameDimension.Page, _pageIndex);
XImage img = XImage.FromGdiPlusImage(MyImage);
img.Interpolate = true;
var page = new PdfPage() { Orientation = img.PixelWidth > img.PixelHeight ? PageOrientation.Landscape : PageOrientation.Portrait };
doc.Pages.Add(page);
using (var xg = XGraphics.FromPdfPage(doc.Pages[_pageIndex + numPages]))
{
xg.DrawImage(img, 0, 0);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
File set A(在大多数观众中被打破)。 File set B(在所有观众中工作)。两组都是使用完全相同的机制 (Irfanview) 从 PNG 转换而来的 JPEG。
为什么除了 Firefox 之外的所有查看器都无法正确渲染 A,我可以做些什么来解决这个问题?
【问题讨论】:
-
如果我错了,请纠正我,但我会在点
yourString.split('.')处拆分字符串并选择拆分后数组的最后一个元素:splittedString[splittedString.length - 1] -
我目前无法检查您的文件,但通常您可以依靠 Adobe Reader 正确呈现有效文件(它还会呈现许多无效文件不知何故让其他 pdf 实施者难以生存标准,但通常不会无法正确呈现有效文件)。因此,这些文件很可能确实已损坏。
-
Firefox 可以正确呈现,因为它忽略了 PDF 文件中指定的标志。 PDFsharp 根据 Windows 框架返回的信息设置这些标志。另请参阅下面的答案。