2012-05-04 35 views
10

私は専門家のプリンタに行くためにスポットカラーと色分解をPDF出力で指定でき、これをサポートしているかどうか不思議であるプロジェクトにPDFBoxを使用することに興味があります。もしそうなら(私もそうだと思いますが)、私はまた、いくつかのサンプルコードを探しています。PDFBoxはスポットカラーとセパレーションをサポートしていますか?

メーリングリスト(here)で2009年の古い投稿が見つかりました。これは、PDFBoxが色分解をサポートすることができますが、サンプルコードを見つけることに成功していないと信じています。 JavaDocを見て、org.apache.pdfbox.pdmodel.graphics.colorクラスを発見しましたが、どのように活用するのか分からず、ウェブサイトやソースコードにcookbookの例が表示されません。

具体的には、DeviceNカラースペースの説明に役立つ例があります。

+0

セパレーションとデバイスNは同じではありません。 –

答えて

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();'は、すべての色が分離していることを確実に知ることができないため、危険です。それ以外に、答えはOKだと思います。 tintTransform関数を作成する必要があるため、難しいゼロから色空間を作成する方法もあります。 –

関連する問題