在渲染之前使用ABCPdf调整页面大小(pdf中的大图像)

时间:2016-04-07 13:50:03

标签: c# pdf image-resizing abcpdf

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

0 个答案:

没有答案