2016-04-07 43 views
0

當我嘗試將PDF文件轉換爲單獨的圖像文件作爲舊瀏覽器的回退時,我遇到了ABCPdf問題。在渲染之前用ABCPdf調整頁面大小(pdf中的巨大圖像)

我有一些工作代碼可以完美呈現頁面並將渲染大小調整爲想要的大小。現在我的問題發生在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); 
    } 
} 

什麼也沒做任何,仍然導致了很長的加載時間。

渲染之前運行reduzed大小操作:

using (ReduceSizeOperation op = new ReduceSizeOperation(pdfDoc)) 
    op.Compact(true); 

沒有做任何事情無論是。剛剛去了渲染,花了很長時間。

任何人都可以幫助我嗎?也許指向我一些ABCPdf調整大小算法或什麼。

回答

0

好的,我跟ABCPdf的客戶支持部門交談過,他們給了我下面的內容。

doc1.Read(originalPDF); 

// Specify size of output page. (This example scales the page, maintaining the aspect ratio, 
// but you could set the MediaBox Height and Width to any desired value.) 
doc2.MediaBox.Height = doc1.MediaBox.Height/8; 
doc2.MediaBox.Width = doc1.MediaBox.Width/8; 
doc2.Rect.SetRect(doc2.MediaBox); 
doc2.Page = doc2.AddPage(); 

// Create the output image 
doc2.AddImageDoc(doc1, 1, null); 
doc2.Rendering.Save(savePath); 

這應該與單頁PDF一起使用,所以如果你有一張pdf格式的大圖片,那麼你應該把它切碎。你可以按照我的其他Q/A來做:Chop PDFs into single pages

他們在上面的代碼中使用的渲染算法是由ABCPdf自動檢測到的,你不能自己控制它(他們告訴我,我不想)。所以我把自己的信念放在他們的代碼中。至少我做了一個測試,質量看起來與InterpolationMode.HighQualityBicubic非常相似,只有放大時纔有所不同。所以我也不會太在意。

最後上面的代碼給了我一個速度提升比渲染,然後調整大約快10倍。所以如果你經常做這個操作,那真的很值得。

相關問題