2016-07-13 2 views
2

Код, который я использую для подчеркивания выбора текста. Я начинаю вызывать метод addUnderline(), другие методы - вспомогательные методы.Подчеркивание с результатами pdfnet в разной толщине линии

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(); 
       } 
      } 
     } 

Вы можете видеть на изображении, если внимательно посмотрите, что некоторые линии толще или тоньше других. Это исправление? кстати, когда я увеличить/проблема нет ...

enter image description here

+0

Есть ли особая причина, по которой вы создаете пользовательский внешний вид аннотации подчеркивания? Похоже, вы просто хотите стандартное подчеркивание, так что это кажется ненужным. – Ryan

ответ

0

Вы должны установить следующие на вашем Pdf элементе управления:

PDFViewCtrl.SetThinLineAdjustment(true, true); 

Это удалит ступенчатость на линиях и означает, что все строки, равные 1,5px, равны 1px и т. д. См. Здесь: https://www.pdftron.com/pdfnet/mobile/docs/WinRT/html/M_pdftron_PDF_PDFViewCtrl_SetThinLineAdjustment.htm

+0

Нет, это не исправить – PrisonMike

Смежные вопросы