2012-05-04 57 views
10

我感興趣的使用PDFBox的用於需要能夠指定PDF輸出專色和分色去一個專業的打印機,並很好奇,它是否支持這個項目。如果是這樣(我認爲是這樣),我也在尋找一些示例代碼。PDFBox是否支持專色和分色?

我在他們的郵件列表(here)中發現了一個來自2009年的舊帖子,這讓我相信PDFBox可以支持分色,但是沒有成功找到任何示例代碼。我通過自己的JavaDoc望去,發現org.apache.pdfbox.pdmodel.graphics.color類,但沒有任何想法如何利用他們並沒有看到他們的網站上或在他們的源代碼的任何cookbook例子。

我具體應該理解,幫助說明的DeviceN色彩空間的任何實例。

+0

分離和DeviceN不一樣。 –

回答

0

爲什麼你不能使用PDSeparationclass

+0

這似乎是朝着正確方向邁出的一步。您是否有任何將此類應用於PDF輸出的示例代碼? –

1

請參閱如下

enter image description here

1. get the PDColor from a PDF file(spotColor.pdf),and make sure that the spot colors which you well used are in this PDF file.(I made the file by Adobe Illustrator) 
    public static Map<String, PDColor> getSpotColor() { 
      Map<String, PDColor> colors = new HashMap<String, PDColor>(); 
      PDDocument spotColorFile = null; 
      try { 
       spotColorFile = PDDocument.load(new FileInputStream(new File(
         "d:\\spotColor.pdf"))); 
       for (PDPage page : spotColorFile.getPages()) { 
        for (COSName name : page.getResources().getColorSpaceNames()) { 
         PDColor color = page.getResources().getColorSpace(name) 
           .getInitialColor(); 
         PDSeparation cs = (PDSeparation) color.getColorSpace(); 
         colors.put(cs.getColorantName(), color); 
        } 
       } 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if (spotColorFile != null) 
        try { 
         spotColorFile.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } finally { 
         spotColorFile = null; 
        } 
      } 
      return colors; 
     } 
2. use your PDColor 
public static void main(String[] args) { 
     PDDocument doc = null; 
     PDPage page = null; 
     try { 
      Map<String, PDColor> colors = getSpotColor(); 
      doc = new PDDocument(); 
      page = new PDPage(new PDRectangle(100, 100)); 
      doc.addPage(page); 
      PDPageContentStream content = new PDPageContentStream(doc, page); 

      content.beginText(); 
      content.setNonStrokingColor(colors.get("PANTONE 2607 C")); 
      content.setFont(PDType1Font.HELVETICA_BOLD, 20); 
      content.showText("abcdef"); 
      content.endText(); 

      content.setNonStrokingColor(colors.get("PANTONE 108 U")); 
      content.addRect(50, 50, 50, 50); 
      content.fill(); 
      content.close(); 

      doc.save("d:\\spotColorTest.pdf"); 
     } catch (Exception e) { 
      System.out.println(e); 
     } finally { 
      if (doc != null) 
       try { 
        doc.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        doc = null; 
       } 
     } 
    } 

3,如果你有一些想法更聰明,請讓我知道 :)

+1

如果你向他解釋了代碼,你的回答會更有幫助。 – Markus

+0

此行'PDSeparation cs =(PDSeparation)color.getColorSpace();'是有風險的,因爲您無法確定所有顏色都是分離的。除此之外,我認爲答案是肯定的。另一種方法是從零開始創建色彩空間,這很難實現,因爲必須創建tintTransform函數。 –