当我尝试将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调整大小算法或其他东西。