【发布时间】:2016-04-07 13:50:03
【问题描述】:
当我尝试将 pdf 文件转换为单独的图像文件作为旧浏览器的后备时,我遇到了 ABCPdf 问题。
我有一些工作代码可以完美地呈现页面并将呈现的大小调整为所需的大小。现在当pdf页面很大w7681px x h10978px时出现我的问题。它几乎杀死了我的开发机器,部署机器甚至无法咀嚼文件。
我通常只是将页面 1 对 1 渲染为 pdf 页面,然后使用其他算法来调整此图像的大小。这效率不高,因为 ABCPdf 需要消耗大量能量来输出此图像。
我有以下代码:
private byte[] GeneratePng(Doc pdfDoc, int dpi)
{
var useDpi = dpi;
pdfDoc.Rendering.DotsPerInch = useDpi;
pdfDoc.Rendering.SaveQuality = 100;
pdfDoc.Rect.String = pdfDoc.CropBox.String;
pdfDoc.Rendering.ResizeImages = true;
int attemptCount = 0;
for (;;)
{
try
{
return pdfDoc.Rendering.GetData("defineFileTypeDummyString.png");
}
catch
{
if (++attemptCount == 3) throw;
}
}
}
我尝试了以下解决方案:
调整页面大小
pdfDoc.SetInfo(pdfDoc.Page, "/MediaBox:Rect", "0 0 200 300");
调整页面大小并输出。这似乎根本没有任何改变。
在渲染之前调整图像大小:
foreach (IndirectObject io in pdfDoc.ObjectSoup) {
if (io is PixMap) {
PixMap pm = (PixMap)io;
pm.Realize(); // eliminate indexed color images
pm.Resize(pm.Width / 4, pm.Height / 4);
}
}
什么也没做,仍然导致加载时间过长。
在渲染前运行缩小尺寸操作:
using (ReduceSizeOperation op = new ReduceSizeOperation(pdfDoc))
op.Compact(true);
什么也没做。刚刚直接去渲染,花了很长时间。
有人可以帮我吗?也许指向我一些 ABCPdf 调整大小算法之类的。
【问题讨论】:
标签: c# pdf image-resizing abcpdf