2016-10-12 2 views
0

Ich bekomme nicht, wie man transparenten Text mit Hilfe von pdfBOX hinzufügt.Wie man transparenten Text in pdfBOX erstellt oder dem Text mit Hilfe von pdfBOX Opazität hinzufügt?

+0

Teil Duplikat https://stackoverflow.com/questions/4540593/draw-transparent-lines-with-pdfbox (die nicht akzeptierte Antwort sehen, einige adjustement für 2.0 benötigt) –

+0

PDExtendedGraphicsState Graphics = new PDExtendedGraphicsState (); graphicsState.setStrokingAlphaConstant (0.5f); COSName graphicsStateName = page.getResources(). Add (graphicsState); try (PDPageContentStream cs = neuer PDPageContentStream (Dokument, Seite, true, true, true)) { cs.appendRawCommands ("/" + graphicsStateName.getName() + "gs \ n"); // zeichnen Sie Ihre Linie hier. } – sandy

+0

Ich benutze es mit 1.8 und bekomme Fehler als Die Methode hinzufügen (PDExtendedGraphicsState) ist nicht definiert für den Typ PDResources – sandy

Antwort

1

Hier ist etwas, das Alpha mit 1,8 zeigt (Sie sollten 2. * verwenden, das ist ein bisschen einfacher).

PDExtendedGraphicsState gs1 = new PDExtendedGraphicsState(); 
    gs1.setNonStrokingAlphaConstant(1f); 
    PDExtendedGraphicsState gs2 = new PDExtendedGraphicsState(); 
    gs2.setNonStrokingAlphaConstant(0.2f); 
    Map<String, PDExtendedGraphicsState> graphicsStatesMap = page.getResources().getGraphicsStates(); 
    if (graphicsStatesMap == null) 
    { 
     graphicsStatesMap = new HashMap<String, PDExtendedGraphicsState>(); 
    } 
    graphicsStatesMap.put("gs1", gs1); 
    graphicsStatesMap.put("gs2", gs2); 
    page.getResources().setGraphicsStates(graphicsStatesMap); 
    cs.setFont(PDType1Font.HELVETICA_BOLD, 60); 
    cs.setNonStrokingColor(255, 0, 0); 
    cs.appendRawCommands("/gs1 gs\n"); 
    cs.beginText(); 
    cs.moveTextPositionByAmount(50, 600); 
    cs.drawString("Apache PDFBox 1"); 
    cs.endText(); 
    cs.setNonStrokingColor(0, 0, 255); 
    cs.appendRawCommands("/gs2 gs\n"); 
    cs.beginText(); 
    cs.moveTextPositionByAmount(70, 620); 
    cs.drawString("Apache PDFBox 2"); 
    cs.endText(); 
    cs.close(); 
+0

* "aber es tut nicht wirklich Transparenz" * - was genau meinst du damit? – mkl

+0

@mkl Ich erwartete, dass der zweite Text irgendwie mit dem ersten "verschmelzen" würde, aber es ist nicht passiert. Der zweite Text ist deutlich über dem ersten. Ich habe eine zweite Datei mit verschiedenen Farben erstellt: http://www.filedropper.com/transparent_1 –

+0

Ein transparentes Overlay ist immer noch ein Overlay. Wenn Sie etwas wollen, das Hintergrund und Vordergrund ohne Vorliebe von beiden kombiniert, suchen Sie tatsächlich nach einem * "Rendering-Modus" * wie ** Verdunkeln ** oder ** Multiplizieren **. – mkl

Verwandte Themen