完全无法使用PdfSharpCore将JPEG图像渲染为PDF。
代码就像
一样简单public byte[] GetPdfContent()
{
ImageSource.ImageSourceImpl = new ImageSharpImageSource();
var document = new PdfDocument();
var logo = XImage.FromFile("logo.jpg");
// this is test line, I'm saving XImage result and it is identical to the source file!
File.WriteAllBytes("logo1.jpg", logo.AsJpeg().ToArray());
var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
gfx.DrawImage(logo, 0, 0);
using (var stream = new MemoryStream())
{
document.Save(stream, false);
return stream.ToArray();
}
}
我知道必须设置ImageSource.ImageSourceImpl
,并且已将其设置为基于ImageSharp
的最简单的实现:ImageSource.ImageSourceImpl = new ImageSharpImageSource()
的确有效,因为XImage被保存为{ {1}}正确。
但是我的PDF在视觉上是空白的。二进制内容在那里,而且似乎所有格式属性都可以,但是二进制数据与源有些不同。
这是我的ImageSharp实现保存/加载图像的方式:
logo1.jpg
最后,PDF件:
public class ImageSharpImageSource : ImageSource
{
protected override IImageSource FromFileImpl(string path, int? quality = 75)
{
return new ImageSharpImageSourceImpl(path, () =>
{
return Image.Load<Rgb24>(path, new JpegDecoder());
}, (int)quality);
}
private class ImageSharpImageSourceImpl : IImageSource
{
public void SaveAsJpeg(MemoryStream ms)
{
Image.SaveAsJpeg(ms, new JpegEncoder());
}
}
}
请帮助,我被困了几天!这些东西是新手,可能会缺少一些东西吗?..
注意:7 0 obj % PdfSharpCore.Pdf.Advanced.PdfImage
<<
/BitsPerComponent 8
/ColorSpace /DeviceRGB
/Filter /DCTDecode
/Height 340
/Interpolate true
/Length 16443
/Subtype /Image
/Type /XObject
/Width 340
>>
stream <<BINARY DATA>>
方法可以正常工作,因此我可以使用相同的设置来呈现文本。
答案 0 :(得分:0)
请使用此方法:-
internal void SaveImageAsPdf(string imageFileName, string pdfFileName, int width = 600)
{
using (var document = new PdfDocument())
{
PdfPage page = document.AddPage();
using (XImage image = XImage.FromFile(imageFileName))
{
var height = (int)(((double)width / (double)image.PixelWidth) * image.PixelHeight);
page.Width = width;
page.Height = height;
XGraphics graphics = XGraphics.FromPdfPage(page);
graphics.DrawImage(image, 0, 0, width, height);
}
document.Save(pdfFileName);
}
}
如果您需要更多参考,例如我们将图像转换为pdf,然后删除该图像,也请参考:-Link,了解更多信息