2017-03-21 57 views
0

我想使用Websupergoo ABCpdf將PDF轉換爲灰度(黑/白)PDF。
我指使用ABC將PDF轉換爲灰度pdf PDF

http://www.websupergoo.com/helppdfnet/source/8-abcpdf.operations/3-recoloroperation/1-methods/recolor.htm?q=recoloroperation

 Doc theDoc = new Doc(); 
     theDoc.Read(Server.MapPath("src.pdf")); 
     int pages = theDoc.PageCount; 
     MyOp.Recolor(theDoc, (WebSupergoo.ABCpdf8.Objects.Page)theDoc.ObjectSoup[theDoc.Page]); //Here problem 
     theDoc.Save(Server.MapPath("greyscale1.pdf")); 
     theDoc.Clear(); 

上面的代碼工作的罰款單頁PDF。

此代碼時,我試圖用一個循環下面的錯誤發生

Code With error

+2

請不要用'itext'標記你的問題,當它是關於另一個產品。 –

回答

0

頁碼PDF

只有第一頁轉換是不一樣的頁中abcPDF,所以你不能使用頁碼作爲對象湯的索引。

嘗試這樣的事情,而不是(未經測試):

int pages = theDoc.PageCount; 
for(int i=0; i < pages; i++) 
{ 
    theDoc.PageNumber = i; 
    MyOp.Recolor(theDoc, (WebSupergoo.ABCpdf8.Objects.Page)theDoc.ObjectSoup[theDoc.Page]); 
} 

編輯:以上顯然沒有工作,但你鏈接到顯示的文檔,還有,需要一個文件對象,而不是一個方法頁面對象。如果你改變你的MyOp.Recolor()方法來此這應該工作:在再顯色

public class MyOp 
{ 
    public static void Recolor(Doc doc) { 
    RecolorOperation op = new RecolorOperation(); 
    op.DestinationColorSpace = new ColorSpace(doc.ObjectSoup, ColorSpaceType.DeviceGray); 
    op.ConvertAnnotations = false; 
    op.ProcessingObject += Recoloring; 
    op.ProcessedObject += Recolored; 
    op.Recolor(doc); 
    } 
} 

我不知道你在做什麼(或者需要做)()方法或重新着色()方法,但這對這裏的變化無關緊要。

+0

我曾經使用過相同的代碼。這段代碼只轉換pdf的第一頁。如果pdf包含多於一個,它將不起作用 – Narasappa

+0

好吧,這個與上面發佈的不同。這應該解決你得到的例外,我會認爲它會起作用。 – Moose

+0

又增加了一次嘗試。 RecolorOperation上的Recolor()方法也可以使用Doc對象而不是Page對象。 – Moose

0

因爲我瘋了與轉換PDF到這裏灰度

c# printing through PDF drivers, print to file option will output PS instead of PDF

我發現上面的回答(謝謝),但需要加以糾正給大家一點點可能需要:

Doc theDoc = new Doc(); 

    theDoc.Read("test.pdf"); 

    //doc.Rendering.ColorSpace = XRendering.ColorSpaceType.Gray; 
    //doc.SaveOptions. 

    //MyOp.Recolor(theDoc, (Page)theDoc.ObjectSoup[theDoc.Page]); 

    int pages = theDoc.PageCount; 
    for (int i = 0; i < pages; i++) 
    { 
     theDoc.PageNumber = i+1; // this is because numbering is from 1 :) 
     MyOp.Recolor(theDoc, (Page)theDoc.ObjectSoup[theDoc.Page]); 
    } 

    theDoc.Save("out.pdf"); 

    theDoc.Clear(); 

該類仍然如其示例

public class MyOp 
    { 
     public static void Recolor(Doc doc, Page page) 
     { 
      RecolorOperation op = new RecolorOperation(); 
      op.DestinationColorSpace = new ColorSpace(doc.ObjectSoup, ColorSpaceType.DeviceGray); 
      op.ConvertAnnotations = false; 
      op.ProcessingObject += Recoloring; 
      op.ProcessedObject += Recolored; 
      op.Recolor(page); 
     } 


      //public static void Recolor(Doc doc) 
      //{ 
      // RecolorOperation op = new RecolorOperation(); 
      // op.DestinationColorSpace = new ColorSpace(doc.ObjectSoup, ColorSpaceType.DeviceGray); 
      // op.ConvertAnnotations = false; 
      // op.ProcessingObject += Recoloring; 
      // op.ProcessedObject += Recolored; 
      // op.Recolor(doc); 
      //} 


     public static void Recoloring(object sender, ProcessingObjectEventArgs e) 
     { 
      PixMap pm = e.Object as PixMap; 
      if (pm != null) 
      { 
       ColorSpaceType cs = pm.ColorSpaceType; 
       if (cs == ColorSpaceType.DeviceCMYK) 
        e.Cancel = true; 
       e.Tag = cs; 
      } 
     } 

     public static void Recolored(object sender, ProcessedObjectEventArgs e) 
     { 
      if (e.Successful) 
      { 
       PixMap pm = e.Object as PixMap; 
       if (pm != null) 
       { 
        ColorSpaceType cs = (ColorSpaceType)e.Tag; 
        if (pm.Width > 1000) 
         pm.CompressJpx(30); 
        else if (cs == ColorSpaceType.DeviceRGB) 
         pm.CompressJpeg(30); 
        else 
         pm.Compress(); // Flate 
       } 
      } 
     } 
    } 

不要忘記使用(不是其他版本),像魅力一樣工作。

using WebSupergoo.ABCpdf9.Objects; 
using WebSupergoo.ABCpdf9.Operations;