2016-07-13 7 views
2

Der Code, den ich für die Unterstreichung einer Textauswahl verwende. Ich beginne, die addUnderline() -Methode aufzurufen, die anderen Methoden sind Hilfsmethoden.Unterstreichung mit pdfnet ergibt unterschiedliche Linienstärke

private pdftron.SDF.Obj CreateUnderlineAppearance(pdftron.PDF.Rect bbox) 
     { 
      ElementBuilder builder = new ElementBuilder(); 
      ElementWriter writer = new ElementWriter(); 

      builder.PathBegin(); 
      builder.MoveTo(bbox.x1, bbox.y1); 
      builder.LineTo(bbox.x2, bbox.y1); 
      Element line = builder.PathEnd(); 

      //Set color attributes for the line... 
      line.SetPathFill(false); 
      line.SetPathStroke(true); 

      GState gs = line.GetGState(); 
      gs.SetStrokeColorSpace(ColorSpace.CreateDeviceRGB()); 
      gs.SetStrokeColor(new ColorPt(0, 0, 0)); // black 
      gs.SetLineWidth(2); 

      writer.Begin(m_document); 
      writer.WriteElement(line); 
      pdftron.SDF.Obj stm = writer.End(); 

      builder.Dispose(); 
      writer.Dispose(); 

      // Set the bounding box 
      stm.PutRect("BBox", bbox.x1, bbox.y1, bbox.x2, bbox.y2); 
      stm.PutName("Subtype", "Form"); 

      return stm; 
     } 

     public Annot CreateUnderlineAnnot(pdftron.PDF.Rect rect) 
     { 
      Annot underlineAnnot = Annot.Create(m_document, Annot.Type.e_Underline, rect); 
      underlineAnnot.SetAppearance(CreateUnderlineAppearance(rect)); 
      return underlineAnnot; 
     } 
     public void AddUnderline() 
     { 
      if (m_document != null) 
      { 
       PDFViewCtrl.Selection selection = m_pdfViewer.GetSelection(); 
       int pageNumber = selection.GetPageNum(); 
       double[] quads = selection.GetQuads(); 
       int numQuads = quads.Length/8; 

       if (quads.Length % 8 == 0) //must have at least 8 points to be valid 
       { 
        Console.WriteLine("GetRectsFromQuads - numQuads: " + numQuads.ToString()); 

        for (int i = 0; i < numQuads; i++) 
        { 
         Rect selectionRect = GetSelectionRect(ref quads, i); 
         //Console.WriteLine("GetRectsFromQuads - aRect: " + rectX1.ToString() + " | " + rectY1.ToString() + " | " + rectX2.ToString() + " | " + rectY2.ToString()); 

         Annot underlineAnnot = CreateUnderlineAnnot(selectionRect); 
         m_pdfViewer.AddUnderlineAnnotationToPage(underlineAnnot, pageNumber); 

         //m_pdfViewer.Refresh(); --> to see how this algorithm works when debugging 
        } 
        m_pdfViewer.RefreshAnnotations(); 
       } 
      } 
     } 

Sie können auf dem Bild sehen, wenn Sie genau hinsehen, dass einige Linien dicker oder dünner als andere sind. Ist das reparierbar? durch die Art und Weise, wenn ich vergrößern/verkleinern das Problem ist weg ...

enter image description here

+0

Gibt es einen besonderen Grund, warum Sie eine benutzerdefinierte Darstellung für die Unterstreichungsannotation erstellen? Es sieht so aus, als ob Sie nur eine Standardunterstreichung wünschen, daher erscheint das unnötig. – Ryan

Antwort

Verwandte Themen