您好,感谢您的查看和帮助!
我在使用Aspose.Pdf中遇到了问题,我将input.pdf文件里面的全部文件转成图片流后,保存到当前pdf中发现他很大。
input原始文件大小只有:94KB
out输出文件大小:4.6MB
out.pdf (4.6 MB)
测试文件:inupt.pdf (93.1 KB)
下面是我的全部代码:
//打开文档
Aspose.Pdf.Document doc = new Aspose.Pdf.Document("input.pdf");
//PDF每页转成图片
for (int i = 1; i <= doc.Pages.Count; i++)
{
//PDF页面宽度
float pageWidth = (float)doc.Pages[i].GetPageRect(false).Width;
//PDF页面高度
float pageHeight = (float)doc.Pages[i].GetPageRect(false).Height;
//PDF拆分指定文件为图片 根据文件流返回照片流 拆分第一页为图片
MemoryStream images = PdfToJpgOneAspose(doc, i);
//接收图片
Aspose.Pdf.ImageStamp imageStamp = new Aspose.Pdf.ImageStamp(images);
//删除第一页
doc.Pages.Delete(i);
//在第一页插入空白页
var page = doc.Pages.Insert(i);
page.SetPageSize(pageWidth, pageHeight);
imageStamp.Width = pageWidth;
imageStamp.Height = pageHeight;
//第一页插入图片
doc.Pages[i].AddStamp(imageStamp);
}
doc.Save("out.pdf", Aspose.Pdf.SaveFormat.Pdf);
/// <summary>
/// PDF拆分指定文件为图片 根据文件路径返回照片流
/// </summary>
public static MemoryStream PdfToJpgOneAspose(Aspose.Pdf.Document pdfDocument, int pages)
{
//分辨率
Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(300);
Aspose.Pdf.Devices.JpegDevice jpegDevice = new Aspose.Pdf.Devices.JpegDevice(resolution, 50);
MemoryStream memStream = new MemoryStream();
//转换一个特定的页面,并保存图像流
jpegDevice.Process(pdfDocument.Pages[pages], memStream);
//返回图片流
return memStream;
}
@fhn123456
您正在将 PDF 页面文本转换为图像,这会增加 PDF 的大小。 您可以如下所示减小分辨率大小以减小输出文件大小。
Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(100);
您好,感谢您的回复,我尝试从新创建一个实例,并把图片添加到新的实例中,发现PDF文件小了很多,如下代码。
1,但是我在使用当中,有一个问题。
我的需求是:根据图像尺寸指定PDF页面大小,以下代码确实可以实现,但是,图片分辨率300,A4像素是2480x3508,导致我的PDF页面也是2480x3508大小的,最终导致PDF也会大一些,PDF 页面A4应该是595.3x841.9的,我尝试将图片大小改成595.3x841.9发现,PDF里面的图片模糊了。
有没有API可以实现像素转成PDF需要的磅单位。
根据图片分辨率转成PDF页面需要的大小,如:图像:2480x3508,PDF页面就是:595.3x841.9
以下是我的全部代码:
public static string PdfToJpgAsposetest(string fileName)
{
//打开文档
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(fileName);
//创建实例
Aspose.Pdf.Document document = new Aspose.Pdf.Document();
//PDF每页转成图片
for (int i = 1; i <= doc.Pages.Count; i++)
{
//PDF页面宽度595磅 1cm=28.35磅 1.5cm=42.525磅 一磅也叫点(72磅=1英寸) 72磅=1英寸,1英寸=2.54厘米 1 厘米 = 28.3464566929 点(磅)
float pageWidth = (float)doc.Pages[i].GetPageRect(false).Width;
//PDF页面高度842点
float pageHeight = (float)doc.Pages[i].GetPageRect(false).Height;
//添加一页
Aspose.Pdf.Page page = document.Pages.Add();
//PDF拆分指定文件为图片 根据文件流返回照片流 拆分第一页为图片
MemoryStream images = PdfToJpgOneAspose(doc, i);
System.Drawing.Image img = new Bitmap(images);
var image = new Aspose.Pdf.Image { ImageStream = images };
//边距信息
page.PageInfo.Margin = new Aspose.Pdf.MarginInfo(0, 0, 0, 0);
//高
page.PageInfo.Height = img.Height;
//宽
page.PageInfo.Width = img.Width;
//段落
page.Paragraphs.Add(image);
}
document.Save("out.pdf", Aspose.Pdf.SaveFormat.Pdf);
}
/// <summary>
/// PDF拆分指定文件为图片 根据文件路径返回照片流
/// </summary>
public static MemoryStream PdfToJpgOneAspose(Aspose.Pdf.Document pdfDocument, int pages)
{
//分辨率
Aspose.Pdf.Devices.Resolution resolution = new Aspose.Pdf.Devices.Resolution(300);
Aspose.Pdf.Devices.JpegDevice jpegDevice = new Aspose.Pdf.Devices.JpegDevice(resolution, 50);
MemoryStream memStream = new MemoryStream();
//转换一个特定的页面,并保存图像流
jpegDevice.Process(pdfDocument.Pages[pages], memStream);
//返回图片流
return memStream;
}
@fhn123456
您正面临 Aspose.PDF 的预期行为。 但是,我们已将您的疑虑记录在我们的问题跟踪系统中。 已根据您的要求记录了票证 PDFNET-53310。 一旦有更新可用,我们会通知您。
好的,感谢您的回复和帮助!
Aspose.Pdf.Image.ImageScale。图像比例,是否可以按比例缩小图像,值我该如何设置,范围是多少?
public double ImageScale { get; set; }
@fhn123456
如果要调整图像大小,请阅读以下文章。
设置图像大小
您可以从以下 Github 示例中找到 ImageScale 的代码示例。