>

5 페이지를 가지고 있습니다. pdf 좌표를 기준으로 특정 요소를 강조해야합니다

와이즈 비즈   .

iTextsharp를 사용하여 아래 코드를 시도했지만 페이지 번호를 포함하여 어떻게 할 수 있는지 제안하십시오

X top left,Y top left,X top right ,Y top  right ,  X bottom right , Y bottom right ,X bottom left, Y bottom left

출력 직사각형으로 요소를 강조 표시하십시오. PDF의 3 페이지를 강조 표시해야합니다.

using System; using System.ComponentModel; using System.Data; using System.Text; using System.Windows.Forms; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; //Create a simple test file string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf"); //Create a new file from our test file with highlighting string highLightFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Highlighted.pdf"); //Bind a reader and stamper to our test PDF PdfReader reader = new PdfReader(outputFile); using (FileStream fs = new FileStream(highLightFile, FileMode.Create, FileAccess.Write, FileShare.None)) { using (PdfStamper stamper = new PdfStamper(reader, fs)) { //Create a rectangle for the highlight. NOTE: Technically this isn't used but it helps with the quadpoint calculation iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(60.6755f, 749.172f, 94.0195f, 735.3f); //Create an array of quad points based on that rectangle. NOTE: The order below doesn't appear to match the actual spec but is what Acrobat produces float[] quad = { rect.Left, rect.Bottom, rect.Right, rect.Bottom, rect.Left, rect.Top, rect.Right, rect.Top }; //Create our hightlight PdfAnnotation highlight = PdfAnnotation.CreateMarkup(stamper.Writer, rect, null, PdfAnnotation.MARKUP_HIGHLIGHT, quad); //Set the color highlight.Color = BaseColor.YELLOW; //Add the annotation stamper.AddAnnotation(highlight,1); } }  

"text": "66 66 6666 6666"이 강조 표시됩니다

입력 파일 출력 파일

"boundingBox": [3.2924,7.7146,5.7564,7.7038,5.7671,7.9836,3.3032,7.9943]

  • 답변 # 1

    잘못된 페이지

    먼저 잘못된 페이지에 주석을 추가합니다.

    말씀

    와이즈 비즈

    하지만 1 페이지에 넣었습니다.

    Need to highlight 3rd page of PDF.

    이 문제를 해결하려면 페이지 번호를 변경하십시오 :

    stamper.AddAnnotation(highlight,1);
    
    
    잘못된 좌표

    코드의 좌표가 아닙니다

    stamper.AddAnnotation(highlight,3);
    
    

    당신이 그 JSON'ish 방식으로 준 사람들도

    iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(60.6755f, 749.172f, 94.0195f, 735.3f);
    
    

    적어도 페이지 미디어 상자에서 제공하는 일반 PDF 좌표계가 아닌 강조 표시하려는 위치 근처에 있어야합니다. Adobe Acrobat에서 측정하여 다음과 같은 대략적인 좌표를 얻었습니다.

    "boundingBox": [3.2924,7.7146,5.7564,7.7038,5.7671,7.9836,3.3032,7.9943]
    
    

    표시 한 좌표 중 일부가 강조 할 이미지 부분의 실제 좌표 인 경우 해당 좌표를 사용 된 좌표계에 대해 해당 제공자에게 문의하여 주어진 페이지의 미디어 상자에서 좌표로 변환하십시오.

    QuadPoints에서 질문 가능한 순서

    iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(240f, 264f, 413f, 289f); 를 만듭니다  이 순서를 사용하여 :

    quad
    
    

    이로 인해 캡이 오목 해집니다. 아마도 사용하고 싶을 것입니다

    float[] quad = { rect.Left, rect.Bottom, rect.Right, rect.Bottom, rect.Left, rect.Top, rect.Right, rect.Top };
    
    

    대신 Adobe Reader가 볼록한 캡으로 표시됩니다. 배경은이 답변을 읽으십시오.

    예제 출력

    당신은 말합니다 :

    와이즈 비즈

    위의 세 가지 변경 사항을 코드에 적용하면 다음과 같이 나타납니다.

    float[] quad = { rect.Left, rect.Top, rect.Right, rect.Top, rect.Left, rect.Bottom, rect.Right, rect.Bottom };

관련 자료

  • 이전 email - Postfix가 메일을 보내지 않음
  • 다음 python - scl enable을 사용하여 dockerfile에서 python3 앱을 실행하는 방법