感谢您的 查看和帮助!
我在使用Aspose.Pdf API时陷入了深深的疑问?
input:inupt.pdf (93.1 KB)
1,当我把PDF里的图片保存成jpg格式,PDF大小是英寸单位,图片宽和高是像素单位,我该如何知道PDF里面的图片转成jpg格式后,多大的像素才是最佳的,,,有相关的转换API吗?
//分辨率
Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(300);
Aspose.Pdf.Devices.JpegDevice jpegDevice = new Aspose.Pdf.Devices.JpegDevice(resolution, 50);
string savefilejpg = "";
//打开文档
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(input);
for (int pageCount = 1; pageCount <= pdfDocument.Pages.Count; pageCount++)
{
savefilejpg = $"{out}{filenamejpg}.jpg";
using (FileStream imageStream = new FileStream(savefilejpg, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
//转换一个特定的页面,并保存图像流
jpegDevice.Process(pdfDocument.Pages[pageCount], imageStream);
// 封闭河流
imageStream.Close();
}
}
input:jpg.zip (395.5 KB)
2,多个图片,如何合并成一个PDF,假设我有3张jpg,我该如何把这三张jpg放到一个PDF当中,其中一张jpg占一页PDF?
我又该如何知道,jpg合并成PDF,jpg宽和高多少可以填充满当前页的PDF。
@fhn123456
1- 分辨率可以定义为将 PDF 转换为图像时像素的大小。您可以使用单值和双值初始化分辨率,例如 new Resolution(300)
或 new Resolution(150, 150)
。除此之外,还可以定义图像质量和页面大小。您能否分享要从 PDF 生成的图像中的预期结果?
2- 如果你想根据 PDF 页面大小添加图像,你可以在下面的代码片段中:
private static void AddImageAccordingToPage(string dataDir)
{
var pdf = new Aspose.Pdf.Document();
var pdfImageSection = pdf.Pages.Add();
DirectoryInfo dir = new DirectoryInfo(dataDir + "images\\");
FileInfo[] files = dir.GetFiles("*.jpg");
foreach (var file in files)
{
FileStream stream = new FileStream(file.FullName, FileMode.Open);
System.Drawing.Image img = new Bitmap(stream);
img = ScaleImage(img, (int)pdfImageSection.PageInfo.Width, (int)pdfImageSection.PageInfo.Height);
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
var image = new Aspose.Pdf.Image { ImageStream = ms };
pdfImageSection.Paragraphs.Add(image);
}
pdf.Save(dataDir + "Image2Pdf_out.pdf");
}
public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxWidth, int maxHeight)
{
var ratioX = (double)maxWidth / image.Width;
var ratioY = (double)maxHeight / image.Height;
var ratio = Math.Min(ratioX, ratioY);
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
var newImage = new Bitmap(newWidth, newHeight);
using (var graphics = Graphics.FromImage(newImage))
graphics.DrawImage(image, 0, 0, newWidth, newHeight);
return newImage;
}
如果您需要根据图像尺寸指定 PDF 页面大小,可以通过以下代码实现:
Aspose.Pdf.Document doc = new Aspose.Pdf.Document();
Aspose.Pdf.Page page = doc.Pages.Add();
System.Drawing.Image img = new Bitmap(dataDir + "Long Image.jpg");
page.PageInfo.Margin = new MarginInfo(0, 0, 0, 0);
page.PageInfo.Height = img.Height;
page.PageInfo.Width = img.Width;
Aspose.Pdf.Image image1 = new Aspose.Pdf.Image();
image1.File = dataDir + "Long Image.jpg";
page.Paragraphs.Add(image1);
doc.Save(dataDir + "output.pdf");
感谢您的回复和帮助!
1,PDF:inupt.pdf (93.1 KB)
预期结果:jpg.zip (395.5 KB)
2,您提供的参考代码实现了我的功能,您的帮助使我受益匪浅,非常感谢您的帮助!
DirectoryInfo dir = new DirectoryInfo(dataDir + "images\\");
FileInfo[] files = dir.GetFiles("*.jpg");
//创建实例
Aspose.Pdf.Document doc = new Aspose.Pdf.Document();
foreach (var file in files)
{
string imagesFile = file.FullName;
//添加一页
Aspose.Pdf.Page page = doc.Pages.Add();
System.Drawing.Image img = new Bitmap(imagesFile);
//边距信息
page.PageInfo.Margin = new Aspose.Pdf.MarginInfo(0, 0, 0, 0);
//高
page.PageInfo.Height = img.Height;
//宽
page.PageInfo.Width = img.Width;
Aspose.Pdf.Image image1 = new Aspose.Pdf.Image();
//图片路径
image1.File = imagesFile;
//段落
page.Paragraphs.Add(image1);
}
doc.Save(dataDir + "output.pdf");
3,ScaleImage()这个缩放方法里面代码都是什么含义,我用bug调试,发现var newImage = new Bitmap(newWidth, newHeight);里面的newWidth和newHeight和传递过来的形参数值是一样的,为什么不直接把形参里面的值赋给它,而是通过计算?
public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxWidth, int maxHeight)
{
var ratioX = (double)maxWidth / image.Width;
var ratioY = (double)maxHeight / image.Height;
var ratio = Math.Min(ratioX, ratioY);
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
var newImage = new Bitmap(newWidth, newHeight);
using (var graphics = Graphics.FromImage(newImage))
graphics.DrawImage(image, 0, 0, newWidth, newHeight);
return newImage;
}
@fhn123456
ScaleMethod() 可帮助您在添加到 PDF 时保持图像的纵横比。例如,如果图像是横向的,并且您将其添加到纵向模式的 A4 尺寸页面上,它会被挤压和缩小,导致看起来很糟糕。所以这个方法会根据提供的高度和宽度调整图像的纵横比。请注意,此方法不是 API 功能的一部分。它只是用C#编写的自定义方法,以获得某些好处。